

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# Amazon VPC CNI 업데이트(Amazon EKS 추가 기능)
<a name="vpc-add-on-update"></a>

Kubernetes용 Amazon VPC CNI 플러그인 추가 기능의 Amazon EKS 유형을 업데이트합니다. 클러스터에 Amazon EKS 유형의 애드온을 추가하지 않은 경우 [Amazon VPC CNI 생성(Amazon EKS 추가 기능)](vpc-add-on-create.md)에 따라 설치할 수 있습니다. 또는 [Amazon VPC CNI(자체 관리형 추가 기능) 업데이트](vpc-add-on-self-managed-update.md)에 따라 다른 유형의 VPC CNI 설치를 업데이트합니다.

1. 클러스터에 설치된 추가 기능의 버전을 확인하세요. *<cluster-name>*을 클러스터 이름으로 바꿉니다.

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

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

   ```
   v1.20.0-eksbuild.1
   ```

   버전을 [Amazon VPC CNI 버전](managing-vpc-cni.md#vpc-cni-latest-available-version)의 최신 버전 표와 비교합니다. 반환된 버전이 최신 버전 표에 있는 클러스터의 Kubernetes 버전과 동일한 경우 클러스터에 이미 최신 버전이 설치되어 있으므로 이 절차의 나머지 부분을 완료하지 않아도 됩니다. 출력에 버전 번호 대신 오류가 표시되면 클러스터에 설치된 추가 기능의 Amazon EKS 유형이 없는 것입니다. 이 절차로 업데이트하려면 먼저 추가 기능을 생성해야 합니다. VPC CNI 추가 기능의 Amazon EKS 유형을 생성하려면 [Amazon VPC CNI 생성(Amazon EKS 추가 기능)](vpc-add-on-create.md)를 따르세요.

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

   ```
   kubectl get daemonset aws-node -n kube-system -o yaml > aws-k8s-cni-old.yaml
   ```

1. AWS CLI를 사용하여 추가 기능 업데이트. AWS Management Console 또는 `eksctl`를 사용하여 추가 기능을 업데이트하려면 [Amazon EKS 추가 기능 업데이트](updating-an-add-on.md) 부분을 참조하세요. 다음 명령을 디바이스에 복사합니다. 필요에 따라 명령을 다음과 같이 수정한 다음에 수정한 명령을 실행합니다.
   + *my-cluster*를 해당 클러스터의 이름으로 바꿉니다.
   + *v1.20.0-eksbuild.1*을 클러스터 버전의 최신 버전 테이블에 나와 있는 최신 버전으로 바꿉니다.
   + *111122223333*을 계정 ID로, *AmazonEKSVPCCNIRole*을 생성한 기존 IAM 역할 이름으로 바꿉니다. VPC CNI에 대한 IAM 역할을 생성하려면 [1단계: Kubernetes용 Amazon VPC CNI 플러그인 IAM 역할 생성](cni-iam-role.md#cni-iam-role-create-role)을 참조하세요. 역할을 지정하려면 클러스터의 IAM OpenID Connect(OIDC) 제공자가 있어야 합니다. 클러스터의 해당 공급자가 이미 있는지 아니면 생성해야 하는지 결정하려면 [클러스터에 대한 IAM OIDC 공급자 생성](enable-iam-roles-for-service-accounts.md) 부분을 참조하세요.
   + `--resolve-conflicts PRESERVE` 옵션에서는 추가 기능의 기존 구성 값을 보존합니다. 추가 기능 설정에 사용자 지정 값을 설정하고 이 옵션을 사용하지 않는 경우 Amazon EKS에서는 기본값으로 해당 값을 덮어씁니다. 이 옵션을 사용하는 경우에는 추가 기능을 업데이트하기 전에 프로덕션 클러스터에서 비프로덕션 클러스터의 필드 및 값 변경 사항을 테스트하는 것이 좋습니다. 이 값을 `OVERWRITE`로 변경하면 모든 설정이 Amazon EKS 기본값으로 변경됩니다. 설정에 사용자 지정 값을 설정한 경우 Amazon EKS 기본값으로 해당 값을 덮어쓸 수도 있습니다. 이 값을 `none`으로 변경하면 Amazon EKS에서는 설정의 값을 변경하지 않지만 업데이트에 실패할 수도 있습니다. 업데이트에 실패하면 충돌 해결에 도움이 되는 오류 메시지가 표시됩니다.
   + 구성 설정을 업데이트하지 않는 경우, `--configuration-values '{"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}}'`을(를) 명령에서 제거하세요. 구성 설정을 업데이트하는 경우 *"env":\$1"AWS\$1VPC\$1K8S\$1CNI\$1EXTERNALSNAT":"true"\$1*를 설정하려는 설정으로 바꾸세요. 이 예에서는 `AWS_VPC_K8S_CNI_EXTERNALSNAT` 환경 변수가 `true`로 설정되어 있습니다. 지정한 값은 구성 스키마에 유효해야 합니다. 구성 스키마를 모르는 경우 `aws eks describe-addon-configuration --addon-name vpc-cni --addon-version v1.20.0-eksbuild.1 `을 실행하여 *v1.20.0-eksbuild.1*을 추가 기능의 버전 번호(구성을 확인하려는 추가 기능)로 변경합니다. 스키마가 출력에 반환됩니다. 기존 사용자 지정 구성이 있는데 이를 모두 제거하고 모든 설정의 값을 Amazon EKS 기본값으로 다시 설정하려면 `{}`를 비우도록 명령에서 *"env":\$1"AWS\$1VPC\$1K8S\$1CNI\$1EXTERNALSNAT":"true"\$1*를 제거합니다. 각 설정에 대한 설명은 GitHub의 [CNI 구성 변수](https://github.com/aws/amazon-vpc-cni-k8s#cni-configuration-variables)를 참조하세요.

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

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

1. 추가 기능 버전이 업데이트되었는지 확인합니다. *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.20.3-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\"}}"
       }
   }
   ```

## 문제 해결
<a name="_troubleshooting"></a>

v1.13.2 이전 버전에서 VPC CNI를 업그레이드하는 경우 업데이트 후 클러스터의 모든 노드를 교체해야 합니다. v1.13.2 이전 버전은 iptables-legacy 백엔드를 사용하여 소스 NAT(SNAT)와 같이 적절한 기능에 필요한 iptables 규칙을 삽입합니다.

버전 v1.13.2는 체인 및 규칙을 삽입하기 위해 적절한 iptable 백엔드(iptables-legacy 또는 iptables-nft)를 자동으로 감지하는 [iptables-wrapper](https://github.com/aws/amazon-vpc-cni-k8s/pull/2402)를 도입한 중요한 릴리스였습니다. 이 변경 사항은 성능 제한으로 인해 레거시 백엔드에서 벗어나려는 업스트림 Kubernetes 결정과도 부합합니다.

iptables-legacy 및 iptables-nft 백엔드 모두에 규칙을 도입하면 기본이 아닌 ENI에서 생성된 트래픽에서 예상치 못한 동작을 수행할 수 있으므로 노드를 교체한 후 VPC CNI의 v1.13.2 이전 버전에서 업그레이드해야 합니다.