ポッドとサービスへの IPv6 アドレスの割り当て - Amazon EKS

ポッドとサービスへの IPv6 アドレスの割り当て

Kubernetes のデフォルトでは、IPv4 アドレスがポッドとサービスに割り当てられます。クラスターを設定すると、ポッドとサービスに IPv4 アドレスを割り当てずに、IPv6 アドレスを割り当てることもできます。Amazon EKS は、デュアルスタックのポッドまたはサービスをサポートしていません。つまり、ポッドとサービスに IPv4 アドレスと IPv6 アドレスの両方を割り当てることはできません。

そのクラスターに使用する IP ファミリーは、クラスターの作成時に選択します。クラスターの作成後は、ファミリーを変更できません。

以下に、クラスターに IPv6 ファミリーを使用する際の考慮事項を示します。

  • 作成するクラスターには 1.21 以降の新しいバージョンを使用し、そのクラスターで IPv6 ファミリーの使用を指定する必要があります。1.21 より前のバージョンからクラスターを更新して、IPv6 ファミリーを有効化することはできません。新しいクラスターの作成方法については、「Amazon EKS クラスターの作成」を参照してください。

  • クラスターにデプロイする Amazon VPC CNI アドオンには、バージョン 1.10.1 以降を使用する必要があります。このバージョン以降のアドオンは、バージョン 1.21 以降の新しいクラスターにデフォルトでデプロイされています。アドオンのデプロイ後は、クラスター内のすべてのノードグループ内にあるすべてのノードを削除しない限り、Amazon VPC CNI アドオンを 1.10.1 より前のバージョンにダウングレードすることはできません。

  • Windows ポッドおよびサービスはサポートされていません。

  • Amazon EC2 ノードを使用する場合は、IP プレフィックスの委任と IPv6 を使用して Amazon VPC CNI アドオンを設定する必要があります。クラスターの作成時に IPv6 ファミリーを選択した場合は、バージョン 1.10.1 のアドオンが、この設定のデフォルトになります。これは、セルフマネージド型のアドオン、および Amazon EKS アドオンの両方に当てはまります。IP プレフィックス委任の詳細については、「Amazon EC2 ノードで使用可能な IP アドレスの量を増やす」を参照してください。

  • クラスターを作成する際に指定する VPC とサブネットには、それらに割り当てられた IPv6 CIDR ブロックが必要です。同時に、IPv4 CIDR ブロックも割り当てられている必要があります。これは、IPv6 のみを使用する場合でも、VPC が機能するには IPv4 CIDR ブロックが必要になるためです。詳細については、「Amazon VPC ユーザーガイド」の「IPv6 CIDR ブロックと VPC の関連付け」を参照してください。

  • クラスターとノードを作成する際は、IPv6 アドレスを自動割り当てするように設定されたサブネットを指定する必要があります。これを指定しない場合、作成したクラスターとノードのデプロイができなくなります。自動割り当ての設定はデフォルトで無効になっています。 詳細については、「Amazon VPC ユーザーガイド」の「サブネットのパブリック IPv6 アドレス属性を変更する」を参照してください。

  • サブネットに割り当てられるルートテーブルには、IPv6 アドレス用のルートが必要です。詳細については、「Amazon VPC ユーザーガイド」の「既存の VPC を IPv4 から IPv6 に移行する」を参照してください。

  • セキュリティグループで IPv6 アドレスの使用を許可する必要があります。詳細については、「Amazon VPC ユーザーガイド」の「既存の VPC を IPv4 から IPv6 に移行する」を参照してください。

  • IPv6 は、AWS Nitro ベースの Amazon EC2 または Fargate ノードでのみ使用が可能です。

  • Amazon EC2 ノードを使用する ポッドのセキュリティグループ で,IPv6を使用することはできません。ただし、Fargate ノードでは使用が可能です。個々のポッドに対して個別のセキュリティグループが必要な場合は、IPv4 ファミリーを Amazon EC2 ノードで引き続き使用するか、代わりに Fargate ノードを使用します。

  • IP アドレスの枯渇を緩和するために、これまで使用していたカスタムネットワークの代わりとして、IPv6 を使用することができます。IPv6 では、カスタムネットワークを使用することはできません。クラスターにおいて、ネットワークの分離用としてカスタムネットワークを使用する場合は、引き続き、IPv4 ファミリーによるカスタムネットワークを使用する必要があります。

  • AWS Outposts にデプロイされているノードで IPv6 を使用することはできません。

  • ポッドとサービスには IPv6 アドレスのみが割り当てられます。これらには、IPv4 アドレスは割り当てられません。ポッドは、インスタンス自体の NAT を介して IPv4 エンドポイントとの通信が可能なため、DNS64 および NAT64 は必要となりません。トラフィックがパブリック IP アドレスを必要とする場合、そのトラフィックは、送信元ネットワークアドレスとしてパブリック IP に変換されます。

  • VPC の外部と通信する際の、送信元ポッドの IPv6 アドレスは、ノードの IPv6 アドレスに変換された送信元ネットワークアドレスではありません。このルーティングは、インターネットゲートウェイ、または送信専用インターネットゲートウェイを使用して行われます。

  • すべてのノードには、IPv4 と IPv6 アドレスが割り当てられています。

  • Amazon FSx for Lustre CSI ドライバー はサポートされていません。

  • IP モードでは、アプリケーションまたはネットワークからの IPv6 ポッド へのトラフィックをロードバランスするために、バージョン 2.3.1 以降の AWS Load Balancer Controller が使用できますが、インスタンスモードでは使用できません。詳細については、「AWS Load Balancer Controller アドオンのインストール」を参照してください。

  • ノード IAM または CNI IAM のロールには、IPv6 IAM ポリシーをアタッチする必要があります。上記 2 つの中では、CNI IAM ロールへのアタッチが推奨されます。詳細については、「ステップ 1: (オプション) IPv6 用の IAM ポリシーを作成する」および「ステップ 2: Amazon VPC CNI プラグインの IAM ロールを作成する」を参照してください。

  • 各 Fargate ポッドは、デプロイ先のサブネット用に指定された CIDR から、IPv6 アドレスを受け取ります。Fargate ポッドを実行するための基盤ハードウェアユニットは、そのユニットがデプロイされているサブネットに割り当てられている CIDR から、一意の IPv4 および IPv6 アドレスを取得します。

  • アプリケーション、Amazon EKS アドオン、および、IPv6 クラスターのデプロイ前に統合した AWS のサービスに関しては、包括的な評価を実施することをお勧めします。これにより、IPv6 を使用した場合も、すべてが想定どおりに動作することを保証できます。

  • AWS App Mesh に、IPv6 を使用することはできません。

  • Amazon EC2 インスタンスメタデータサービス IPv6 エンドポイントの使用は Amazon EKS でサポートされていません。

