協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 Amazon VPC CNI 外掛程式以使用 IRSA
適用於 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 許可。
注意
除非您封鎖對 IMDS 的存取,否則適用於 Kubernetes 的 Amazon VPC CNI 外掛程式的 Pod 可以存取指派給 Amazon EKS 節點 IAM 角色的許可。如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
-
現有 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
或kubectl
和 AWS CLI 來建立 IAM 角色。- eksctl
-
-
建立 IAM 角色,並使用與您叢集 IP 系列相符的命令將 IAM 政策連接至此角色。命令會建立並部署可建立 IAM 角色的 AWS CloudFormation 堆疊、連接您指定的政策,以及使用所建立 IAM 角色的 ARN 註釋現有的
aws-node
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 安全權杖服務端點類型。如需詳細資訊,請參閱設定服務帳戶 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