

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

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

# Amazon EKS `IPv6` 클러스터 및 관리형 Amazon Linux 노드 배포
<a name="deploy-ipv6-cluster"></a>

이 튜토리얼에서는 `IPv6` Amazon VPC, `IPv6` 패밀리가 있는 Amazon EKS 클러스터 및 Amazon EC2 Amazon Linux 노드가 있는 관리형 노드 그룹을 배포합니다. `IPv6` 클러스터에는 Amazon EC2 Windows 노드를 배포할 수 없습니다. Fargate 노드를 클러스터에 배포할 수도 있지만 이 항목에서는 단순화를 위해 해당 지침을 제공하지 않습니다.

## 사전 조건
<a name="_prerequisites"></a>

자습서를 시작하기 전에 다음을 완료합니다.

Amazon EKS 클러스터를 생성하고 관리할 때 필요한 다음 도구 및 리소스를 설치하고 구성합니다.
+ 모든 설정을 숙지하고 요구 사항을 충족하는 설정으로 클러스터를 배포하는 것이 좋습니다. 자세한 내용은 [Amazon EKS 클러스터 생성](create-cluster.md), [관리형 노드 그룹을 사용한 노드 수명 주기 간소화](managed-node-groups.md) 그리고 이 주제에 대한 [고려 사항](cni-ipv6.md)을 참조하세요. 클러스터를 생성할 때 일부 설정만 사용 설정할 수 있습니다.
+ `kubectl` 명령줄 도구는 장치 또는 AWS CloudShell에 설치됩니다. 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다. 예를 들어, 클러스터 버전이 `1.29`인 경우 `kubectl` 버전 `1.28`, `1.29` 또는 `1.30`를 함께 사용할 수 있습니다. `kubectl`을 설치하거나 업그레이드하려면 [`kubectl` 및 `eksctl` 설정](install-kubectl.md) 부분을 참조하세요.
+ 사용하는 IAM 보안 주체에 Amazon EKS IAM 역할, 서비스 연결 역할, AWS CloudFormation, VPC 및 관련 리소스를 사용할 수 있는 권한이 있어야 합니다. 자세한 내용은 IAM 사용 설명서의 [서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) [사용](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html)을 참조하세요.
+ eksctl을 사용하는 경우 컴퓨터에 버전 `0.215.0` 이상을 설치합니다. 설치하거나 업데이트하려면 `eksctl` 설명서에서 [설치](https://eksctl.io/installation)를 참조하세요.
+ 장치에 설치 및 구성된 AWS 명령줄 인터페이스(AWS CLI)의 버전 `2.12.3` 이상 또는 버전 `1.27.160` 이상 또는 AWS CloudShell. 현재 버전을 확인하려면 `aws --version | cut -d / -f2 | cut -d ' ' -f1`을 사용합니다. `yum`, `apt-get` 또는 macOS용 Homebrew 같은 패키지 관리자는 최신 버전의 AWS CLI 이전에 나온 버전이 몇 가지 있을 때도 있습니다. 최신 버전을 설치하려면 * AWS 명령줄 인터페이스 사용 설명서*에서 [설치](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 및 [aws config를 사용하여 빠른 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)을 참조하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 여러 버전 이전일 수도 있습니다. 업데이트하려면 * AWS CloudShell 사용 설명서*의 [홈 디렉터리에 AWS CLI 설치하기](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)를 참조하세요. AWS CloudShell을 사용하는 경우 AWS CloudShell에 설치된 기본 AWS CLI 버전이 이전 버전일 수 있으므로 [AWS CLI 버전 2.12.3 이상 또는 1.27.160 이상을 설치](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)해야 할 수 있습니다.

eksctl 또는 CLI를 사용하여 `IPv6` 클러스터를 배포할 수 있습니다.

## eksctl을 사용하여 IPv6 클러스터 배포
<a name="_deploy_an_ipv6_cluster_with_eksctl"></a>

1. `ipv6-cluster.yaml` 파일을 생성합니다. 다음 명령을 디바이스에 복사합니다. 필요에 따라 명령을 다음과 같이 수정한 다음에 수정한 명령을 실행합니다.
   + {{my-cluster}}를 클러스터의 이름으로 바꿉니다. 이름에는 영숫자(대소문자 구분)와 하이픈만 사용할 수 있습니다. 영숫자로 시작해야 하며 100자 이하여야 합니다. 이름은 클러스터를 생성하는 AWS 리전과 AWS 계정 내에서 고유해야 합니다.
   + {{region-code}}를 Amazon EKS에서 지원하는 AWS 리전으로 바꿉니다. AWS 리전 목록은 AWS General Reference 가이드의 [Amazon EKS endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/eks.html)를 참조하세요.
   + 클러스터의 버전이 포함된 `version`의 값입니다. 자세한 내용은 [Amazon EKS 지원 버전](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)을 참조하세요.
   + {{my-nodegroup}}을 노드 그룹의 이름으로 바꿉니다. 노드 그룹 이름은 63자를 초과할 수 없습니다. 문자나 숫자로 시작하되, 나머지 문자의 경우 하이픈과 밑줄을 포함할 수 있습니다.
   + {{t3.medium}}을 [AWS Nitro 시스템 인스턴스 유형](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)으로 바꿉니다.

     ```
     cat >ipv6-cluster.yaml <<EOF
     ---
     apiVersion: eksctl.io/v1alpha5
     kind: ClusterConfig
     
     metadata:
       name: my-cluster
       region: region-code
       version: "X.XX"
     
     kubernetesNetworkConfig:
       ipFamily: IPv6
     
     addons:
       - name: vpc-cni
         version: latest
       - name: coredns
         version: latest
       - name: kube-proxy
         version: latest
     
     iam:
       withOIDC: true
     
     managedNodeGroups:
       - name: my-nodegroup
         instanceType: t3.medium
     EOF
     ```

1. 클러스터를 생성합니다.

   ```
   eksctl create cluster -f ipv6-cluster.yaml
   ```

   클러스터 생성에 몇 분 정도 걸립니다. 다음 출력과 유사한 출력의 마지막 줄이 나타날 때까지 진행하지 마세요.

   ```
   [...]
   [✓]  EKS cluster "my-cluster" in "region-code" region is ready
   ```

1. 기본 포드에 `IPv6` 주소가 할당되었는지 확인합니다.

   ```
   kubectl get pods -n kube-system -o wide
   ```

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

   ```
   NAME                       READY   STATUS    RESTARTS   AGE     IP                                       NODE                                            NOMINATED NODE   READINESS GATES
   aws-node-rslts             1/1     Running   1          5m36s   2600:1f13:b66:8200:11a5:ade0:c590:6ac8   ip-192-168-34-75.region-code.compute.internal   <none>           <none>
   aws-node-t74jh             1/1     Running   0          5m32s   2600:1f13:b66:8203:4516:2080:8ced:1ca9   ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   coredns-85d5b4454c-cw7w2   1/1     Running   0          56m     2600:1f13:b66:8203:34e5::                ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   coredns-85d5b4454c-tx6n8   1/1     Running   0          56m     2600:1f13:b66:8203:34e5::1               ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   kube-proxy-btpbk           1/1     Running   0          5m36s   2600:1f13:b66:8200:11a5:ade0:c590:6ac8   ip-192-168-34-75.region-code.compute.internal   <none>           <none>
   kube-proxy-jjk2g           1/1     Running   0          5m33s   2600:1f13:b66:8203:4516:2080:8ced:1ca9   ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   ```

1. 기본 서비스에 `IPv6` 주소가 할당되었는지 확인합니다.

   ```
   kubectl get services -n kube-system -o wide
   ```

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

   ```
   NAME       TYPE        CLUSTER-IP          EXTERNAL-IP   PORT(S)         AGE   SELECTOR
   kube-dns   ClusterIP   fd30:3087:b6c2::a   <none>        53/UDP,53/TCP   57m   k8s-app=kube-dns
   ```

1. (선택 사항) [샘플 애플리케이션을 배포](sample-deployment.md)하거나 [AWS 로드 밸런서 컨트롤러](aws-load-balancer-controller.md)와 샘플 애플리케이션을 배포하여 [Application Load Balancer를 사용하여 애플리케이션 및 HTTP 트래픽 라우팅](alb-ingress.md)를 사용하는 HTTP 애플리케이션 또는 [Network Load Balancer를 사용하여 TCP 및 UDP 트래픽 라우팅](network-load-balancing.md)을 사용하는 네트워크 트래픽을 `IPv6` 포드로 로드 밸런싱하세요.

1. 이 튜토리얼용으로 생성한 클러스터 및 노드 사용을 마친 후 다음 명령을 사용하여 생성한 리소스를 정리해야 합니다.

   ```
   eksctl delete cluster my-cluster
   ```

## AWS CLI을 사용하여 IPv6 클러스터 배포
<a name="deploy_an_ipv6_cluster_with_shared_aws_cli"></a>

**중요**  
이 절차의 모든 단계를 동일한 사용자로 완료해야 합니다. 현재 사용자를 확인하려면 다음 명령을 실행합니다.  

  ```
  aws sts get-caller-identity
  ```
이 절차의 모든 단계를 동일한 셸로 완료해야 합니다. 여러 단계에서는 이전 단계에서 설정한 변수를 사용합니다. 변수 값이 다른 셸에서 설정되면 변수를 사용하는 단계가 제대로 작동하지 않습니다. [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)을 사용하여 다음 절차를 완료하는 경우 약 20\~30분 동안 키보드나 포인터를 사용하여 상호 작용하지 않으면 셸 세션이 종료된다는 점을 기억하세요. 실행 중인 프로세스는 상호 작용으로 계산되지 않습니다.
지침은 Bash 셸용으로 작성되었으며 다른 셸에서 조정해야 할 수도 있습니다.

이 절차 단계의 모든 예제 값을 고유한 값으로 바꿉니다.

1. 다음 명령을 실행하여 이후 단계에서 사용되는 일부 변수를 설정합니다. {{region-code}}를 리소스를 배포할 AWS 리전으로 바꿉니다. 값은 Amazon EKS에서 지원하는 모든 AWS 리전일 수 있습니다. AWS 리전 목록은 AWS General Reference 가이드의 [Amazon EKS endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/eks.html)를 참조하세요. {{my-cluster}}를 클러스터의 이름으로 바꿉니다. 이름에는 영숫자(대소문자 구분)와 하이픈만 사용할 수 있습니다. 영숫자로 시작해야 하며 100자 이하여야 합니다. 이름은 클러스터를 생성하는 AWS 리전과 AWS 계정 내에서 고유해야 합니다. {{my-nodegroup}}을 노드 그룹의 이름으로 바꿉니다. 노드 그룹 이름은 63자를 초과할 수 없습니다. 문자나 숫자로 시작하되, 나머지 문자의 경우 하이픈과 밑줄을 포함할 수 있습니다. {{111122223333}}을 계정 ID로 바꿉니다.

   ```
   export region_code=region-code
   export cluster_name=my-cluster
   export nodegroup_name=my-nodegroup
   export account_id=111122223333
   ```

1. Amazon EKS 및 `IPv6` 요구 사항을 충족하는 퍼블릭 및 프라이빗 서브넷이 있는 Amazon VPC를 생성합니다.

   1. 다음 명령을 실행하여 AWS CloudFormation 스택 이름에 대한 변수를 설정합니다. 선택하는 이름으로 {{my-eks-ipv6-vpc}}를 바꿀 수 있습니다.

      ```
      export vpc_stack_name=my-eks-ipv6-vpc
      ```

   1. AWS CloudFormation 템플릿을 사용하여 `IPv6` VPC를 만듭니다.

      ```
      aws cloudformation create-stack --region $region_code --stack-name $vpc_stack_name \
        --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-ipv6-vpc-public-private-subnets.yaml
      ```

      스택을 만드는 데 몇 분 정도 걸립니다. 다음 명령을 실행합니다. 명령의 출력이 `CREATE_COMPLETE`가 될 때까지 다음 단계를 계속하지 마세요.

      ```
      aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name --query Stacks[].StackStatus --output text
      ```

   1. 생성된 퍼블릭 서브넷의 ID를 검색합니다.

      ```
      aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \
          --query='Stacks[].Outputs[?OutputKey==`SubnetsPublic`].OutputValue' --output text
      ```

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

      ```
      subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE
      ```

   1. 생성된 퍼블릭 서브넷에 대해 `IPv6` 주소 자동 할당 옵션을 사용 설정합니다.

      ```
      aws ec2 modify-subnet-attribute --region $region_code --subnet-id subnet-0a1a56c486EXAMPLE --assign-ipv6-address-on-creation
      aws ec2 modify-subnet-attribute --region $region_code --subnet-id subnet-099e6ca77aEXAMPLE --assign-ipv6-address-on-creation
      ```

   1. 배포된 AWS CloudFormation 스택에서 템플릿으로 생성된 서브넷 및 보안 그룹의 이름을 검색하고 이후 단계에서 사용할 수 있도록 변수에 저장합니다.

      ```
      security_groups=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \
          --query='Stacks[].Outputs[?OutputKey==`SecurityGroups`].OutputValue' --output text)
      
      public_subnets=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \
          --query='Stacks[].Outputs[?OutputKey==`SubnetsPublic`].OutputValue' --output text)
      
      private_subnets=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \
          --query='Stacks[].Outputs[?OutputKey==`SubnetsPrivate`].OutputValue' --output text)
      
      subnets=${public_subnets},${private_subnets}
      ```

1. 클러스터 IAM 역할을 생성하고 필요한 Amazon EKS IAM 관리형 정책을 연결합니다. Amazon EKS에서 관리하는 Kubernetes 클러스터는 사용자 대신 다른 AWS 서비스를 직접 호출하여 서비스에 사용하는 리소스를 관리합니다.

   1. 다음 명령을 실행해 `eks-cluster-role-trust-policy.json` 파일을 생성합니다.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "eks.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 다음 명령을 실행하여 역할 이름에 대한 변수를 설정합니다. {{myAmazonEKSClusterRole}}을 선택한 이름으로 바꿀 수 있습니다.

      ```
      export cluster_role_name=myAmazonEKSClusterRole
      ```

   1. 역할을 생성합니다.

      ```
      aws iam create-role --role-name $cluster_role_name --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
      ```

   1. IAM 역할의 ARN을 검색하고 이후 단계를 위해 변수에 저장합니다.

      ```
      CLUSTER_IAM_ROLE=$(aws iam get-role --role-name $cluster_role_name --query="Role.Arn" --output text)
      ```

   1. 필요한 Amazon EKS 관리형 IAM 정책을 역할에 연결합니다.

      ```
      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name $cluster_role_name
      ```

1. 클러스터를 생성합니다.

   ```
   aws eks create-cluster --region $region_code --name $cluster_name --kubernetes-version 1.XX \
      --role-arn $CLUSTER_IAM_ROLE --resources-vpc-config subnetIds=$subnets,securityGroupIds=$security_groups \
      --kubernetes-network-config ipFamily=ipv6
   ```

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

      클러스터를 생성하는 데 몇 분 정도 걸립니다. 다음 명령을 실행합니다. 명령의 출력이 `ACTIVE`가 될 때까지 다음 단계를 계속하지 마세요.

      ```
      aws eks describe-cluster --region $region_code --name $cluster_name --query cluster.status
      ```

1. 클러스터와 통신할 수 있도록 클러스터에 대한 `kubeconfig` 파일을 생성하거나 업데이트합니다.

   ```
   aws eks update-kubeconfig --region $region_code --name $cluster_name
   ```

   기본적으로 `config` 파일이 `~/.kube`에 생성되거나 새 클러스터의 구성이 `~/.kube`의 기존 `config` 파일에 추가됩니다.

1. 노드 IAM 역할을 생성합니다.

   1. 다음 명령을 실행해 `vpc-cni-ipv6-policy.json` 파일을 생성합니다.

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ec2:AssignIpv6Addresses",
                      "ec2:DescribeInstances",
                      "ec2:DescribeTags",
                      "ec2:DescribeNetworkInterfaces",
                      "ec2:DescribeInstanceTypes"
                  ],
                  "Resource": "*"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateTags"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:network-interface/*"
                  ]
              }
          ]
      }
      ```

   1. IAM 정책을 생성합니다.

      ```
      aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
      ```

   1. 다음 명령을 실행해 `node-role-trust-relationship.json` 파일을 생성합니다.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 다음 명령을 실행하여 역할 이름에 대한 변수를 설정합니다. {{AmazonEKSNodeRole}}을 선택한 이름으로 바꿀 수 있습니다.

      ```
      export node_role_name=AmazonEKSNodeRole
      ```

   1. IAM 역할을 생성합니다.

      ```
      aws iam create-role --role-name $node_role_name --assume-role-policy-document file://"node-role-trust-relationship.json"
      ```

   1. IAM 정책을 IAM 역할에 연결합니다.

      ```
      aws iam attach-role-policy --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy \
          --role-name $node_role_name
      ```
**중요**  
이 자습서에서는 단순화를 위해 이 IAM 역할에 정책이 연결되어 있습니다. 그러나 프로덕션 클러스터에서는 정책을 별도의 IAM 역할에 연결하는 것이 좋습니다. 자세한 내용은 [IRSA를 사용하도록 Amazon VPC CNI 플러그인 구성](cni-iam-role.md) 섹션을 참조하세요.

   1. 필요한 2개의 관리형 IAM 정책을 IAM 역할에 연결합니다.

      ```
      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \
        --role-name $node_role_name
      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \
        --role-name $node_role_name
      ```

   1. IAM 역할의 ARN을 검색하고 이후 단계를 위해 변수에 저장합니다.

      ```
      node_iam_role=$(aws iam get-role --role-name $node_role_name --query="Role.Arn" --output text)
      ```

1. 관리형 노드 그룹을 생성합니다.

   1. 이전 단계에서 생성한 서브넷의 ID를 확인합니다.

      ```
      echo $subnets
      ```

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

      ```
      subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE,subnet-0377963d69EXAMPLE,subnet-0c05f819d5EXAMPLE
      ```

   1. 노드 그룹을 생성합니다. {{0a1a56c486EXAMPLE}}, {{099e6ca77aEXAMPLE}}, {{0377963d69EXAMPLE}}, {{0c05f819d5EXAMPLE}}을 이전 단계의 출력에서 반환된 값으로 바꾸세요. 다음 명령의 이전 출력에서 서브넷 ID 사이의 쉼표를 제거해야 합니다. {{t3.medium}}을 [AWS Nitro 시스템 인스턴스 유형](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)으로 바꿀 수 있습니다.

      ```
      aws eks create-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \
          --subnets subnet-0a1a56c486EXAMPLE subnet-099e6ca77aEXAMPLE subnet-0377963d69EXAMPLE subnet-0c05f819d5EXAMPLE \
          --instance-types t3.medium --node-role $node_iam_role
      ```

      노드 그룹을 만드는 데 몇 분 정도 걸립니다. 다음 명령을 실행합니다. 반환되는 출력이 `ACTIVE`가 되면 다음 단계로 진행하세요.

      ```
      aws eks describe-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \
          --query nodegroup.status --output text
      ```

1. `IP` 열에서 기본 포드에 `IPv6` 주소가 할당되었는지 확인합니다.

   ```
   kubectl get pods -n kube-system -o wide
   ```

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

   ```
   NAME                       READY   STATUS    RESTARTS   AGE     IP                                       NODE                                            NOMINATED NODE   READINESS GATES
   aws-node-rslts             1/1     Running   1          5m36s   2600:1f13:b66:8200:11a5:ade0:c590:6ac8   ip-192-168-34-75.region-code.compute.internal   <none>           <none>
   aws-node-t74jh             1/1     Running   0          5m32s   2600:1f13:b66:8203:4516:2080:8ced:1ca9   ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   coredns-85d5b4454c-cw7w2   1/1     Running   0          56m     2600:1f13:b66:8203:34e5::                ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   coredns-85d5b4454c-tx6n8   1/1     Running   0          56m     2600:1f13:b66:8203:34e5::1               ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   kube-proxy-btpbk           1/1     Running   0          5m36s   2600:1f13:b66:8200:11a5:ade0:c590:6ac8   ip-192-168-34-75.region-code.compute.internal   <none>           <none>
   kube-proxy-jjk2g           1/1     Running   0          5m33s   2600:1f13:b66:8203:4516:2080:8ced:1ca9   ip-192-168-253-70.region-code.compute.internal  <none>           <none>
   ```

1. `IP` 열에서 기본 서비스에 `IPv6` 주소가 할당되었는지 확인합니다.

   ```
   kubectl get services -n kube-system -o wide
   ```

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

   ```
   NAME       TYPE        CLUSTER-IP          EXTERNAL-IP   PORT(S)         AGE   SELECTOR
   kube-dns   ClusterIP   fd30:3087:b6c2::a   <none>        53/UDP,53/TCP   57m   k8s-app=kube-dns
   ```

1. (선택 사항) [샘플 애플리케이션을 배포](sample-deployment.md)하거나 [AWS Load Balancer Controller](aws-load-balancer-controller.md)와 샘플 애플리케이션을 배포하여 [Application Load Balancer를 사용하여 애플리케이션 및 HTTP 트래픽 라우팅](alb-ingress.md)를 사용하는 HTTP 애플리케이션 또는 [Network Load Balancer를 사용하여 TCP 및 UDP 트래픽 라우팅](network-load-balancing.md)을 사용하는 네트워크 트래픽을 `IPv6` 포드로 로드 밸런싱합니다.

1. 이 튜토리얼로 생성한 클러스터 및 노드 사용을 마친 후 다음 명령을 사용하여 생성한 리소스를 정리해야 합니다. 리소스를 삭제하기 전에 이 튜토리얼 외부의 리소스를 사용하고 있지 않은지 확인합니다.

   1. 이전 단계를 완료한 것과 다른 셸에서 이 단계를 완료하는 경우 이전 단계에서 사용한 모든 변수의 값을 설정하고 예제 값을 이전 단계를 완료했을 때 지정한 값으로 바꿉니다. 이전 단계를 완료한 동일한 셸에서 이 단계를 완료하는 경우 다음 단계로 건너뜁니다.

      ```
      export region_code=region-code
      export vpc_stack_name=my-eks-ipv6-vpc
      export cluster_name=my-cluster
      export nodegroup_name=my-nodegroup
      export account_id=111122223333
      export node_role_name=AmazonEKSNodeRole
      export cluster_role_name=myAmazonEKSClusterRole
      ```

   1. 노드 그룹을 삭제합니다.

      ```
      aws eks delete-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name
      ```

      삭제하는 데 몇 분 정도 걸립니다. 다음 명령을 실행합니다. 출력이 반환되는 경우 다음 단계로 진행하지 마세요.

      ```
      aws eks list-nodegroups --region $region_code --cluster-name $cluster_name --query nodegroups --output text
      ```

   1. 클러스터를 삭제합니다.

      ```
      aws eks delete-cluster --region $region_code --name $cluster_name
      ```

      클러스터를 삭제하는 데 몇 분 정도 걸립니다. 계속하기 전에 다음 명령으로 클러스터가 삭제되었는지 확인합니다.

      ```
      aws eks describe-cluster --region $region_code --name $cluster_name
      ```

      출력이 다음 출력과 유사할 때까지 다음 단계로 진행하지 마세요.

      ```
      An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: my-cluster.
      ```

   1. 생성한 IAM 리소스를 삭제합니다. 이전 단계에서 사용한 이름과 다른 이름을 선택한 경우 {{AmazonEKS\_CNI\_IPv6\_Policy}}를 선택한 이름으로 바꿉니다.

      ```
      aws iam detach-role-policy --role-name $cluster_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
      aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
      aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
      aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy
      aws iam delete-policy --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy
      aws iam delete-role --role-name $cluster_role_name
      aws iam delete-role --role-name $node_role_name
      ```

   1. 생성한 VPC AWS CloudFormation 스택을 삭제합니다.

      ```
      aws cloudformation delete-stack --region $region_code --stack-name $vpc_stack_name
      ```