IPv6 クラスターとノードをデプロイする

このトピックでは、IPv6 ファミリーを使用する IPv6 Amazon VPC と Amazon EKS クラスターのデプロイ、および Amazon EC2 Amazon Linux ノードを使用するマネージド型ノードグループのデプロイ方法を説明します。IPv6 クラスター内で、Amazon EC2 Windows ノードをデプロイすることはできません。Fargate ノードをクラスターにデプロイすることもできまが、理解しやすくするため、これらの手順はこのトピックでは説明していません。

本番で使用するクラスターを作成する前に、すべての設定内容に習熟した上で、要件を満たす設定でクラスターをデプロイすることをお勧めします。詳細については、「Amazon EKS クラスターの作成」、「」、ならびにこのトピックの「考慮事項」を参照してください。一部の設定の有効化は、クラスターの作成時にのみ行えます。

前提条件

このチュートリアルを開始する前に、Amazon EKS クラスターの作成と管理に必要な次のツールとリソースを、インストールおよび設定しておく必要があります。

  • コンピュータまたは AWS CloudShell に kubectl コマンドラインツールがインストールされていること。バージョンは、クラスターのバージョンと同じか、2 つ後までのバージョンである必要があります。kubectl をインストールまたはアップグレードする方法については、「kubectl のインストール」を参照してください。このチュートリアルでは、バージョン 1.21 以降を使用を想定しています。

  • ここで使用する IAM セキュリティプリンシパルには、Amazon EKS の IAM ロールおよびサービスにリンクされたロール、AWS CloudFormation、ならびに VPC とその関連リソースを操作するための権限が必要です。詳細については、IAM ユーザーガイドの Amazon Elastic Kubernetes Service のアクション、リソース、および条件キーと、サービスにリンクされたロールの使用を参照してください。

ここでの手順は、eksctl または AWS CLI のいずれかを使用して、リソースを作成するために提供されたものです。AWS Management Console を使用してリソースをデプロイすることも可能ですが、理解しやすさのために、このトピックではそのための手順を扱っていません。

Eksctl

前提条件

Eksctl のバージョン 0.84.0 以降のコンピュータへのインストール。このインストールまたはアップグレード方法については、「eksctl のインストール」を参照してください。

