Amazon EKS 클러스터 생성 - Amazon EKS

Amazon EKS 클러스터 생성

이 주제에서는 Amazon EKS 클러스터를 생성하는 절차를 살펴봅니다. Amazon EKS 클러스터를 처음 만드는 경우 Amazon EKS 시작하기 가이드 중 하나를 따르는 것이 좋습니다. 여기에는 노드를 사용하여 Amazon EKS 클러스터를 생성하는 전체 시연을 제공합니다.

중요

Amazon EKS 클러스터가 생성될 때 클러스터를 생성하는 IAM 엔터티(사용자 또는 역할)가 Kubernetes RBAC 권한 부여 표에 관리자(system:masters 권한이 있음)로 추가됩니다. 처음에는 해당 IAM 사용자만 kubectl을 사용하여 Kubernetes API 서버를 호출할 수 있습니다. 자세한 내용은 섹션을 참조하세요클러스터의 사용자 또는 IAM 역할 관리 콘솔을 사용하여 클러스터를 생성하는 경우 클러스터에서 kubectl 명령을 실행할 때 동일한 IAM 사용자 자격 증명이 AWS SDK 자격 증명 체인에 있어야 합니다.

eksctl, AWS Management Console 또는 AWS CLI를 사용하여 클러스터를 생성할 수 있습니다.

eksctl

Prerequisite

eksctl 버전 0.70.0 이상이 설치되었습니다. 설치하거나 업그레이드하려면 eksctl 명령줄 유틸리티 섹션을 참조하세요.

기본 리전에서 Amazon EKS 최신 Kubernetes 버전으로 Amazon EKS 클러스터를 생성합니다. <example-values>(<> 포함)를 고유한 값으로 교체합니다. <1.20>를 모든 지원되는 버전으로 바꿀 수 있습니다.

eksctl create cluster \ --name <my-cluster> \ --version <1.21> \ --with-oidc \ --without-nodegroup
작은 정보

eksctl을 사용하여 클러스터를 만들 때 지정할 수 있는 대부분의 옵션을 보려면 eksctl create cluster --help 명령을 사용합니다. 모든 옵션을 보려면 구성 파일을 사용하면 됩니다. 자세한 내용은 eksctl 설명서에서 config 파일 사용config 파일 스키마 섹션을 참조하세요. GitHub에서 구성 파일 예제를 찾을 수 있습니다.

중요

클러스터가 배포된 후, AWS Outposts, AWS Wavelength 또는 AWS Local Zones에 자체 관리형 노드를 배포하려면, Amazon EKS 요구 사항을 충족하는 기존 VPC 가 있어야 하며 이전 명령에 --vpc-private-subnets 옵션을 사용합니다. 지정하는 서브넷 ID는 AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷일 수 없습니다. 기존 VPC 사용에 대한 자세한 내용은 eksctl 설명서에서 기존 VPC 사용: 기타 사용자 지정 구성 섹션을 참조하세요.

주의

AWS Key Management Service(AWS KMS)의 기존 AWS KMS key가 필요한 secretsEncryption 옵션이 있습니다. secretsEncryption 옵션이 있는 config 파일을 사용하여 클러스터를 생성하고 사용하는 KMS 키가 삭제되면 클러스터에 대한 복구 경로가 없어집니다. 비밀 암호화를 활성화하면 Kubernetes 비밀은 선택한 KMS 키를 사용하여 암호화됩니다. KMS 키는 대칭이어야 하고 클러스터와 동일한 리전에서 생성되어야 하며 KMS 키가 다른 계정에서 생성된 경우 사용자는 KMS 키에 액세스할 수 있어야 합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다른 계정의 사용자가 KMS 키를 사용하도록 허용을 참조하세요.

