Amazon VPC CNI plugin for Kubernetes Amazon EKS 추가 기능을 사용한 작업 - Amazon EKS

Amazon VPC CNI plugin for Kubernetes Amazon EKS 추가 기능을 사용한 작업

Amazon VPC CNI plugin for Kubernetes 추가 기능은 Amazon EKS 클러스터의 각 Amazon EC2 노드에 배포됩니다. 이 추가 기능은 탄력적 네트워크 인터페이스를 생성하여 Amazon EC2 노드에 연결합니다. 또한 이 추가 기능은 프라이빗 IPv4 또는 IPv6 주소를 VPC에서 각 Pod 및 서비스에 할당합니다.

추가 기능 버전은 클러스터의 각 Fargate 노드와 함께 배포되지만 Fargate 노드에서는 업데이트되지 않습니다. 호환되는 다른 CNI 플러그인을 Amazon EKS 클러스터에서 사용할 수 있지만 Amazon EKS에서 지원하는 유일한 CNI 플러그인입니다.

다음 표에는 각 Kubernetes 버전에 사용할 수 있는 Amazon EKS 추가 기능 유형의 최신 버전이 나열되어 있습니다.

Kubernetes 버전 1.29 1.28 1.27 1.26 1.25 1.24 1.23
Amazon EKS 유형의 VPC CNI 버전 v1.17.1-eksbuild.1 v1.17.1-eksbuild.1 v1.17.1-eksbuild.1 v1.17.1-eksbuild.1 v1.17.1-eksbuild.1 v1.17.1-eksbuild.1 v1.17.1-eksbuild.1
중요

이 추가 기능을 자체 관리하는 경우 표의 버전이 사용 가능한 자체 관리 버전과 다를 수 있습니다. 이 추가 기능의 자체 관리형 유형 업데이트에 대한 자세한 내용은 자체 관리형 추가 기능 업데이트 부분을 참조하세요.

필수 조건
  • 기존 Amazon EKS 클러스터. 배포하려면 Amazon EKS 시작하기 섹션을 참조하세요.

  • 클러스터에 대한 기존 AWS Identity and Access Management(IAM) OpenID Connect(OIDC) 제공업체입니다. 이미 있는지 아니면 생성해야 하는지 확인하려면 클러스터의 IAM OIDC 제공업체 생성 부분을 참조하세요.

  • AmazonEKS_CNI_Policy IAM 정책(클러스터에서 IPv4 패밀리를 사용하는 경우) 또는 IPv6 정책(클러스터에서 IPv6 패밀리를 사용하는 경우)이 연결된 IAM 역할. 자세한 내용은 서비스 계정용 IAM 역할(IRSA)을 사용하도록 Amazon VPC CNI plugin for Kubernetes 구성 단원을 참조하십시오.

  • CNI 플러그인 버전 1.7.0 이상을 사용하고 Amazon VPC CNI plugin for Kubernetes사용자 지정 Pod보안 정책을 사용하는 경우 기본 Amazon EKS Pod 보안 정책 삭제포드 보안 정책 부분을 참조하세요.

  • 중요

    Amazon VPC CNI plugin for Kubernetes 버전 v1.16.0~v1.16.1은 Kubernetes 버전 1.23 이하와의 호환성을 제거했습니다. VPC CNI 버전 v1.16.2는 Kubernetes 버전 1.23 이하 및 CNI 사양 v0.4.0과의 호환성을 복원합니다.

    Amazon VPC CNI plugin for Kubernetes 버전 v1.16.0~v1.16.1은 CNI 사양 버전 v1.0.0을 구현합니다. CNI 사양 v1.0.0은 Kubernetes 버전 v1.24 이상을 실행하는 EKS 클러스터에서 지원됩니다. VPC CNI 버전 v1.16.0~v1.16.1 및 CNI 사양 v1.0.0은 Kubernetes 버전 v1.23 이하에서 지원되지 않습니다. CNI 사양 v1.0.0에 대한 자세한 내용은 Container Network Interface (CNI) Specification을 참조하세요.

고려 사항
  • 버전은 major-version.minor-version.patch-version-eksbuild.build-number(으)로 지정됩니다.

  • 각 기능의 버전 호환성 확인

    Amazon VPC CNI plugin for Kubernetes의 각 릴리스의 일부 기능에는 특정 Kubernetes 버전이 필요합니다. 다른 Amazon EKS 기능을 사용할 때 특정 버전의 추가 기능이 필요한 경우 기능 설명서에 설명되어 있습니다. 이전 버전을 실행할 특별한 이유가 없는 한 최신 버전을 실행하는 것이 좋습니다.

Amazon EKS 추가 기능 생성

