クラスター、Pods、services 用の IPv6 アドレス - Amazon EKS

クラスター、Pods、services 用の IPv6 アドレス

デフォルトでは、Kubernetes は IPv4 アドレスを Pods と services に割り当てます。Pods と services に IPv4 アドレスを割り当てる代わりに、IPv6 アドレスを割り当てるようにクラスターを設定できます。Amazon EKS は、Kubernetes がバージョン 1.23 以降でサポートしていても、デュアルスタックの Pods または services をサポートしません。つまり、IPv4 アドレスと IPv6 アドレスの両方を Pods と services に割り当てることはできません。

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

クラスターに IPv6 ファミリーを使用する際の考慮事項

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

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

  • Windows Pods および services はサポートされていません。

  • 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 ユーザーガイド」の「Modify the IPv6 addressing attribute for your subnet」(サブネットの アドレス属性を変更する) を参照してください。

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

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

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

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

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

  • AWS OutpostsIPv6 を使用することはできません。

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

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

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

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

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

  • ノード IAM または CNI IAM のロールには、IPv6 のIAM ポリシーをアタッチする必要があります。上記 2 つの中では、CNI IAM ロールへのアタッチが推奨されます。詳細については、IPv6 ファミリーを使用するクラスター用に IAM ポリシーを作成します。およびステップ 1: Amazon VPC CNI plugin for Kubernetes IAM ロールを作成するを参照してください。

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

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

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

  • IPv6 ファミリーを使用するクラスターでセルフマネージドノードグループを作成する場合、ユーザーデータには、ノードの起動時に実行される bootstrap.sh ファイルの次の BootstrapArguments が含まれている必要があります。your-cidr をクラスターの VPC の IPv6 CIDR 範囲に置き換えます。

    --ip-family ipv6 --service-ipv6-cidr your-cidr

    クラスターの IPv6 CIDR 範囲がわからない場合は、次のコマンドで確認できます (AWS CLI バージョン 2.4.9 以降が必要です)。

    aws eks describe-cluster --name my-cluster --query cluster.kubernetesNetworkConfig.serviceIpv6Cidr --output text

IPv6 クラスターとマネージド Amazon Linux ノードをデプロイする

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

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

前提条件

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

  • デバイスまたは AWS CloudShell に、kubectl コマンドラインツールがインストールされていること。バージョンは、ご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが 1.28 である場合、kubectl のバージョン 1.271.28、または 1.29 が使用できます。kubectl をインストールまたはアップグレードする方法については、「kubectl のインストールまたは更新」を参照してください。

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

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

eksctl
前提条件

eksctl のバージョン 0.175.0 以降がコンピュータにインストールされていること。インストールまたはアップグレードするには、eksctl ドキュメントの「インストール」を参照してください。

eksctl を使用して IPv6 クラスターをデプロイするには
  1. ipv6-cluster.yaml ファイルを作成します。デバイスに沿ったコマンドをコピーします。必要に応じてコマンドに次の変更を加え、変更したコマンドを実行します。

    • my-cluster をクラスターの名前に置き換えます。この名前には、英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字はアルファベット文字である必要があります。また、100 文字より長くすることはできません。

    • region-code を Amazon EKS でサポートされている AWS リージョン に置き換えます。AWS リージョン の一覧については、AWS 全般的なリファレンスガイドの Amazon EKS エンドポイントとクォータ を参照してください。

    • version の値には、クラスターのバージョンを設定する必要があります。詳細については、「サポートされている Amazon EKS Kubernetes のバージョン」を参照してください。

    • my-nodegroup をノードグループの名前に置き換えます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。

    • t3.medium を、任意の AWS Nitro System インスタンスタイプに置き換えます。

    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
  2. クラスターを作成する

    eksctl create cluster -f ipv6-cluster.yaml

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

    [...]
    [✓]  EKS cluster "my-cluster" in "region-code" region is ready
  3. デフォルトの Pods に、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 Pods へのネットワークトラフィックのための、AWS Load Balancer Controller とサンプルアプリケーションをデプロイします。

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

    eksctl delete cluster my-cluster
AWS CLI
前提条件

ご使用のデバイスまたは AWS CloudShell で、バージョン 2.12.3 以降、または AWS Command Line Interface (AWS CLI) のバージョン 1.27.160 以降がインストールおよび設定されていること。現在のバージョンを確認するには、「aws --version | cut -d / -f2 | cut -d ' ' -f1」を参照してください。macOS の yumapt-get、または Homebrew などのパッケージマネージャは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール、更新、およびアンインストール」と「aws configure でのクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンは、最新バージョンより数バージョン遅れている可能性もあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。AWS CloudShell を使用する場合は、バージョン 2.12.3 以降または 1.27.160 以降の AWS CLI をインストールする必要があります。AWS CloudShell には、デフォルトとして AWS CLI の古いバージョンがインストールされている可能性があります。

重要
  • この手順のすべてのステップは、同一のユーザーとして実行する必要があります。現在のユーザーを確認するには、次のコマンドを実行します。

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

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

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

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

  1. 以下のコマンドを実行して、後のステップで使用するいくつかの変数を設定します。region-code は、リソースをデプロイする AWS リージョン に置き換えます。この値には、Amazon EKS でサポートされている任意の AWS リージョン が設定できます。AWS リージョン の一覧については、AWS 全般的なリファレンスガイドの Amazon EKS エンドポイントとクォータ を参照してください。my-cluster をクラスターの名前に置き換えます。この名前には、英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字はアルファベット文字である必要があります。また、100 文字より長くすることはできません。my-nodegroup をノードグループの名前に置き換えます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。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://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
    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 ファイルを作成します。

      cat >eks-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
    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. クラスターを作成する

    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 つ以上のサブネットを使用して、クラスターを作成します。詳細については、「容量不足」を参照してください。

      クラスターが作成されるまでに数分かかります。以下のコマンドを実行します。コマンドの出力が「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 ファイルを作成します。

      cat >vpc-cni-ipv6-policy <<EOF { "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/*" ] } ] } EOF
    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 ファイルを作成します。

      cat >node-role-trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
    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 plugin for Kubernetes の設定」を参照してください。

    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. デフォルトの Pods に IPv6 アドレスが割り当てられていることを、IP 列で確認します。

    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. デフォルトのサービスに IPv6 アドレスが割り当てられていることを、IP 列で確認します。

    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 Pods へのネットワークトラフィックのための、AWS Load Balancer Controller とサンプルアプリケーションをデプロイします。

  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