기본적으로 create-key 명령은 AWS KMS 작업 및 리소스에 대한 액세스 권한을 계정 루트 관리자에게 부여하는 키 정책으로 대칭 키를 생성합니다. 자세한 내용은 키 생성을 참조하십시오. 권한을 축소하려면 create-cluster API를 호출할 보안 주체의 정책에서 kms:DescribeKeykms:CreateGrant 작업이 허용되는지 확인합니다. Amazon EKS는 정책 조건 kms:GrantIsForAWSResource를 지원하지 않습니다. 이 작업이 KMS 키 정책 설명에 있으면 클러스터를 만들 수 없습니다.

클러스터 프로비저닝에는 몇 분 정도 걸립니다. 클러스터를 생성하는 동안 여러 줄의 출력이 표시됩니다. 출력의 마지막 줄은 다음 예제와 유사합니다.

[✓] EKS cluster "<my-cluster>" in "<region-code>" region is ready

1.18 이상 클러스터가 생성되면 클러스터와 함께 배포된 Amazon VPC CNI, CoreDNS 및 kube-proxy 추가 기능을 Amazon EKS 추가 기능으로 마이그레이션할 수 있습니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 추가 기능

AWS Management Console

Prerequisites

콘솔을 사용하여 클러스터를 생성하려면

  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. 클러스터 생성을 선택합니다.

  3. Configure cluster 페이지에서 다음 필드를 작성합니다.

    • 이름 - 클러스터에 대한 고유한 이름

    • Kubernetes 버전 - 클러스터에 대해 사용할 Kubernetes 버전

    • 클러스터 서비스 역할 - Kubernetes 제어 영역이 사용자를 대신하여 AWS 리소스를 관리할 수 있도록 허용하는 Amazon EKS 클러스터 역할을 선택합니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 클러스터 IAM 역할

    • 비밀 암호화 - (선택 사항) KMS 키를 사용하여 Kubernetes 비밀의 비밀 암호화를 활성화하도록 선택합니다. KMS 키는 대칭이어야 하고 클러스터와 동일한 리전에서 생성되어야 하며 KMS 키가 다른 계정에서 생성된 경우 사용자는 KMS 키에 액세스할 수 있어야 합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다른 계정의 사용자가 KMS 키를 사용하도록 허용을 참조하세요.

      나열된 키가 없으면 먼저 키를 생성해야 합니다. 자세한 내용은 키 생성을 참조하십시오.

      참고

      기본적으로 create-key 명령은 AWS KMS 작업 및 리소스에 대한 액세스 권한을 계정 루트 관리자에게 부여하는 키 정책으로 대칭 키를 생성합니다. 자세한 내용은 키 생성을 참조하십시오. 권한을 축소하려면 create-cluster API를 호출할 보안 주체의 정책에서 kms:DescribeKeykms:CreateGrant 작업이 허용되는지 확인합니다.

      Amazon EKS는 정책 조건 kms:GrantIsForAWSResource를 지원하지 않습니다. 이 작업이 KMS 키 정책 설명에 있으면 클러스터를 만들 수 없습니다.

      주의

      KMS 키를 삭제하면 클러스터가 영구적으로 성능 저하 상태가 됩니다. 클러스터 생성에 사용되는 KMS 키가 삭제되도록 예약되어 있는 경우 삭제하기 전에 의도한 작업인지 확인합니다. KMS 키가 삭제되면 클러스터를 복구할 경로가 없습니다. 자세한 내용은 AWS KMS 키를 참조하세요.

    • 태그 - (선택 사항) 클러스터에 태그를 추가합니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 리소스 태깅

  4. 다음을 선택합니다.

  5. 네트워킹 지정 페이지에서 다음 필드의 값을 선택합니다.

    • VPC - 클러스터에 대해 사용할 기존 VPC를 선택합니다. 목록에 기존 VPC가 없는 경우 먼저 VPC를 생성해야 합니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 클러스터에 대해 VPC 생성

    • 서브넷 - 기본적으로 이전 필드에서 지정한 VPC에서 사용 가능한 서브넷이 사전 선택됩니다. 클러스터 리소스를 호스팅하지 않으려는 서브넷(예: 작업자 노드 또는 로드 밸런서)을 선택 해제합니다. 서브넷이 Amazon EKS 클러스터 요구 사항을 충족해야 합니다. 자세한 내용은 섹션을 참조하세요클러스터 VPC 고려 사항

      중요
      • Amazon EKS AWS CloudFormation VPC 템플릿 중 하나를 사용하여 2020년 3월 26일 이전에 생성된 서브넷을 선택하는 경우, 2020년 3월 26일에 도입된 기본 설정 변경 사항을 알고 있어야 합니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 클러스터에 대해 VPC 생성

      • AWS Outposts, AWS Wavelength 또는 AWS Local Zones의 서브넷은 선택하지 않습니다. 클러스터를 배포한 후 AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷에 자체 관리 노드를 배포하려는 경우, 선택한 VPC PC에 Outposts 서브넷이 이미 있거나 새로 생성할 수 있는지 확인합니다.

      보안 그룹 - VPC를 만들 때 생성한 AWS CloudFormation 출력의 SecurityGroups 값입니다. 이 보안 그룹의 드롭다운 이름에는 ControlPlaneSecurityGroup이 있습니다.

      중요

      노드 AWS CloudFormation 템플릿이 여기서 지정하는 보안 그룹을 수정하므로 Amazon EKS에서는 각 클러스터 제어 영역(클러스터당 하나)에 대한 전용 보안 그룹을 사용할 것을 권장합니다. 이 보안 그룹이 다른 리소스와 공유되는 경우 이러한 리소스에 대한 연결을 차단하거나 중단할 수도 있습니다.

    • (선택 사항) Kubernetes가 서비스 IP 주소를 할당하는 CIDR 블록을 지정하려는 경우 [Kubernetes 서비스 IP 주소 범위 구성(Configure Kubernetes Service IP address range)]을 선택하고 [서비스 IPv4 범위(Service IPv4 range)]를 지정합니다. CIDR 블록은 다음 요구 사항을 충족해야 합니다.

      • 다음 범위 중 하나: 10.0.0.0/8, 172.16.0.0/12, or 192.168.0.0/16.

      • /24~/12

      • VPC에 지정된 CIDR 블록과 겹치지 않습니다.

      VPC에 연결되거나 피어링된 다른 네트워크의 리소스와 겹치지 않는 CIDR 블록을 지정하는 것이 좋습니다. CIDR 블록을 지정하지 않으면 Kubernetes는 10.100.0.0/16 또는 172.20.0.0/16 CIDR 블록에서 서비스 IP 주소를 할당합니다.

      중요

      클러스터를 만들 때만 사용자 지정 CIDR 블록을 지정할 수 있으며 클러스터가 만들어지면 이 값을 변경할 수 없습니다.

    • 클러스터 엔드포인트 액세스 - 다음 옵션 중 하나를 선택합니다.

      • 퍼블릭 - 클러스터의 Kubernetes API 서버 엔드포인트에 대한 퍼블릭 액세스만 활성화합니다. 클러스터의 VPC 외부에서 시작된 Kubernetes API 요청은 퍼블릭 엔드포인트를 사용합니다. 기본적으로 모든 소스 IP 주소에서 액세스가 허용됩니다. 선택적으로 고급 설정을 선택한 후 소스 추가를 선택하여 하나 이상의 CIDR 범위(예: 192.168.0.0/16)에 대한 액세스를 제한할 수 있습니다.

      • 프라이빗 - 클러스터의 Kubernetes API 서버 엔드포인트에 대한 프라이빗 액세스만 활성화합니다. 클러스터의 VPC 내에서 비롯된 Kubernetes API 요청이 프라이빗 VPC 엔드포인트를 사용합니다.

        중요

        아웃바운드 인터넷 액세스 없이 VPC를 생성한 경우 프라이빗 액세스를 활성화해야 합니다.

      • 퍼블릭 및 프라이빗 - 퍼블릭 및 프라이빗 액세스를 활성화합니다.

      이전 옵션에 대한 자세한 내용은 단원을 참고하십시오클러스터 엔드포인트 액세스 수정

  6. 이전 페이지에서 Kubernetes 버전 1.17 이하를 선택한 경우 다음 단계로 건너뜁니다. 버전 1.18 이상을 선택한 경우 [네트워킹 추가 기능(Networking add-ons)] 섹션의 기본값을 그대로 두어 AWS VPC CNI, CoreDNSkube-proxy Amazon EKS 추가 기능의 기본 버전을 설치하거나, 다른 버전을 선택할 수 있습니다. 추가 기능의 기능이 필요하지 않은 경우 클러스터가 생성된 후 추가 기능을 제거할 수 있습니다.

    Amazon EKS 추가 기능을 사용하려면 Kubernetes 1.18까지 사용할 수 없었던 서버 측 Kubernetes 적용 기능이 필요하므로 1.18 이상 클러스터에서만 사용할 수 있습니다. 클러스터에 대해 다른 Kubernetes 버전을 선택한 경우 이 옵션은 표시되지 않습니다.

    중요

    AWS VPC CNI 추가 기능은 Amazon EKS 노드 IAM 역할에 할당된 IAM 권한을 사용하도록 구성됩니다. 클러스터가 생성된 후 Amazon EC2 노드를 클러스터에 배포하기 전에, AmazonEKS_CNI_Policy IAM 정책이 노드 IAM 역할에 연결되어 있거나, 추가 기능이 실행되는 Kubernetes 서비스 계정에 연결된 다른 역할에 연결되어 있는지 확인해야 합니다. 서비스 계정에 IAM 역할을 사용하도록 Amazon VPC CNI 플러그인 구성의 지침에 따라 노드 IAM 역할 이외의 IAM 역할에 정책을 할당하는 것이 좋습니다. 클러스터와 IAM 역할이 생성되면, 생성한 IAM 역할을 사용하도록 추가 기능을 업데이트할 수 있습니다.

  7. 다음을 선택합니다.

  8. 로깅 구성 페이지에서 활성화할 로그 유형을 선택적으로 선택할 수 있습니다. 기본적으로 각 로그 유형은 Disabled(비활성)입니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 제어 영역 로깅

  9. 다음을 선택합니다.

  10. 검토 및 생성 페이지에서 이전 페이지에서 입력하거나 선택한 정보를 검토합니다. 선택 사항을 변경해야 하는 경우 편집을 선택합니다. 설정에 만족하면 생성을 선택합니다. Status(상태) 필드는 클러스터 프로비저닝 프로세스가 완료될 때까지 CREATING(생성 중)으로 표시됩니다.

    참고

    요청의 가용 영역 중 하나에 Amazon EKS 클러스터를 생성하는 데 충분한 용량이 없다는 오류가 표시될 수 있습니다. 이 경우 오류 출력에는 새 클러스터를 지원할 수 있는 가용 영역이 포함됩니다. 사용자 계정의 지원 가용 영역에 있는 2개 이상의 서브넷을 사용하여 클러스터를 다시 생성합니다. 자세한 내용은 섹션을 참조하세요용량 부족

    클러스터 프로비저닝에는 몇 분 정도 걸립니다.

  11. Amazon EKS용 kubeconfig 생성의 절차를 따라 새 클러스터와의 통신을 활성화합니다.

  12. (선택 사항) 일부 Amazon EKS 추가 기능을 사용하거나 개별 Kubernetes 워크로드에 특정 IAM 권한을 부여하려면 클러스터에 대해 OpenID Connect(OIDC) 공급자를 활성화해야 합니다. 클러스터에 대한 OIDC 공급자를 구성하려면 클러스터에 대한 IAM OIDC 공급자 생성 섹션을 참조하세요. 클러스터에 대해 OIDC 공급자를 한 번만 활성화하면 됩니다. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 섹션을 참조하세요. 워크로드에 특정 IAM 권한을 할당하는 방법에 대한 자세한 내용은 기술 개요 섹션을 참조하세요.

  13. 클러스터에 Amazon EC2 노드를 배포하려는 경우 AmazonEKS_CNI_Policy IAM 관리형 정책을 클러스터 IAM 역할에 연결하거나, Amazon VPC CNI 추가 기능을 위해 특별히 생성한 IAM 역할에 연결해야 합니다. 역할을 만들고 이를 사용하도록 추가 기능을 구성하는 방법에 대한 자세한 내용을 보려면 서비스 계정에 IAM 역할을 사용하도록 Amazon VPC CNI 플러그인 구성 섹션을 참조하세요.