eksctl を使用して IPv6 クラスターをデプロイするには

  1. 次の内容を ipv6-cluster.yaml という名前のファイルにコピーします。example values を独自の値に置き換えます。region-code は、Amazon EKS がサポートする任意の AWS リージョン に置き換えます。AWS リージョン の一覧については、AWS 全般的なリファレンスガイドの Amazon EKS エンドポイントとクォータ を参照してください。t3.medium の部分は、任意の AWS Nitro System インスタンスタイプに置き換えることができます。version の値には、1.21 以降の、サポートされているAmazon EKS Kubernetes バージョンを設定する必要があります。クラスター名には、英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字はアルファベット文字である必要があります。また、128 文字より長くすることはできません。

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: "1.21" 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
  2. クラスターを作成する

    eksctl create cluster -f ipv6-cluster.yaml

    クラスターの作成には数分かかります。出力の最後の行が表示されるまで、次の手順には進まないでください。この行は、下記のような出力になります。

    ... [✓] EKS cluster "my-cluster" in "region-code" region is ready
  3. デフォルトのポッドに、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>
  4. デフォルトのサービスに、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
  5. (オプション) サンプルアプリケーションをデプロイする か、ロードバランシング アプリケーション または IPv6 ポッドへの ネットワーク トラフィックのための AWS Load Balancer コントローラー とサンプルアプリケーションをデプロイします。

  6. このチュートリアルのために作成したクラスターとノードの使用が終了したら、それらのリソースは、次のコマンドにより削除しておきます。

    eksctl delete cluster my-cluster
AWS CLI

前提条件

ご使用のコンピュータまたは AWS CloudShell で、AWS CLI のバージョン 2.4.9 以降または 1.22.30 以降がインストールおよび設定されていること。詳細については、AWS Command Line Interface ユーザーガイドの AWS CLI のインストール、更新、アンインストールaws configure を使用したクイック設定を参照してください。AWS CloudShell を使用する場合は、バージョン 2.4.9 以降または 1.22.30 以降の AWS CLI をインストールする必要があります。AWS CloudShell には、デフォルトとして AWS CLI の古いバージョンがインストールされている可能性があります。

重要
  • この手順のすべてのステップは、同一のユーザーとして実行する必要があります。

  • この手順のすべてのステップは、同一のシェル内で実行する必要があります。いくつかのステップには、これより前のステップで設定した変数を使用します。変数の値が異なるシェル内で設定されていると、その変数を使用するステップは正しく機能しません。AWS CloudShell を使用して次の手順を実行する際、約 20~30 分の間キーボードまたはポインタによる操作がないと、シェルセッションが終了することを銘記しておいてください。実行中のプロセスは、操作数としてカウントされません。

  • 各命令は Bash シェル用に記述されているので、他のシェルでは修正が必要な場合があります。

AWS CLI を使用してクラスターを作成するには

