EKS 완전 프라이빗 클러스터 - Eksctl 사용 설명서

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

EKS 완전 프라이빗 클러스터

eksctl은 아웃바운드 인터넷에 액세스할 수 없고 프라이빗 서브넷만 있는 완전 프라이빗 클러스터 생성을 지원합니다. VPC 엔드포인트는 AWS 서비스에 대한 프라이빗 액세스를 활성화하는 데 사용됩니다.

이 가이드에서는 아웃바운드 인터넷 액세스 없이 프라이빗 클러스터를 생성하는 방법을 설명합니다.

완전 프라이빗 클러스터 생성

완전 프라이빗 클러스터를 생성하는 데 필요한 유일한 필드는 입니다privateCluster.enabled.

privateCluster: enabled: true

클러스터 생성 후 Kubernetes API 서버에 액세스해야 하는 eksctl 명령은 클러스터의 VPC, 피어링된 VPC 내에서 실행하거나 AWS Direct Connect와 같은 다른 수단을 사용하여 실행해야 합니다. EKS APIs에 액세스해야 하는 eksctl 명령은 클러스터의 VPC 내에서 실행 중인 경우 작동하지 않습니다. 이 문제를 해결하려면 Amazon Virtual Private Cloud(VPC)에서 Amazon Elastic Kubernetes Service(Amazon EKS) 관리 API에 비공개로 액세스할 수 있도록 Amazon EKS에 대한 인터페이스 엔드포인트를 생성합니다. APIs Amazon Virtual Private Cloud 향후 릴리스에서 eksctl은이 엔드포인트를 생성하는 지원을 추가하므로 수동으로 생성할 필요가 없습니다. Amazon EKS용 AWS PrivateLink를 활성화한 후에는 OpenID Connect 공급자 URL에 액세스해야 하는 명령을 클러스터의 VPC 외부에서 실행해야 합니다.

클러스터의 VPC, 피어링된 VPC 내에서 명령을 실행하거나 AWS Direct Connect와 같은 다른 방법을 사용하는 경우 관리형 노드 그룹을 생성하면 계속 작동하며 자체 관리형 노드 그룹을 생성하면 EKS 인터페이스 엔드포인트를 통해 API 서버에 액세스해야 하므로 작동합니다.

참고

VPC 엔드포인트는 사용량에 따라 시간 단위로 요금이 청구됩니다. 요금에 대한 자세한 내용은 AWS PrivateLink 요금에서 확인할 수 있습니다.

주의

완전 프라이빗 클러스터는에서 지원되지 않습니다eu-south-1.

추가 AWS 서비스에 대한 프라이빗 액세스 구성

작업자 노드가 AWS 서비스에 비공개로 액세스할 수 있도록 eksctl은 다음 서비스에 대한 VPC 엔드포인트를 생성합니다.

  • 컨테이너 이미지를 가져오기 위한 ECR( ecr.api 및 모두ecr.dkr)의 인터페이스 엔드포인트(AWS CNI 플러그인 등)

  • 실제 이미지 계층을 가져오기 위한 S3의 게이트웨이 엔드포인트

  • aws-cloud-provider 통합에 필요한 EC2용 인터페이스 엔드포인트

  • 서비스 계정에 대한 Fargate 및 IAM 역할(IRSA)을 지원하기 위한 STS용 인터페이스 엔드포인트

  • CloudWatch 로깅이 활성화된 경우 CloudWatch 로깅을 위한 인터페이스 엔드포인트(logs)

이러한 VPC 엔드포인트는 기능 프라이빗 클러스터에 필수이므로 eksctl은 구성 또는 비활성화를 지원하지 않습니다. 그러나 클러스터는 다른 AWS 서비스에 대한 프라이빗 액세스가 필요할 수 있습니다(예: Cluster Autoscaler에 필요한 Autoscaling). 이러한 서비스는에서 지정할 수 있으며privateCluster.additionalEndpointServices, eksctl에 각 서비스에 대한 VPC 엔드포인트를 생성하도록 지시합니다.

예를 들어 Autoscaling 및 CloudWatch 로깅에 대한 프라이빗 액세스를 허용하려면

privateCluster: enabled: true additionalEndpointServices: # For Cluster Autoscaler - "autoscaling" # CloudWatch logging - "logs"

에서 지원되는 엔드포인트는 autoscaling, cloudformationadditionalEndpointServices입니다logs.

엔드포인트 생성 건너뛰기

필요한 AWS 엔드포인트가 설정되고 EKS 설명서에 설명된 서브넷에 연결된 상태로 VPC가 이미 생성된 경우는 다음과 skipEndpointCreation 같은 옵션을 제공하여 VPC 생성을 건너뛸 eksctl 수 있습니다.

privateCluster: enabled: true skipEndpointCreation: true

이 설정은와 함께 사용할 수 없습니다additionalEndpointServices. 모든 엔드포인트 생성을 건너뜁니다. 또한이 설정은 엔드포인트 <→ 서브넷 토폴로지가 올바르게 설정된 경우에만 권장됩니다. 서브넷 ID가 올바르고 vpce 라우팅이 접두사 주소로 설정된 경우 필요한 모든 EKS 엔드포인트가 생성되어 제공된 VPC에 연결됩니다. eksctl는 이러한 리소스를 변경하지 않습니다.

노드 그룹

