帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
配置 Amazon VPC CNI 插件以使用 IRSA
Amazon VPC CNI plugin for Kubernetes
-
需要 AWS Identity and Access Management(IAM)权限。如果您的集群使用 IPv4 系列,则权限将在
AmazonEKS_CNI_Policy
AWS 托管策略中指定。 如果您的集群使用 IPv6 系列,则权限必须添加到您创建的 IAM 策略。您可以将该策略附加到 Amazon EKS 节点 IAM 角色或单独 IAM 角色。我们建议您按照本主题中的详细说明,将其分配给一个单独的角色。 -
在部署时创建并配置为使用名为
aws-node
的 Kubernetes 服务账户。服务账户绑定到被分配了所需的 Kubernetes 权限的名为aws-node
的 Kubernetesclusterrole
。
注意
Amazon VPC CNI plugin for Kubernetes 的 Pods 有权访问分配给 Amazon EKS 节点 IAM 角色的权限,除非您阻止对 IMDS 的访问。有关更多信息,请参阅限制对分配给工作节点的实例配置文件的访问
先决条件
-
现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。
-
集群的现有 AWS Identity and Access Management IAM OpenID Connect (OIDC) 提供商。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商。
步骤 1:创建 Amazon VPC CNI plugin for Kubernetes IAM 角色
创建 IAM 角色
-
确定您的集群的 IP 系列。
aws eks describe-cluster --name
my-cluster
| grep ipFamily示例输出如下。
"ipFamily": "ipv
4
"输出可能会返回
ipv6
。 -
创建 IAM 角色。您可以使用
eksctl
或kubectl
和 AWS CLI 以创建 IAM 角色。 (可选)配置您的 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 之一并确保
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 包含两个容器,因此会返回两组重复的结果。两个容器具有相同的值。
如果您的 Pod 正在使用AWS 区域端点,之前的输出中也将返回以下行。
AWS_STS_REGIONAL_ENDPOINTS=regional
步骤 3:从节点 IAM 角色中删除 CNI 策略
如果您的 Amazon EKS 节点 IAM 角色当前附加有 AmazonEKS_CNI_Policy
IAM (IPv4
) 策略或 IPv6 策略,而且您已另行创建了一个 IAM 角色,并已将该策略附加到该 IAM 角色并将其分配给了 aws-node
Kubernetes 服务账户,那么我们建议您使用与您的集群的 IP 系列匹配的 AWS CLI 命令从节点角色中删除该策略。将
替换为您的节点角色的名称。AmazonEKSNodeRole
-
IPv4
aws iam detach-role-policy --role-name
AmazonEKSNodeRole
--policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy -
IPv6
将
替换为您的账户 ID,并将111122223333
替换为您的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
系列的集群,并且集群配置了 1.10.1
版或更高版本的 Amazon VPC CNI plugin for Kubernetes 附加组件,则需要创建一个 IAM 策略,您可以将其分配给 IAM 角色。如果您现有的集群在创建时没有使用 IPv6
系列进行配置,则必须创建一个新集群才能使用 IPv6
。有关集群使用 IPv6
的详细信息,请参阅 将 IPv6 地址分配给您的集群、pods 和服务。
-
复制以下文本并将其保存到名为
的文件。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