추가 기능의 Amazon EKS 유형 생성.

  1. 클러스터에 설치된 추가 기능의 버전을 확인하세요.

    kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3

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

    v1.12.6-eksbuild.2
  2. 클러스터에 설치된 추가 기능의 유형을 확인하세요. 클러스터를 생성하는 데 사용한 도구에 따라 현재 클러스터에 Amazon EKS 추가 기능이 유형이 설치되어 있지 않을 수 있습니다. my-cluster를 해당 클러스터의 이름으로 바꿉니다.

    $ aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni --query addon.addonVersion --output text

    버전 번호가 반환되는 경우 Amazon EKS 유형의 추가 기능이 클러스터에 설치되고 본 절차의 나머지 단계를 완료할 필요가 없습니다. 오류가 번호가 반환되는 경우 Amazon EKS 유형의 추가 기능이 클러스터에 설치되지 않습니다. 이 절차의 나머지 단계를 완료하여 설치하세요.

  3. 현재 설치된 추가 기능의 구성을 저장합니다.

    kubectl get daemonset aws-node -n kube-system -o yaml > aws-k8s-cni-old.yaml
  4. AWS CLI를 사용하여 추가 기능을 생성합니다. AWS Management Console 또는 eksctl를 사용하여 추가 기능을 만들려면 추가 기능 생성 을 참조하여 추가 기능 이름을 vpc-cni로 지정하십시오. 다음 명령을 디바이스에 복사합니다. 필요에 따라 명령을 다음과 같이 수정한 다음에 수정한 명령을 실행합니다.

    • my-cluster를 클러스터 이름으로 바꿉니다.

    • 클러스터 버전의 최신 버전 표에 나와 있는 최신 버전으로 v1.17.1-eksbuild.1을(를) 교체하십시오.

    • 111122223333을 계정 ID로, AmazonEKSVPCCNIRole을 생성한 기존 IAM 역할 이름으로 바꿉니다. 역할을 지정하려면 클러스터의 IAM OpenID Connect(OIDC) 제공업체가 있어야 합니다. 클러스터의 해당 제공업체가 이미 있는지 아니면 생성해야 하는지 결정하려면 클러스터의 IAM OIDC 제공업체 생성 부분을 참조하세요.

    aws eks create-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.17.1-eksbuild.1 \ --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole

    Amazon EKS 추가 기능의 기본 설정과 충돌하는 사용자 지정 설정을 현재 추가 기능에 적용한 경우 생성이 실패할 수 있습니다. 생성에 실패하면 문제 해결에 도움이 될 수 있는 오류를 받게 됩니다. 또는 이전 명령에 --resolve-conflicts OVERWRITE을(를) 추가할 수 있습니다. 이렇게 하면 추가 기능이 기존 사용자 지정 설정을 덮어쓸 수 있습니다. 추가 기능을 만든 후에는 사용자 지정 설정으로 업데이트할 수 있습니다.

  5. 클러스터 Kubernetes 버전에 맞는 추가 기능의 최신 버전이 클러스터에 추가되었는지 확인합니다. my-cluster를 클러스터 이름으로 바꿉니다.

    aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni --query addon.addonVersion --output text

    추가 기능 생성이 완료되는 데 몇 초 정도 걸릴 수 있습니다.

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

    v1.17.1-eksbuild.1
  6. 원래 추가 기능을 사용자 지정 설정했다면 Amazon EKS 추가 기능을 생성하기 전에 이전 단계에서 저장한 구성을 사용하여 Amazon EKS 추가 기능을 사용자 지정 설정으로 업데이트하십시오.

  7. (선택 사항)cni-metrics-helper 클러스터에 설치합니다. 지표 헬퍼는 네트워크 인터페이스 및 IP 주소 정보를 수집하고 클러스터 수준에서 지표를 집계하고 이 지표를 Amazon CloudWatch에 게시하는 데 사용할 수 있는 도구입니다. 자세한 내용은 GitHub에서 metrics.proto를 참조하세요.

Amazon EKS 추가 기능 업데이트

