帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
配置 pods 以使用服务账户访问 Amazon 服务
如果 Pod 需要访问 Amazon Web Services 服务,则您必须配置它以使用 Kubernetes 服务账户。服务账户必须关联到有权访问 Amazon Web Services 服务 的 Amazon Identity and Access Management(IAM)角色。
先决条件
-
现有集群。如果还没有,可以使用 开始使用 Amazon EKS 指南之一创建一个。
-
现有 Kubernetes 服务账户和 EKS 容器组身份关联(将服务账户与 IAM 角色关联)。该角色必须具有关联的 IAM 策略,其中包含您希望您的 Pods 必须具有的权限,以便使用 Amazon Web Services 服务。有关如何创建和配置服务账户和角色的更多信息,请参阅 为 Kubernetes 服务账户分配 IAM 角色。
-
在您的设备或 Amazon CloudShell 上安装和配置的最新版本 Amazon CLI。您可以使用
aws --version | cut -d / -f2 | cut -d ' ' -f1
检查您的当前版本。软件包管理器(如yum
、apt-get
或适用于 macOS 的 Homebrew)通常比 Amazon CLI 的最新版本落后几个版本。要安装最新版本,请参阅《Amazon Command Line Interface 用户指南》中的安装、更新和卸载 Amazon CLI 和使用aws configure
进行快速配置。Amazon CloudShell 中安装的 Amazon CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《Amazon CloudShell 用户指南》中的将 Amazon CLI 安装到您的主目录。 -
您的设备或 Amazon CloudShell 上安装了
kubectl
命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为1.30
,则可以将kubectl
的1.29
、1.30
或1.31
版本与之配合使用。要安装或升级kubectl
,请参阅 设置 kubectl 和 eksctl。 -
包含集群配置的现有
kubectl
config
文件。要创建kubectl
config
文件,请参阅 通过创建 kubeconfig 文件将 kubectl 连接到 EKS 集群。
要配置 Pod 以使用服务账户
-
使用以下命令创建部署清单,您可以使用该部署清单部署 Pod 以确认配置。将
替换为您自己的值。example values
cat >
my-deployment.yaml
<<EOF apiVersion: apps/v1 kind: Deployment metadata: name:my-app
spec: selector: matchLabels: app:my-app
template: metadata: labels: app:my-app
spec: serviceAccountName:my-service-account
containers: - name:my-app
image:public.ecr.aws/nginx/nginx:X.XX
EOF -
将清单部署到集群。
kubectl apply -f
my-deployment.yaml
-
确认您的 Pod 具有所需的环境变量。
-
按上一步部署后,查看部署的 Pods。
kubectl get pods | grep
my-app
示例输出如下。
my-app
-6f4dfff6cb-76cv9
1/1 Running 0 3m28s -
确认 Pod 已挂载服务账户令牌文件。
kubectl describe pod
my-app
-6f4dfff6cb-76cv9
| grep AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:示例输出如下。
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE: /var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token
-
-
确认您的 Pods 可以使用您在附加到角色的 IAM 策略中分配的权限与 Amazon Web Services 服务 进行交互。
注意
当 Pod 使用来自与服务账户关联的 IAM 角色的 Amazon 凭证时,该 Pod 容器中的 Amazon CLI 或其他开发工具包仅使用该角色提供的凭证。如果您不限制对提供给 Amazon EKS 节点 IAM 角色的凭证的访问,Pod 仍然可以访问这些凭证。有关更多信息,请参阅限制对分配给工作节点的实例配置文件的访问
。 如果您的 Pods 无法按预期与服务进行交互,请完成以下步骤以确认所有配置都正确。
-
确认您 Pods 使用的 Amazon SDK 版本支持通过 EKS 容器组身份关联分派 IAM 角色。有关更多信息,请参阅 将容器组身份与 Amazon SDK 结合使用。
-
确认部署正在使用服务账户。
kubectl describe deployment
my-app
| grep "Service Account"示例输出如下。
Service Account:
my-service-account
-