帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
了解 EKS 容器组身份的工作原理
Amazon EKS 容器组身份关联提供管理应用程序凭证的功能,类似于 Amazon EC2 实例配置文件为 Amazon EC2 实例提供凭证的方式。
Amazon EKS 容器组身份通过额外的 EKS Auth API,以及在每个节点上运行的代理容器组为您的工作负载提供凭证。
在 Amazon EKS 附加组件以及自行管理的控制器、运算符和其他附加组件中,创建者需要更新软件后才能使用最新版的 AWS SDK。有关 EKS 容器组身份与 Amazon EKS 插件之间的兼容性列表,请参阅上一节 EKS 容器组身份限制。
在代码中使用 EKS 容器组身份
在您的代码中,您可以使用 AWS SDK 访问 AWS 服务。您可以编写代码,为使用 SDK 的 AWS 服务创建客户端,默认情况下,SDK 会在一系列位置中搜索要使用的 AWS Identity and Access Management 凭证。找到有效凭证后,搜索停止。有关使用的默认位置的更多信息,请参阅《AWS SDK 和工具参考指南》中的凭证提供程序链。
EKS 容器组身份已添加到容器凭证提供程序,可在默认凭证链的一个步骤中搜索。如果您的工作负载当前使用凭证链中较早的证书,则即使您为同一工作负载配置了 EKS 容器组身份关联,这些凭证也将继续使用。这样,在删除旧凭证之前,您可以先创建关联,从而安全地从其他类型的凭证迁移。
容器凭证提供程序从每个节点上运行的代理处提供临时凭证。在 Amazon EKS 中,代理是 Amazon EKS 容器组身份,而在 Amazon Elastic Container Service 中,代理则是 amazon-ecs-agent。SDK 使用环境变量来定位要连接的代理。
相比之下,服务账户的 IAM 角色提供了一个 Web 身份令牌,AWS SDK 必须使用 AssumeRoleWithWebIdentity 与 AWS Security Token Service 进行交换。
EKS 容器组身份代理如何使用容器组(pod)
-
当 Amazon EKS 启动一个新的容器组(pod),而该容器组使用与 EKS 容器组身份关联的服务账户时,集群将添加以下内容到容器组清单中:
env: - name: AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE value: "/var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token" - name: AWS_CONTAINER_CREDENTIALS_FULL_URI value: "http://169.254.170.23/v1/credentials" volumeMounts: - mountPath: "/var/run/secrets/pods.eks.amazonaws.com/serviceaccount/" name: eks-pod-identity-token volumes: - name: eks-pod-identity-token projected: defaultMode: 420 sources: - serviceAccountToken: audience: pods.eks.amazonaws.com expirationSeconds: 86400 # 24 hours path: eks-pod-identity-token -
Kubernetes 选择要在哪个节点上运行容器组(pod)。然后,节点上的 Amazon EKS 容器组身份代理使用 AssumeRoleForPodIdentity 操作从 EKS Auth API 检索临时凭证。
-
EKS 容器组身份代理可为在容器中运行的 AWS SDK 提供这些凭证。
-
在应用程序中使用 SDK 时,无需指定凭证提供程序使用默认凭证链。或者,您可以指定容器凭证提供程序。有关使用的默认位置的更多信息,请参阅《AWS SDK 和工具参考指南》中的凭证提供程序链。
-
SDK 使用环境变量连接到 EKS 容器组身份代理并检索凭证。
注意
如果您的工作负载当前使用凭证链中较早的证书,则即使您为同一工作负载配置了 EKS 容器组身份关联,这些凭证也将继续使用。