추가 기능의 Amazon EKS 유형 업데이트. 클러스터에 Amazon EKS 유형의 추가 기능을 추가하지 않은 경우 이 절차를 완료하는 대신 추가하거나 자체 관리형 추가 기능 업데이트 부분을 참조하세요.

  1. 클러스터에 설치된 추가 기능의 버전을 확인하세요. my-cluster을 클러스터 이름으로 교체합니다.

    aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni --query "addon.addonVersion" --output text

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

    v1.12.6-eksbuild.2

    반환된 버전이 최신 버전 표에 있는 클러스터의 Kubernetes 버전과 동일한 경우 클러스터에 이미 최신 버전이 설치되어 있으므로 이 절차의 나머지 부분을 완료하지 않아도 됩니다. 출력에 버전 번호 대신 오류가 표시되면 클러스터에 설치된 추가 기능의 Amazon EKS 유형이 없는 것입니다. 이 절차로 업데이트하려면 먼저 추가 기능을 생성해야 합니다.

  2. 현재 설치된 추가 기능의 구성을 저장합니다.

    kubectl get daemonset aws-node -n kube-system -o yaml > aws-k8s-cni-old.yaml
  3. AWS CLI를 사용하여 추가 기능 업데이트. AWS Management Console 또는 eksctl를 사용하여 추가 기능을 업데이트하려면 추가 기능 업데이트 부분을 참조하세요. 다음 명령을 디바이스에 복사합니다. 필요에 따라 명령을 다음과 같이 수정한 다음에 수정한 명령을 실행합니다.

    • my-cluster를 클러스터 이름으로 바꿉니다.

    • 클러스터 버전의 최신 버전 표에 나와 있는 최신 버전으로 v1.17.1-eksbuild.1을(를) 교체하십시오.

    • 111122223333을 계정 ID로, AmazonEKSVPCCNIRole을 생성한 기존 IAM 역할 이름으로 바꿉니다. 역할을 지정하려면 클러스터의 IAM OpenID Connect(OIDC) 제공업체가 있어야 합니다. 클러스터의 해당 제공업체가 이미 있는지 아니면 생성해야 하는지 결정하려면 클러스터의 IAM OIDC 제공업체 생성 부분을 참조하세요.

    • --resolve-conflicts 보존 옵션에서는 추가 기능의 기존 구성 값을 보존합니다. 추가 기능 설정에 사용자 지정 값을 설정하고 이 옵션을 사용하지 않는 경우 Amazon EKS에서는 기본값으로 해당 값을 덮어씁니다. 이 옵션을 사용하는 경우에는 추가 기능을 업데이트하기 전에 프로덕션 클러스터에서 비프로덕션 클러스터의 필드 및 값 변경 사항을 테스트하는 것이 좋습니다. 이 값을 OVERWRITE로 변경하면 모든 설정이 Amazon EKS 기본값으로 변경됩니다. 설정에 사용자 지정 값을 설정한 경우 Amazon EKS 기본값으로 해당 값을 덮어쓸 수도 있습니다. 이 값을 none으로 변경하면 Amazon EKS에서는 설정의 값을 변경하지 않지만 업데이트에 실패할 수도 있습니다. 업데이트에 실패하면 충돌 해결에 도움이 되는 오류 메시지가 표시됩니다.

    • 구성 설정을 업데이트하지 않는 경우 --configuration-values '{"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}}'을(를) 명령에서 제거하십시오. 구성 설정을 업데이트하는 경우 "env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}를 설정하려는 설정으로 바꾸십시오. 이 예에서는 AWS_VPC_K8S_CNI_EXTERNALSNAT 환경 변수가 true로 설정되어 있습니다. 지정한 값은 구성 스키마에 유효해야 합니다. 구성 스키마를 모르는 경우 aws eks describe-addon-configuration --addon-name vpc-cni --addon-version v1.17.1-eksbuild.1을 실행하고 v1.17.1-eksbuild.1을 구성을 확인할 추가 기능의 버전 번호로 바꿉니다. 스키마가 출력에 반환됩니다. 기존 사용자 지정 구성이 있는데 이를 모두 제거하고 모든 설정의 값을 Amazon EKS 기본값으로 다시 설정하려면 명령에서 "env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}를 제거하여 {}을(를) 비워 두십시오. 각 설정에 대한 설명은 GitHub의 CNI 구성 변수를 참조하세요.

      aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.17.1-eksbuild.1 \ --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}}'

      업데이트가 완료되는 데 몇 초 정도 걸릴 수 있습니다.

  4. 추가 기능 버전이 업데이트되었는지 확인합니다. my-cluster를 클러스터 이름으로 바꿉니다.

    aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni

    업데이트가 완료되는 데 몇 초 정도 걸릴 수 있습니다.

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

    { "addon": { "addonName": "vpc-cni", "clusterName": "my-cluster", "status": "ACTIVE", "addonVersion": "v1.17.1-eksbuild.1", "health": { "issues": [] }, "addonArn": "arn:aws:eks:region:111122223333:addon/my-cluster/vpc-cni/74c33d2f-b4dc-8718-56e7-9fdfa65d14a9", "createdAt": "2023-04-12T18:25:19.319000+00:00", "modifiedAt": "2023-04-12T18:40:28.683000+00:00", "serviceAccountRoleArn": "arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole", "tags": {}, "configurationValues": "{\"env\":{\"AWS_VPC_K8S_CNI_EXTERNALSNAT\":\"true\"}}" } }

