인터넷 액세스가 제한된 프라이빗 클러스터 배포 - Amazon EKS

인터넷 액세스가 제한된 프라이빗 클러스터 배포

이 주제에서는 아웃바운드 인터넷 액세스 권한이 없는 AWS 클라우드에 대해, Amazon EKS 클러스터를 배포하는 방법을 설명합니다. AWS Outposts에 로컬 클러스터가 있는 경우 이 항목 대신 AWS Outposts에 Amazon Linux 노드 생성를 참조하세요.

Amazon EKS 네트워킹에 익숙하지 않은 경우 Amazon EKS 작업자 노드에 대한 클러스터 네트워킹 설명을 참조하세요. 클러스터에 아웃바운드 인터넷 액세스 권한이 없는 경우에는 다음과 같은 요구 사항을 충족해야 합니다.

  • 클러스터에서는 VPC에 있는 컨테이너 레지스트리에서 이미지를 가져와야 합니다. VPC에서 Amazon Elastic Container Registry를 생성하고 노드에서 가져올 컨테이너 이미지를 복사할 수 있습니다. 자세한 내용은 한 리포지토리에서 다른 리포지토리로 컨테이너 이미지 복사 단원을 참조하십시오.

  • 클러스터에 활성화된 엔드포인트 프라이빗 액세스 권한이 있어야 합니다. 노드에서 클러스터 엔드포인트에 등록하려면 이 권한이 필요합니다. 엔드포인트 퍼블릭 액세스는 선택 사항입니다. 자세한 내용은 클러스터 API 서버 엔드포인트에 대한 네트워크 액세스 제어 단원을 참조하십시오.

  • 자체 관리형 Linux 노드와 Windows 노드에서는 시작하기 전에 다음과 같은 부트스트랩 인수가 포함되어야 합니다. 이러한 인수에서는 Amazon EKS 내부 검사를 우회하며 VPC 내에서 Amazon EKS API에 액세스하는 권한이 필요하지 않습니다.

    1. 다음과 같은 명령으로 클러스터의 엔드포인트 값을 결정합니다. my-cluster를 해당 클러스터의 이름으로 바꿉니다.

      aws eks describe-cluster --name my-cluster --query cluster.endpoint --output text

      예제 출력은 다음과 같습니다.

      https://EXAMPLE108C897D9B2F1B21D5EXAMPLE.sk1.region-code.eks.amazonaws.com
    2. 다음과 같은 명령으로 클러스터의 인증 기관 값을 결정합니다. my-cluster를 해당 클러스터의 이름으로 바꿉니다.

      aws eks describe-cluster --name my-cluster --query cluster.certificateAuthority --output text

      반환된 출력은 긴 문자열입니다.

    3. 다음과 같은 명령의 cluster-endpointcertificate-authority를 이전 명령의 출력에서 반환된 값으로 바꿉니다. 자체 관리형 노드 시작 시 부트스트랩 인수 지정에 대한 자세한 내용은 자체 관리형 Amazon Linux 노드 생성자체 관리형 Microsoft Windows 노드 생성 부분을 참조하세요.

      • Linux 노드용:

        --apiserver-endpoint cluster-endpoint --b64-cluster-ca certificate-authority

        추가 인수는 GitHub에서 부트스트랩 스크립트를 참조하세요.

      • Windows 노드용:

        참고

        사용자 지정 서비스 CIDR을 사용하는 경우-ServiceCIDR 파라미터를 사용하여 CIDR을 지정해야 합니다. 그렇지 않으면 클러스터의 Pods에 대한 DNS 확인이 실패합니다.

        -APIServerEndpoint cluster-endpoint -Base64ClusterCA certificate-authority

        추가 인수는 부트스트랩 스크립트 구성 파라미터 부분을 참조하세요.

  • 클러스터의 aws-auth ConfigMap은 VPC 내에서 생성해야 합니다. 항목을 생성하고 aws-auth ConfigMap에 추가하는 방법에 대한 자세한 내용을 보려면 터미널에 eksctl create iamidentitymapping --help를 입력합니다. ConfigMap이 서버에 없는 경우 eksctl에서는 명령을 사용해 ID 매핑을 추가할 때 해당 항목을 생성합니다.

  • 서비스 계정에 대한 IAM 역할로 구성된 Pods에서는 AWS 보안 토큰 서비스(AWS STS) API 호출에서 보안 인증 정보를 취득합니다. 아웃바운드 인터넷 액세스 권한이 없는 경우 VPC에서 AWS STS VPC 엔드포인트를 생성하고 사용해야 합니다. 대부분의 AWS v1 SDK는 기본적으로 글로벌 AWS STS 엔드포인트를 사용하며(sts.amazonaws.com), AWS STS VPC 엔드포인트는 사용하지 않습니다. AWS STS VPC 엔드포인트를 사용하려면 리전별 AWS 엔드포인트(sts.region-code.amazonaws.com)를 사용하도록 SDK를 구성해야 할 수도 있습니다. 자세한 내용은 서비스 계정의 AWS 보안 토큰 서비스 엔드포인트 구성 단원을 참조하십시오.

  • 클러스터의 VPC 서브넷에는 Pods에서 액세스해야 하는 모든 AWS 서비스에 대한 VPC 인터페이스 엔드포인트가 있어야 합니다. 자세한 내용은 인터페이스 VPC 엔드포인트를 사용하여 AWS 서비스에 액세스를 참조하세요. 일반적으로 사용하는 몇 가지 서비스와 엔드포인트가 아래 표에 나열되어 있습니다. 엔드포인트의 전체 목록은 AWS PrivateLink 가이드에서 AWS PrivateLink와 통합되는 AWS 서비스를 참조하세요.

    VPC 엔드포인트의 프라이빗 DNS 이름을 활성화하는 것이 좋습니다. 이렇게 하면 워크로드가 문제 없이 퍼블릭 AWS 서비스 엔드포인트를 계속 사용할 수 있습니다.

    Service 엔드포인트

    Amazon EC2

    com.amazonaws.region-code.ec2

    Amazon Elastic Container Registry(컨테이너 이미지 가져오기용)

    com.amazonaws.region-code.ecr.api, com.amazonaws.region-code.ecr.dkr, and com.amazonaws.region-code.s3

    Application Load Balancer 및 Network Load Balancer

    com.amazonaws.region-code.elasticloadbalancing

    AWS X-Ray

    com.amazonaws.region-code.xray

    Amazon CloudWatch Logs

    com.amazonaws.region-code.logs

    AWS 보안 토큰 서비스 (서비스 계정에 IAM 역할 사용 시 필요)

    com.amazonaws.region-code.sts

  • 자체 관리형 노드는 필요한 VPC 인터페이스 엔드포인트가 있는 서브넷에 배포해야 합니다. 관리형 노드 그룹을 생성하는 경우 VPC 인터페이스 엔드포인트 보안 그룹에서 서브넷에 대한 CIDR을 허용하거나 본인이 생성된 노드 보안 그룹을 VPC 인터페이스 엔드포인트 보안 그룹에 추가해야 합니다.

  • Pods에서 Amazon EFS 볼륨을 사용하는 경우, Amazon EFS로 저장된 탄력적 파일 시스템을 배포하기 전에 컨테이너 이미지가 Amazon EKS 클러스터와 동일한 AWS 리전을 사용하도록 설정하도록 드라이버의 kustomization.yaml 파일을 변경해야 합니다.

  • AWS 로드 밸런서 컨트롤러를 사용하여 AWS 애플리케이션 로드 밸런서(ALB) 및 네트워크 로드 밸런서를 프라이빗 클러스터에 배포할 수 있습니다. 배포할 때 명령줄 플래그를 사용하여 enable-shield, enable-wafenable-wafv2를 false로 설정해야 합니다. 수신 객체의 호스트 이름을 사용한 인증서 검색은 지원되지 않습니다. 이는 컨트롤러가 VPC 인터페이스 엔드포인트가 없는 AWS 인증서 관리자에 연결해야 하기 때문입니다.

    컨트롤러는 Fargate와 함께 사용하는 데 필요한 IP 대상이 있는 Network Load Balancer를 지원합니다. 자세한 내용은 Application Load Balancer를 사용하여 애플리케이션 및 HTTP 트래픽 라우팅Network Load Balancer 생성 섹션을 참조하세요.

  • Cluster Autoscaler가 지원됩니다. Cluster Autoscaler Pods를 배포할 때 명령줄이 --aws-use-static-instance-list=true를 포함하는지 확인하세요. 자세한 내용은 GitHub에서 정적 인스턴스 목록 사용을 참조하세요. 작업자 노드 VPC에는 AWS STS VPC 엔드포인트 및 자동 크기 조정 VPC 엔드포인트도 포함되어야 합니다.

  • 일부 컨테이너 소프트웨어 제품은 사용량을 모니터링하는 AWS Marketplace 미터링 서비스에 액세스하는 API 호출을 사용합니다. 프라이빗 클러스터에서는 이러한 호출이 허용되지 않으므로 이러한 컨테이너 유형은 프라이빗 클러스터에서 사용할 수 없습니다.