• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

프라이빗 서브넷에 클러스터 구축

24.02.18 21:18 작성 24.02.19 09:30 수정 조회수 195

0

안녕하세요

myeks.yaml을 수정해봤는데 노드 구성 중에 롤백 됩니다

2차 시도때 넷 게이트웨이를 생성하는 부분도 추가해봤는데 클러스터까지 생성 후 노드 구성에서 오류가 발생합니다

수정이 곤란한 부분인지, 해결 방법이 있는지 궁금합니다

감사합니다

eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION --nodegroup-name=ng1 --node-type=${WorkerNodeInstanceType} --nodes ${WorkerNodeCount} --node-volume-size=${WorkerNodeVolumesize} --vpc-private-subnets "$PrivateSubnet1","$PrivateSubnet2" --version ${KubernetesVersion} --ssh-access --ssh-public-key /root/.ssh/id_rsa.pub --with-oidc --external-dns-access --full-ecr-access --dry-run > myeks.yaml

답변 3

·

답변을 작성해보세요.

0

추가적으로 설정할 부분이 있어 답변드립니다.

 

eksctl을 통한 클러스터 생성 시 Public 엔드포인트 접근 환경에 따라 Public & Private 엔드포인트 접근으로 변경 시 기존에 설명드린 고려 사항을 말씀드렸는데요. 추가적으로 아래 3항도 작업을 해주어야 하네요.

 

1. NAT 게이트웨이 생성

2. eksctl 설정에서 인자 값 수정 (privateAccess: true, privateNetworking: true)

3. ControlPlaneSecurityGroup 보안그룹 (인바운드 규칙에 443 포트 허용)

 

해당 보안 그룹은 eks-owned-eni를 통해 Control Plane에 접근하는 규칙으로...

Public 환경이라면 Data Plane에서 Control Plane으로 접근하는 경우 해당 경로로 접근하지 않습니다. (Public이니 외부 인터넷을 통해 접근되겠죠) 아무래도 퍼블릭 환경을 고려해서인지 해당 보안그룹은 기본적으로 인바운드 규칙이 존재하지 않습니다. (즉, eks-owned-eni를 통한 접근은 차단되겠네요)

 

하지만 Private 환경이라면... Data Plane에서 Control Plane으로 접근하는 경우 eks-owned-eni를 통해 접근할 것이고 이로 인해 ControlPlaneSecurityGroup 보안그룹을 참조하겠습니다.

image스크린샷 이미지와 같이 ControlPlaneSecurityGroup 보안그룹에 443 포트에 모든 IP 대역을 허용했습니다.(모든 IP 대역이 아니라 프라이빗 서브넷 대역만 추가해도 되겠네요.)

 

위 3가지 고려 사항을 충족하여 설정하고 eksctl로 클러스터를 생성하면 다음과 같이 프라이빗 서브넷에 노드를 구성했습니다.

image서브넷 ID 정보를 보면 프라이빗 서브넷에 생성된 것을 알 수 있고, 참고로 노드 생성 개수를 2로 지정해서 2대가 생성된 것이네요.

 

해당 테스트는 1장 실습 환경에서 기본 인프라와 필요 도구만 구성한 후 명령어를 통해 구성한 것입니다.

만약 원클릭 배포로 한 방에 구성하려면 위 내용들이 정의된 CloudFormation 템플릿을 구성해야겠네요. 이 부분은 조금 더 고민할 부분이 있겠습니다.

원하시는 구성이 성공적으로 이루어졌으면 좋겠네요.

감사합니다.

0

ynmj님의 프로필

ynmj

2024.02.19

삭제된 글입니다

원클릭 배포로 구성하는 것은 실습의 편의를 위해 원하는 구성을 정의하고 배포하는 이유인 것입니다. 즉, 원하는 구성을 위해 CloudFormation으로 미리 짜여진 것이지요.

꼭 원클릭 배포로 구성해야하는 것은 아닙니다. 다만 원하는 구성이 다르다면 그에 맞게 수정을 해야하는 것인데... 이에 따른 복잡성을 말씀드린 것입니다.

 