자체 관리형 추가 기능 업데이트

중요

자체 관리형 추가 기능 유형을 사용하는 대신 클러스터에 Amazon EKS 유형의 추가 기능을 추가하는 것이 좋습니다. 유형 간의 차이를 잘 모르는 경우 Amazon EKS 추가 기능 부분을 참조하세요. Amazon EKS 추가 기능을 클러스터에 추가하는 방법에 대한 자세한 내용은 추가 기능 생성 섹션을 참조하세요. Amazon EKS 추가 기능을 사용할 수 없는 경우, 사용할 수 없는 이유에 대한 문제를 컨테이너 로드맵 GitHub 리포지토리에 제출하는 것이 좋습니다.

  1. 클러스터에 Amazon EKS 추가 기능 유형이 설치되어 있는지 확인하세요. my-cluster를 해당 클러스터의 이름으로 바꿉니다.

    aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni --query addon.addonVersion --output text

    오류 메시자가 번호가 반환되는 경우 Amazon EKS 유형의 추가 기능이 클러스터에 설치되지 않습니다. 추가 기능을 자체 관리하려면 이 절차의 나머지 단계를 완료하여 추가 기능을 업데이트하세요. 버전 번호가 반환되는 경우 Amazon EKS 유형의 추가 기능이 클러스터에 설치됩니다. 업데이트하려면 이 절차를 수행하는 대신 추가 기능 업데이트의 절차를 수행하세요. 추가 기능 유형 간의 차이를 잘 모르는 경우 Amazon EKS 추가 기능 부분을 참조하세요.

  2. 클러스터에 현재 설치된 컨테이너 이미지의 버전을 확인하세요.

    kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3

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

    v1.12.6-eksbuild.2

    출력에 빌드 번호가 포함되지 않을 수 있습니다.

  3. 현재 설정을 백업하면 버전을 업데이트한 후에도 동일한 설정을 구성할 수 있습니다.

    kubectl get daemonset aws-node -n kube-system -o yaml > aws-k8s-cni-old.yaml
  4. 사용 가능한 버전을 검토하고 업데이트하려는 버전의 변경 사항을 파악하려면 GitHub에서 releases의 내용을 참조하세요. GitHub에서 최신 버전을 사용할 수 있더라도 사용 가능한 최신 버전 표에 나열된 것과 동일한 major.minor.patch 버전으로 업데이트하는 것이 좋습니다. 표에 나열된 빌드 버전은 GitHub에 나열된 자체 관리형 버전에 지정되어 있지 않습니다. 다음 옵션 중 하나로 작업을 완료하여 버전을 업데이트합니다.

    • 추가 기능에 대한 사용자 지정 설정이 없는 경우 GitHub에서 업데이트하려는 릴리스에 해당하는 To apply this release: 제목 아래에 있는 명령을 실행하세요.

    • 사용자 지정 설정이 있는 경우 다음 명령을 사용하여 매니페스트 파일을 다운로드하세요. https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.17.1/config/master/aws-k8s-cni.yaml을 업데이트하려는 GitHub 릴리스의 URL로 변경하세요.

      curl -O https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.17.1/config/master/aws-k8s-cni.yaml

      필요한 경우 만든 백업의 사용자 지정 설정으로 매니페스트를 수정한 다음 수정된 매니퍼스트를 클러스터에 적용합니다. 노드에서 이미지를 가져오는 프라이빗 Amazon EKS Amazon ECR 리포지토리에 액세스할 수 없는 경우(매니페스트에서 image:(으)로 시작하는 줄 참조) 이미지를 다운로드하여 자체 리포지토리에 복사한 다음 리포지토리에서 이미지를 가져오도록 매니페스트를 수정해야 합니다. 자세한 내용은 한 리포지토리에서 다른 리포지토리로 컨테이너 이미지 복사 단원을 참조하십시오.

      kubectl apply -f aws-k8s-cni.yaml
      
  5. 이제 클러스터에 새 버전이 설치되어 있는지 확인합니다.

    kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3

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

    v1.17.1
  6. (선택 사항)cni-metrics-helper 클러스터에 설치합니다. 지표 헬퍼는 네트워크 인터페이스 및 IP 주소 정보를 수집하고 클러스터 수준에서 지표를 집계하고 이 지표를 Amazon CloudWatch에 게시하는 데 사용할 수 있는 도구입니다. 자세한 내용은 GitHub에서 metrics.proto를 참조하세요.