클러스터의 VPC는 퍼블릭 서브넷 없이 생성되므로 프라이빗 노드 그룹(관리형 및 자체 관리형 모두)만 완전 프라이빗 클러스터에서 지원됩니다. privateNetworking 필드(nodeGroup[].privateNetworking managedNodeGroup[)는 명시적으로 설정해야 합니다. 완전 프라이빗 클러스터에 설정privateNetworking되지 않은 상태로 두는 것은 오류입니다.

nodeGroups: - name: ng1 instanceType: m5.large desiredCapacity: 2 # privateNetworking must be explicitly set for a fully-private cluster # Rather than defaulting this field to `true`, # we require users to explicitly set it to make the behaviour # explicit and avoid confusion. privateNetworking: true managedNodeGroups: - name: m1 instanceType: m5.large desiredCapacity: 2 privateNetworking: true

클러스터 엔드포인트 액세스

완전 프라이빗 클러스터는 클러스터 생성 clusterEndpointAccess 중 수정을 지원하지 않습니다. 완전 프라이빗 클러스터는 프라이빗 액세스만 할 수 있고 이러한 필드를 수정하면 클러스터가 중단될 수 clusterEndpoints.privateAccess있으므로 clusterEndpoints.publicAccess 또는를 설정하는 것은 오류입니다.

사용자 제공 VPC 및 서브넷

eksctl은 기존 VPC 및 서브넷을 사용하여 완전 프라이빗 클러스터 생성을 지원합니다. 프라이빗 서브넷만 지정할 수 있으며 아래에 서브넷을 지정하는 것은 오류입니다vpc.subnets.public.

eksctl은 제공된 VPC에 VPC 엔드포인트를 생성하고 제공된 서브넷의 라우팅 테이블을 수정합니다. eksctl은 기본 라우팅 테이블을 수정하지 않으므로 각 서브넷에는 명시적 라우팅 테이블이 연결되어 있어야 합니다.

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: private-cluster region: us-west-2 privateCluster: enabled: true additionalEndpointServices: - "autoscaling" vpc: subnets: private: us-west-2b: id: subnet-0818beec303f8419b us-west-2c: id: subnet-0d42ef09490805e2a us-west-2d: id: subnet-0da7418077077c5f9 nodeGroups: - name: ng1 instanceType: m5.large desiredCapacity: 2 # privateNetworking must be explicitly set for a fully-private cluster # Rather than defaulting this field to true for a fully-private cluster, we require users to explicitly set it # to make the behaviour explicit and avoid confusion. privateNetworking: true managedNodeGroups: - name: m1 instanceType: m5.large desiredCapacity: 2 privateNetworking: true

완전 프라이빗 클러스터 관리

클러스터 생성 후 모든 명령이 작동하려면 eksctl에서 EKS API 서버 엔드포인트에 대한 프라이빗 액세스와 아웃바운드 인터넷 액세스(용)가 필요합니다EKS:DescribeCluster. API 서버에 액세스할 필요가 없는 명령은 eksctl에 아웃바운드 인터넷 액세스 권한이 있는 경우 지원됩니다.

완전 프라이빗 클러스터 강제 삭제

eksctl은 클러스터의 모든 리소스에 자동으로 액세스할 수 없으므로 eksctl을 통해 전체 프라이빗 클러스터를 삭제할 때 오류가 발생할 수 있습니다.는 이를 해결하기 위해 --force 존재합니다. 클러스터를 강제로 삭제하고 오류가 발생하면 계속됩니다.

제한 사항

현재 구현의 제한 사항은 eksctl이 처음에 퍼블릭 및 프라이빗 엔드포인트 액세스가 모두 활성화된 클러스터를 생성하고 모든 작업이 완료된 후 퍼블릭 엔드포인트 액세스를 비활성화한다는 것입니다. 이는 eksctl이 자체 관리형 노드가 클러스터에 조인하고 GitOps 및 Fargate를 지원하도록 Kubernetes API 서버에 대한 액세스 권한이 필요하기 때문에 필요합니다. 이러한 작업이 완료되면 eksctl은 클러스터 엔드포인트 액세스를 프라이빗 전용으로 전환합니다. 이 추가 업데이트는 완전 프라이빗 클러스터를 생성하는 데 표준 클러스터보다 시간이 오래 걸린다는 의미입니다. 향후 eksctl은 이러한 API 작업을 수행하기 위해 VPC 지원 Lambda 함수로 전환할 수 있습니다.

HTTP 프록시 서버를 통한 아웃바운드 액세스

eksctl은 구성된 HTTP(S) 프록시 서버를 통해 AWS APIs와 통신할 수 있지만 프록시 제외 목록을 올바르게 설정해야 합니다.

일반적으로 값을 포함한 적절한 no_proxy 환경 변수를 설정하여 클러스터의 VPC 엔드포인트에 대한 요청이 프록시를 통해 라우팅되지 않도록 해야 합니다.eks.amazonaws.com.

프록시 서버가 "SSL 가로채기"를 수행하고 서비스 계정에 대한 IAM 역할(IRSA)을 사용하는 경우 도메인에 대해 SSL Man-in-the-Middle 명시적으로 우회해야 합니다oidc.<region>.amazonaws.com. 이렇게 하지 않으면 eksctl이 OIDC 공급자에 대해 잘못된 루트 인증서 지문을 가져오고, IAM 자격 증명을 얻을 수 없어 클러스터가 작동하지 않아 AWS VPC CNI 플러그인이 시작되지 않습니다.

추가 정보