協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
適用於 Kubernetes 的 Amazon VPC CNI 外掛程式
-
需要 AWS Identity and Access Management (IAM) 許可。如果您的叢集使用
IPv4
系列,則會在AmazonEKS_CNI_Policy
AWS 受管政策中指定許可。如果您的叢集使用IPv6
系列,則必須將許可新增至您建立的 IAM 政策;如需說明,請參閱 為使用 IPv6 系列的叢集建立 IAM 政策。您可附加政策至 Amazon EKS 節點 IAM 角色,或附加至單獨 IAM 角色。如需將政策連接至 Amazon EKS 節點 IAM 角色的說明,請參閱 Amazon EKS 節點 IAM 角色。建議如本主題所述,將其指派給不同的角色。 -
建立 並設定為在部署
aws-node
時使用名為 的 Kubernetes 服務帳戶。服務帳戶綁定到一個名為aws-node
的 Kubernetesclusterrole
,它被指派了所需的 Kubernetes 許可。
注意
適用於 Kubernetes 的 Amazon VPC CNI 外掛程式的 Pod 可以存取指派給 Amazon EKS 節點 IAM 角色的許可,除非您封鎖對 IMDS 的存取。如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
-
需要現有的 Amazon EKS 叢集。若要部署叢集,請參閱 開始使用 Amazon EKS。
-
叢集需要現有的 AWS Identity and Access Management (IAM) OpenID Connect (OIDC) 供應商。若要判定您是否已經擁有一個,或是要建立一個,請參閱 為您的叢集建立 IAM OIDC 身分提供者。
步驟 1:為 Kubernetes IAM 角色建立 Amazon VPC CNI 外掛程式
-
確定您叢集的 IP 系列。
aws eks describe-cluster --name my-cluster | grep ipFamily
範例輸出如下。
"ipFamily": "ipv4"
輸出可能會傳回
ipv6
。 -
建立 IAM 角色。您可以使用
eksctl
或 AWSkubectl
和 CLI 來建立 IAM 角色。- eksctl
-
-
建立 IAM 角色,並使用與您叢集 IP 系列相符的命令將 IAM 政策連接至此角色。命令會建立和部署可建立 IAM 角色的 AWS CloudFormation 堆疊、連接您指定的政策,並使用所建立
aws-node
IAM 角色的 ARN 來註釋現有的 Kubernetes 服務帳戶。-
IPv4
用您的值取代
my-cluster
。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
用您的值取代
my-cluster
。將111122223333
取代為您的帳戶 ID,以及將AmazonEKS_CNI_IPv6_Policy
取代為您的IPv6
策略名稱。如果您沒有IPv6
政策,請參閱 為使用 IPv6 系列的叢集建立 IAM 政策 來建立政策。若要將IPv6
與您的叢集一起使用,其必須滿足幾個要求。如需詳細資訊,請參閱了解叢集、Pod 和 服務的 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
取代為上一個步驟中傳回的輸出。將region-code
取代為您叢集所在的 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" } } } ] }
-
建立角色。您可以將
AmazonEKSVPCCNIRole
取代為您選擇的任何名稱。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,以及將AmazonEKS_CNI_IPv6_Policy
取代為您的IPv6
策略名稱。如果您沒有IPv6
政策,請參閱 為使用 IPv6 系列的叢集建立 IAM 政策 來建立政策。若要將IPv6
與您的叢集一起使用,其必須滿足幾個要求。如需詳細資訊,請參閱了解叢集、Pod 和 服務的 IPv6 地址。aws iam attach-role-policy \ --policy-arn arn:aws: iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSVPCCNIRole
-
-
執行下列命令以使用您之前建立之 IAM 角色的 ARN 來標註
aws-node
服務帳戶。以您自己的值取代範例值
。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 的安全字符服務端點。
步驟 2:重新部署 Kubernetes Pod 的 Amazon VPC CNI 外掛程式
-
刪除並重新建立與服務帳戶相關聯的任何現有 Pod,以套用登入資料環境變數。註釋不會套用到目前在沒有註釋的情況下執行的 Pod。下列命令會刪除現有的
aws-node
DaemonSet Pod,並使用服務帳戶註釋進行部署。kubectl delete Pods -n kube-system -l k8s-app=aws-node
-
確認 Pod 全部重新啟動。
kubectl get pods -n kube-system -l k8s-app=aws-node
-
描述其中一個 Pod,並確認
AWS_WEB_IDENTITY_TOKEN_FILE
和AWS_ROLE_ARN
環境變數是否存在。將cpjw7
取代為上一個步驟輸出中傳回的其中一個 Pod 名稱。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 包含兩個容器。兩個容器具有相同的值。
如果您的 Pod 使用 AWS 區域端點,則上一個輸出也會傳回以下行。
AWS_STS_REGIONAL_ENDPOINTS=regional
步驟 3:從節點 IAM 角色移除 CNI 政策
如果您的 Amazon EKS 節點 IAM 角色目前具有 IAM AmazonEKS_CNI_Policy
(IPv4
) 政策或 IPv6 政策,而且您已建立個別的 IAM 角色,改為將政策連接到該角色,並將其指派給 Kubernetes aws-node
服務帳戶,則建議您使用符合叢集 IP 系列的 AWS CLI 命令,從節點角色中移除政策。將 AmazonEKSNodeRole
取代為您的節點角色名稱。
-
IPv4
aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy
-
IPv6
將
111122223333
取代為您的帳戶 ID,以及將AmazonEKS_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
系列,且叢集已設定適用於 Kubernetes 附加元件的 Amazon VPC CNI 外掛程式版本 1.10.1
或更新版本,則您需要建立可指派給 IAM 角色的 IAM 政策。如果您有現有的叢集,而您在建立時並未使用 IPv6
系列進行設定,則若要使用 IPv6
,您必須建立新的叢集。如需搭配使用 IPv6
與叢集的詳細資訊,請參閱 了解叢集、Pod 和 服務的 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