일단 수강생분이 CloudFormation에서 기본 인프라 정의에 NAT Gateway를 생성해서 프라이빗 서브넷도 외부 통신이 가능한 것으로 이해했습니다. 그러면 eksctl 명령에 대한 인자 값을 수정해야 하는데.. 공교롭게 클러스터 엔드포인트 방식 변경은 명령어 옵션을 통해 지정하지 않고 구성 파일에서 설정 값을 변경한 후 배포해야 합니다.

 

원클릭 배포에서 Create EKS Cluster & Nodegroup 영역의 구조를 살펴보면...

# Create EKS Cluster & Nodegroup
eksctl create cluster --name ...... > myeks.yaml
sed -i 's/certManager: false/certManager: true/g' myeks.yaml
sed -i 's/ebs: false/ebs: true/g' myeks.yaml

...
nohup eksctl create cluster -f myeks.yaml ......

eksctl create cluster 명령에 옵션을 부여하고 myeks.yaml 파일로 export하고 있습니다. 이후에 sed 명령으로 필요한 값을 변경한 후 최종적으로 eksctl 명령으로 myeks.yaml을 실행하고 있는 것이죠.

 

구성 파일에서 설정 값을 변경하기 위해 아래와 같은 sed 명령을 추가로 구성한 후 실행해 보시길 바랍니다.

sed -i 's/privateAccess: false/privateAccess: true/g' myeks.yaml
sed -i 's/privateNetworking: false/privateNetworking: true/g' myeks.yaml

 

 

추가적으로 실습이 끝나면 NAT 게이트웨이 삭제와 탄력적 IP 릴리즈 꼭 수행해주세요. 과금 대상 서비스입니다ㅠ

0

안녕하세요. CloudNet@ 팀입니다.


오류 내용이 확인이 안되서 어떤 부분인지 파악하긴 어렵지만... 예상되는 부분은 API 서버 엔드포인트 접근 방법 설정이 아닐까 싶습니다.

기본적으로 eksctl으로 클러스터 생성을 할때 API 서버 엔드포인트 접근 방식은 퍼블릭 방식입니다.

  clusterEndpoints:
    privateAccess: false
    publicAccess: true

별도의 지정이 없으면 위와 같은 파라미터로 정의되는 것이지요.

 

bastion host가 퍼블릭에 존재하고 워커 노드가 프라이빗에 존재하는 구성을 원하는 것으로 보이니 엔드포인트 접근 방식을 퍼블릭 & 프라이빗으로 구성해야 할 것 같네요.

myeks.yaml 파일에서 privateAccess와 publicAccess를 true로 변경 후 생성해 보세요.

  clusterEndpoints:
    privateAccess: true
    publicAccess: true


감사합니다.

링크 상 파일을 다운로드해 보니 myeks.yaml 파일을 조정하셨다는 것이 원클릭 배포에 대한 파일이었나 보네요.
저는 eks 설정에 대한 파일로 생각했네요.

--

일단 원클릭 배포로 다이렉트 구성을 하려면 필요한 인프라를 미리 정의해야 하고 eksctl 명령에서 파라미터 설정 값 변경도 해당 원클릭 배포 상에 정의해야 유기적인 연결에 의해 한 방에 생성될 것입니다.

요구 하신 환경에 대해 고려할 사항은 다음과 같을 것인데요.

  1. 프라이빗 서브넷의 외부 통신을 위해 NAT 게이트웨이도 구성

  2. eksctl 명령에서 별도 파일로 export한 후 필요한 인자를 수정한 다음에 클러스터를 생성 (이때 필요한 파라미터를 수정하도록 정의)


아무래도 CloudFormation 원클릭 배포에서 수정하는 작업은 복잡도나 고려할 사항이 많을 것입니다.

이를 감안하면... 차라리 1장 실습에서 제공하는 CloudFormation 기본 인프라 환경을 구성하고 여기에 NAT 게이트웨이를 추가한 후... bastion-host에서eksctl 명령으로 직접 수행하는 것이 어떨까 생각됩니다.