AWS CLI

Prerequisites

AWS CLI를 사용하여 클러스터를 생성하려면

  1. 다음 명령을 사용하여 클러스터를 생성합니다. Amazon EKS 클러스터 IAM 역할에서 생성한 Amazon EKS 클러스터 IAM 역할의 Amazon 리소스 이름(ARN)과 Amazon EKS 클러스터에 대해 VPC 생성에서 생성한 VPC의 서브넷 및 보안 그룹 ID를 바꿉니다. <my-cluster>(<> 포함)를 클러스터 이름으로 바꾸고 <region-code>지원되는 리전으로 바꿉니다. <1.21>를 모든 지원되는 버전으로 바꿀 수 있습니다.

    subnetIds에서 AWS Outposts, AWS Wavelength 또는 AWS Local Zones에 서브넷을 지정하지 마십시오. 클러스터를 배포한 후 AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷에 자체 관리 노드를 배포하려는 경우, 지정한 VPC PC에 Outposts 서브넷이 이미 있거나 새로 생성할 수 있는지 확인합니다.

    aws eks create-cluster \ --region <region-code> \ --name <my-cluster> \ --kubernetes-version <1.21> \ --role-arn <arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-EXAMPLEBKZRQR> \ --resources-vpc-config subnetIds=<subnet-a9189fe2>,<subnet-50432629>,securityGroupIds=<sg-f5c54184>
    참고

    IAM 사용자에게 관리 권한이 없는 경우 해당 사용자가 Amazon EKS API 작업을 호출하는 권한을 명시적으로 추가해야 합니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 자격 증명 기반 정책 예제

    결과:

    { "cluster": { "name": "<my-cluster>", "arn": "arn:aws:eks:<region-code>:<111122223333>:cluster/<my-cluster>", "createdAt": <1527785885.159>, "version": "<1.21>", "roleArn": "arn:aws:iam::<111122223333>:role/eks-service-role-AWSServiceRoleForAmazonEKS-<AFNL4H8HB71F>", "resourcesVpcConfig": { "subnetIds": [ "<subnet-a9189fe2>", "<subnet-50432629>" ], "securityGroupIds": [ "<sg-f5c54184>" ], "vpcId": "<vpc-a54041dc>", "endpointPublicAccess": true, "endpointPrivateAccess": false }, "status": "CREATING", "certificateAuthority": {} } }
    참고

    요청의 가용 영역 중 하나에 Amazon EKS 클러스터를 생성하는 데 충분한 용량이 없다는 오류가 표시될 수 있습니다. 이 경우 오류 출력에는 새 클러스터를 지원할 수 있는 가용 영역이 포함됩니다. 사용자 계정의 지원 가용 영역에 있는 2개 이상의 서브넷을 사용하여 클러스터를 다시 생성합니다. 자세한 내용은 섹션을 참조하세요용량 부족

    Kubernetes 비밀을 암호화하려면 먼저 create-key 작업을 사용하여 KMS 키를 생성합니다.

    MY_KEY_ARN=$(aws kms create-key --query KeyMetadata.Arn —-output text)
    참고

    기본적으로 create-key 명령은 AWS KMS 작업 및 리소스에 대한 액세스 권한을 계정의 루트 사용자 관리자에게 부여하는 키 정책으로 대칭 키를 생성합니다. 자세한 내용은 키 생성을 참조하십시오. 권한을 축소하려면 create-cluster API를 호출할 보안 주체의 정책에서 kms:DescribeKeykms:CreateGrant 작업이 허용되는지 확인합니다.

    Amazon EKS는 정책 조건 kms:GrantIsForAWSResource를 지원하지 않습니다. 이 작업이 KMS 키 정책 설명에 있으면 클러스터를 만들 수 없습니다.

    --encryption-config 파라미터를 aws eks create-cluster 명령에 추가합니다. Kubernetes 보안 암호의 암호화는 클러스터가 생성될 때만 활성화할 수 있습니다.

    --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"<$MY_KEY_ARN>"}}]'

    keyArn 멤버는 KMS 키의 별칭 또는 ARN을 포함할 수 있습니다. KMS 키는 대칭이어야 하고 클러스터와 동일한 리전에서 생성되어야 하며 KMS 키가 다른 계정에서 생성된 경우 사용자는 KMS 키에 액세스할 수 있어야 합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다른 계정의 사용자가 KMS 키를 사용하도록 허용을 참조하세요.

    주의

    KMS 키를 삭제하면 클러스터가 영구적으로 성능 저하 상태가 됩니다. 클러스터 생성에 사용되는 KMS 키가 삭제되도록 예약되어 있는 경우 삭제하기 전에 의도한 작업인지 확인합니다. KMS 키가 삭제되면 클러스터를 복구할 경로가 없습니다. 자세한 내용은 AWS KMS 키 삭제를 참조하세요.

  2. 클러스터 프로비저닝에는 몇 분 정도 걸립니다. 다음 명령을 사용하여 클러스터의 상태를 쿼리할 수 있습니다. 클러스터 상태가 ACTIVE인 경우 계속 진행할 수 있습니다.

    aws eks describe-cluster \ --region <region-code> \ --name <my-cluster> \ --query "cluster.status"
  3. 클러스터 프로비저닝이 완료되면 다음 명령을 사용하여 endpointcertificateAuthority.data 값을 검색합니다. 클러스터와 통신할 수 있도록 이 값을 kubectl 구성에 추가해야 합니다.

    1. endpoint를 검색합니다.

      aws eks describe-cluster \ --region <region-code> \ --name <my-cluster> \ --query "cluster.endpoint" \ --output text
    2. certificateAuthority.data를 검색합니다.

      aws eks describe-cluster \ --region <region-code> \ --name <my-cluster> \ --query "cluster.certificateAuthority.data" \ --output text
  4. Amazon EKS용 kubeconfig 생성의 절차를 따라 새 클러스터와의 통신을 활성화합니다.

  5. (선택 사항) Amazon EKS 추가 기능을 사용하거나 개별 Kubernetes 워크로드에 특정 IAM 권한을 부여하려면 클러스터에 대해 OpenID Connect(OIDC) 공급자를 활성화해야 합니다. 클러스터에 대한 OIDC 공급자를 구성하려면 클러스터에 대한 IAM OIDC 공급자 생성 섹션을 참조하세요. 클러스터에 대해 OIDC 공급자를 한 번만 활성화하면 됩니다. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 섹션을 참조하세요. 워크로드에 특정 IAM 권한을 할당하는 방법에 대한 자세한 내용은 기술 개요 섹션을 참조하세요.

  6. 클러스터에 Amazon EC2 노드를 배포하려는 경우 AmazonEKS_CNI_Policy IAM 관리형 정책을 클러스터 IAM 역할에 연결하거나, Amazon VPC CNI 추가 기능을 위해 특별히 생성한 IAM 역할에 연결해야 합니다. 역할을 만들고 이를 사용하도록 추가 기능을 구성하는 방법에 대한 자세한 내용을 보려면 서비스 계정에 IAM 역할을 사용하도록 Amazon VPC CNI 플러그인 구성 섹션을 참조하세요.

  7. (선택 사항) 1.18 이상 클러스터를 생성하고 나면 클러스터와 함께 배포된 Amazon VPC CNI, CoreDNS 및 kube-proxy 추가 기능을 Amazon EKS 추가 기능으로 마이그레이션할 수 있습니다. 자세한 내용은 섹션을 참조하세요Amazon EKS 추가 기능