このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
アマゾン VPC CNI Kubernetes用プラグイン
-
AWS アイデンティティとアクセス管理 (IAM のアクセス許可が必要です。クラスターが
IPv4
ファミリーを使用する場合、このアクセス許可は ` アマゾンEKS_CNI_Policy` AWS 管理ポリシーで指定されます。クラスターがIPv6
ファミリーを使用する場合には作成した IAM ポリシーにアクセス許可を追加する必要があります。手順については「IPv6 ファミリーを使用するクラスター用に IAM ポリシーを作成します。」を参照してください。このポリシーはアマゾン EKS ノード IAM ロール または 個別の IAM ロールにアタッチすることができます。アマゾン EKS ノード IAM ロールにポリシーをアタッチする手順については「Amazon EKS ノードの IAM ロール」を参照してください。このトピックで詳細に説明するように、別のロールに割り当てることをお勧めします。 -
デプロイ時に作成すると、
aws-node
という名前の Kubernetes サービスアカウントを使用するように設定されます。このサービスアカウントはaws-node
という名前の Kubernetesclusterrole
にバインドされます。これには必要な Kubernetes アクセス許可が割り当てられています。
注記
IMDS へのアクセスをブロックする場合を除き、Amazon VPC CNI plugin for Kubernetes 用の Pods にはアマゾン EKS ノード IAM ロール に割り当てられたパーミッションへのアクセス権があります。詳細については「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
-
既存の アマゾン EKS クラスター。デプロイするには「Amazon EKS の使用を開始する」を参照してください。
-
クラスターの既存の AWS アイデンティティとアクセス管理 (IAM OpenID Connect (OIDC プロバイダー。既に存在しているかどうかを確認する、または作成するには「クラスターの IAM OIDC プロバイダーを作成する」を参照してください。
ステップ 1: Amazon VPC CNI plugin for Kubernetes IAM ロールを作成する
-
クラスターで使用する IP ファミリを決定します。
aws eks describe-cluster --name my-cluster | grep ipFamily
出力例は次のとおりです。
"ipFamily": "ipv4"
この出力では代わりに
ipv6
が返されることがあります。 -
IAM ロールを作成します。IAM ロールを作成するには
eksctl
またはkubectl
および AWS CLI を使用してます。- eksctl
-
-
クラスターの IP ファミリーに適合するコマンドを使用して IAM ロールを作成し、そのロールに IAM ポリシーをアタッチします。このコマンドではIAM ロールを作成する AWS クラウドFormation スタックを作成およびデプロイし、そのために指定したポリシーをアタッチします。さらに、既存の
aws-node
Kubernetes サービスアカウントを、作成された IAM ロールの ARN でアノテーションします。-
IPv4
マイクラスター
を独自の値に置き換えます。eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKSVPCCNIRole \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --override-existing-serviceaccounts \ --approve
-
IPv6
マイクラスター
を独自の値に置き換えます。111122223333
を、ご自身のアカウント ID に置き換えます。また、アマゾンEKS_CNI_IPv6_Policy
を、IPv6
ポリシー名に置き換えます。IPv6
ポリシーがない場合はIPv6 ファミリーを使用するクラスター用に IAM ポリシーを作成します。 を参照して作成します。クラスターでIPv6
を使用するにはいくつかの要件を満たす必要があります。詳細については「クラスター、Pods、サービスに対する IPv6 アドレスの説明」を参照してください。eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKSVPCCNIRole \ --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --override-existing-serviceaccounts \ --approve
-
-
- kubectl と AWS CLI
-
-
クラスターの OIDC プロバイダーの URL を表示します。
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
出力例は次のとおりです。
https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
出力が返されない場合はクラスター用の IAM OIDC プロバイダーを作成する必要があります。
-
次の内容を
vpc-cni-trust-policy.json
という名前のファイルにコピーします。111122223333
を、ご自身のアカウント ID および前のステップで返された出力EXAMPLED539D4633E53DE1B71EXAMPLE
に置き換えます。地域コード
を、クラスターのある AWS リージョンに置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
-
ロールを作成します。
アマゾンEKSVPCCNIRole
は任意の名前に置き換えることができます。aws iam create-role \ --role-name AmazonEKSVPCCNIRole \ --assume-role-policy-document file://"vpc-cni-trust-policy.json"
-
必要な IAM ポリシーをロールにアタッチします。クラスターの IP ファミリに適合したコマンドを実行してください。
-
IPv4
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSVPCCNIRole
-
IPv6
111122223333
はご自身のアカウント ID に置き換え、アマゾンEKS_CNI_IPv6_Policy
はご使用のIPv6
ポリシーの名前に置き換えます。IPv6
ポリシーがない場合はIPv6 ファミリーを使用するクラスター用に IAM ポリシーを作成します。 を参照して作成します。クラスターでIPv6
を使用するにはいくつかの要件を満たす必要があります。詳細については「クラスター、Pods、サービスに対する IPv6 アドレスの説明」を参照してください。aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSVPCCNIRole
-
-
次のコマンドを実行し、先に作成した IAM ロールの ARN で
aws-node
サービスアカウントをアノテーションします。example
の値は独自の値に置き換えます。kubectl annotate serviceaccount \ -n kube-system aws-node \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
-
-
(オプション Kubernetes サービスアカウントで使用されている AWS Security Token Service のエンドポイントタイプを設定します。詳細については「サービスアカウントの AWS Security Token Service エンドポイントを設定する」を参照してください。
ステップ 2: Amazon VPC CNI plugin for KubernetesPods 再デプロイする
-
認証情報環境変数を適用するために、サービスアカウントに関連付けられている既存の Pods を削除して再作成します。現在アノテーションなしで実行されている Pods にはアノテーションは適用されません。次のコマンドは既存の
aws-node
DaemonSet Pods を削除し、サービスアカウントのアノテーションを使用してデプロイします。kubectl delete Pods -n kube-system -l k8s-app=aws-node
-
Pods がすべて再起動したことを確認します。
kubectl get pods -n kube-system -l k8s-app=aws-node
-
Pods の 1 つの詳細を表示し、環境変数の
AWS_WEB_IDENTITY_TOKEN_FILE
およびAWS_ROLE_ARN
が存在することを確認します。cpjw7
を、前のステップの出力で返された、いずれかの Pods の名前に置き換えます。kubectl describe pod -n kube-system aws-node-cpjw7 | grep 'AWS_ROLE_ARN:\|AWS_WEB_IDENTITY_TOKEN_FILE:'
出力例は次のとおりです。
AWS_ROLE_ARN: arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_ROLE_ARN: arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
Pod には 2 つのコンテナが含まれているため、重複した結果の 2 つのセットが返されます。両方のコンテナの値は同じです。
Pod で AWS リージョンエンドポイントを使用している場合、前の出力では下記の行も返されています。
AWS_STS_REGIONAL_ENDPOINTS=regional
ステップ 3: ノードの IAM ロールから CNI ポリシーを削除する
現在、アマゾン EKS ノード IAM ロールに AmazonEKS_CNI_Policy
IAM (IPv4
ポリシーまたは IPv6 ポリシーがアタッチされており、および別の IAM ロールを作成し、このロールにそのポリシーを代わりにアタッチして、そのロールを aws-node
Kubernetes サービスアカウントに割り当てている場合、クラスターの IP ファミリーに適合する AWS CLI コマンドを使用して、ノードのロールからポリシーを削除することをお勧めします。アマゾンEKSNodeRole
を、ノードのロールの名前に置き換えます。
-
IPv4
aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
-
IPv6
111122223333
はご自身のアカウント ID に置き換え、アマゾンEKS_CNI_IPv6_Policy
はご使用のIPv6
ポリシーの名前に置き換えます。aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy
IPv6
ファミリーを使用するクラスター用に IAM ポリシーを作成します。
IPv6
ファミリーを使用するクラスターを作成し、そのクラスターでバージョン 1.10.1
以降の Amazon VPC CNI plugin for Kubernetes アドオンが設定されている場合はIAM ロールに割り当てることができる IAM ポリシーを作成する必要があります。作成時に IPv6
ファミリーの使用を設定していない、既存のクラスターにおいて、IPv6
を使用する場合には新しいクラスターを作成する必要があります。クラスターでの IPv6
使用の詳細については「クラスター、Pods、サービスに対する IPv6 アドレスの説明」を参照してください。
-
次のテキストをコピーし、
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/*" ] } ] }
-
IAM ポリシーを作成する
aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json