この手順の各ステップにおいて、すべての example values は、ご自分が使用する値に置き換える必要があります。

  1. 以下のコマンドを実行して、後のステップで使用するいくつかの変数を設定します。region-code は、リソースをデプロイする AWS リージョン に置き換えます。この値には、Amazon EKS でサポートされている任意の AWS リージョン が設定できます。AWS リージョン の一覧については、AWS 全般的なリファレンスガイドの Amazon EKS エンドポイントとクォータを参照してください。my-clustermy-nodegroup は、使用しているクラスターとノードグループの名前に、それぞれ置き換えます。111122223333 は、ご自分のアカウント ID に置き換えます。

    export region_code=region-code export cluster_name=my-cluster export nodegroup_name=my-nodegroup export account_id=111122223333
  2. Amazon EKS および IPv6 の要件を満たすように、パブリックサブネットとプライベートサブネットを持つ Amazon VPC を作成します。

    1. 次のコマンドを実行して、AWS CloudFormation スタック名のための変数を設定します。my-eks-ipv6-vpc は、任意の名前に置き換えることができます。

      export vpc_stack_name=my-eks-ipv6-vpc
    2. AWS CloudFormation テンプレートを使用して IPv6 VPC を作成します。

      aws cloudformation create-stack \ --region $region_code \ --stack-name $vpc_stack_name \ --template-url https://amazon-eks.s3.us-west-2.amazonaws.com/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
    3. 作成されたパブリックサブネットの 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
    4. 作成されたパブリックサブネットにおいて、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
    5. テンプレートによって作成されたサブネットおよびセキュリティグループの名前を、デプロイされた 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}
  3. クラスターの 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" } ] }
    2. 次のコマンドを実行して、ロール名の変数を設定します。myAmazonEKSClusterRole は、任意の名前に置き換えることができます。

      export cluster_role_name=myAmazonEKSClusterRole
    3. ロールを作成します。

      aws iam create-role \ --role-name $cluster_role_name \ --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
    4. IAM ロールの ARN を取得し、後のステップで使用するために変数に格納します。

      cluster_iam_role=$(aws iam get-role \ --role-name $cluster_role_name \ --query="Role.Arn" \ --output text)
    5. このロールに、必要な Amazon EKS 管理の IAM ポリシーをアタッチします。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \ --role-name $cluster_role_name
  4. クラスターを作成する

    1. このバージョンは、サポートされている Amazon EKS Kubernetes のバージョン 1.21 以降を使用する必要があります。

      aws eks create-cluster \ --region $region_code \ --name $cluster_name \ --kubernetes-version 1.21 \ --role-arn $cluster_iam_role \ --resources-vpc-config subnetIds=$subnets,securityGroupIds=$security_groups \ --kubernetes-network-config ipFamily=ipv6
      注記

      リクエストで指定したアベイラビリティーゾーンのいずれかに、Amazon EKS クラスターの作成に十分な容量がない場合には、エラーが表示されることがあります。このエラー出力には、新しいクラスターをサポートできるアベイラビリティーゾーンが表示されます。アカウント向けにサポートされているアベイラビリティーゾーンにある 2 つ以上のサブネットを使用して、クラスターを作成します。詳細については、「容量不足」を参照してください。

    2. クラスターが作成されるまでに数分かかります。以下のコマンドを実行します。コマンドの出力が「ACTIVE」になるまで、次のステップに進まないでください。

      aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query cluster.status
  5. クラスターの kubeconfig ファイルを作成または更新し、そのクラスターと通信できるようにします。

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

    デフォルトでは、config ファイルが ~/.kube に作成されるか、config ファイルが既に ~/.kube に存在する場合には、その中に新しいクラスター設定が追加されます。

  6. ノードの 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/*" ] } ] }
    2. IAM ポリシーを作成する

      aws iam create-policy \ --policy-name AmazonEKS_CNI_IPv6_Policy \ --policy-document file://vpc-cni-ipv6-policy.json
    3. 以下の内容を、node-role-trust-relationship.json という名前のファイルに保存します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    4. 次のコマンドを実行して、ロール名の変数を設定します。AmazonEKSNodeRole は、任意の名前に置き換えることができます。

      export node_role_name=AmazonEKSNodeRole
    5. IAM ロールを作成します。

      aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"node-role-trust-relationship.json"
    6. 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 ロールにポリシーをアタッチすることをお勧めします。詳細については、「サービスアカウントの IAM ロールを使用する Amazon VPC CNI プラグインの設定」を参照してください。

    7. IAM ロールに、2 つの必須なマネージド 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
    8. IAM ロールの ARN を取得し、後のステップで使用するために変数に格納します。

      node_iam_role=$(aws iam get-role \ --role-name $node_role_name \ --query="Role.Arn" \ --output text)
  7. マネージド型ノードグループを作成する

    1. 前のステップで作成したサブネットの ID を表示します。

      echo $subnets

      出力

      subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE,subnet-0377963d69EXAMPLE,subnet-0c05f819d5EXAMPLE
    2. ノードグループを作成します。0a1a56c486EXAMPLE099e6ca77aEXAMPLE0377963d69EXAMPLE、および 0c05f819d5EXAMPLE は、前のステップの出力で返された値に置き換えます。次のコマンドでは、前の出力の中でサブネット ID の間にあるカンマを必ず削除して使用します。t3.medium の部分は、任意の AWS Nitro System インスタンスタイプに置き換えることができます。

      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
  8. 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>
  9. 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
  10. (オプション) サンプルアプリケーションをデプロイする か、ロードバランシング アプリケーション または IPv6 ポッドへの ネットワーク トラフィックのための AWS Load Balancer コントローラー とサンプルアプリケーションをデプロイします。

  11. このチュートリアルのために作成したクラスターとノードの使用が終了したら、以下のコマンドにより、作成したリソースのクリーンアップを行う必要があります。削除を行う前に、これらのリソースが、このチュートリアルの外部で使用されていないことを確認します。

    1. ここまでの手順を実行したのとは異なるシェルで、このステップを完了する場合は、example values を前の手順を完了した際に指定した値に置き換えながら、すべての変数を前の手順で使用した値に設定します。前の手順を完了したのと同じシェルでこのステップを完了する場合は、このまま次のステップに進みます。

      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
    2. ノードグループを削除します。

      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
    3. クラスターを削除します。

      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.
    4. 作成した 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
    5. VPC を作成した AWS CloudFormation スタックを削除します。

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