帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
设置 Amazon EKS 容器组身份代理
Amazon EKS 容器组身份关联提供管理应用程序凭证的功能,类似于 Amazon EC2 实例配置文件为 Amazon EC2 实例提供凭证的方式。
Amazon EKS 容器组身份通过额外的 EKS Auth API,以及在每个节点上运行的代理容器组为您的工作负载提供凭证。
注意事项
-
IPv6
默认情况下,EKS 容器组身份代理会侦听 IPv4
和 IPv6
地址,以便为容器组请求凭证。对于 IPv4
,代理会使用环回(本地主机)IP 地址 169.254.170.23
,对于 IPv6
,则会使用本地主机 IP 地址 [fd00:ec2::23]
。
如果禁用 IPv6
地址或以其他方式阻止本地主机 IPv6
IP 地址,代理将无法启动。要在无法使用 IPv6
的节点上启动代理,请按照 在 EKS 容器组身份代理中禁用 IPv6 中的步骤禁用 IPv6
配置。
创建 Amazon EKS 容器组身份代理
代理先决条件
-
现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。集群版本和平台版本必须与 EKS 容器组身份集群版本 中列出的版本相同或更高。
-
节点角色有权让代理在 EKS Auth API 中执行 AssumeRoleForPodIdentity
操作。您可以使用 AWS托管策略:AmazonEKSWorkerNodePolicy 或添加自定义策略,自定义策略与以下策略类似:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks-auth:AssumeRoleForPodIdentity"
],
"Resource": "*"
}
]
}
可通过标签来限制此操作,以限制使用代理的容器组可以分派哪些角色。
-
节点可以访问 Amazon ECR 并从中下载映像。插件的容器映像位于 Amazon 容器镜像注册表 中列出的注册表中。
请注意,您可以在 AWS Management Console 中的可选配置设置,以及 AWS CLI 中的 --configuration-values
更改映像位置并为 EKS 插件提供 imagePullSecrets
。
-
节点可以访问 Amazon EKS Auth API。对于私有集群,AWS PrivateLink 中的 eks-auth
端点是必需的。
- AWS Management Console
-
从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters。
-
在左侧导航窗格中,选择集群,然后为您要配置 EKS 容器组身份代理插件的集群选择集群名称。
-
选择附加组件选项卡。
-
选择获取更多附加组件。
-
选择 EKS 容器组身份代理插件框右上角的框,然后选择下一步。
-
在配置选定插件设置页面上,从版本下拉列表中选择任意版本。
-
(可选)展开可选配置设置以输入其他配置。例如,您可以提供备用容器映像位置和 ImagePullSecrets
。带有已接受键的 JSON Schema 显示在插件配置架构中。
在配置值中输入配置键和值。
-
选择下一步。
-
确认 EKS 容器组身份代理容器组正在您的集群上运行。
kubectl get pods -n kube-system | grep 'eks-pod-identity-agent'
示例输出如下。
eks-pod-identity-agent-gmqp7
1/1 Running 1 (24h ago) 24h
eks-pod-identity-agent-prnsh
1/1 Running 1 (24h ago) 24h
现在,您可以在集群中使用 EKS 容器组身份关联。有关更多信息,请参阅 配置 Kubernetes 服务账户以使用 EKS 容器组身份分派 IAM 角色。
- AWS CLI
-
-
运行以下 AWS CLI 命令:将 my-cluster
替换为您的集群名称。
aws eks create-addon --cluster-name my-cluster
--addon-name eks-pod-identity-agent --addon-version v1.0.0-eksbuild.1
EKS 容器组身份代理不将 service-account-role-arn
用于服务账户的 IAM 角色。您必须为 EKS 容器组身份代理提供节点角色的权限。
-
确认 EKS 容器组身份代理容器组正在您的集群上运行。
kubectl get pods -n kube-system | grep 'eks-pod-identity-agent'
示例输出如下。
eks-pod-identity-agent-gmqp7
1/1 Running 1 (24h ago) 24h
eks-pod-identity-agent-prnsh
1/1 Running 1 (24h ago) 24h
现在,您可以在集群中使用 EKS 容器组身份关联。有关更多信息,请参阅 配置 Kubernetes 服务账户以使用 EKS 容器组身份分派 IAM 角色。
更新 Amazon EKS 容器组身份代理
更新 Amazon EKS 类型的附加组件。如果您尚未将 Amazon EKS 类型的插件添加到集群,请参阅 创建 Amazon EKS 容器组身份代理。
- AWS Management Console
-
从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters。
-
在左侧导航窗格中,选择集群,然后为您要配置 EKS 容器组身份代理插件的集群选择集群名称。
-
选择附加组件选项卡。
-
如果有新版本的插件可用,EKS 容器组身份代理会有一个更新版本按钮。选择更新版本。
-
在配置 Amazon EKS 容器组身份代理页面上,从版本下拉列表中选择新版本。
-
选择保存更改。
可能需要几秒钟才能完成更新。然后,通过查看状态确认插件版本已更新。
- AWS CLI
-
-
查看集群上当前安装的附加组件版本。将 my-cluster
替换为您的集群名称。
aws eks describe-addon --cluster-name my-cluster
--addon-name eks-pod-identity-agent --query "addon.addonVersion" --output text
示例输出如下。
v1.0.0-eksbuild.1
您需要先创建附加组件,然后才能使用此过程对其进行更新。
-
使用 AWS CLI 更新您的附加组件。如果您想要使用 AWS Management Console 或 eksctl
更新附加组件,则请参阅 更新附加组件。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令。
-
将 my-cluster
替换为您的集群名称。
-
将 v1.0.0-eksbuild.1
替换为所需的版本。
-
请将 111122223333
替换为您的账户 ID。
-
运行以下命令:
aws eks update-addon --cluster-name my-cluster
--addon-name eks-pod-identity-agent --addon-version v1.0.0-eksbuild.1
'
可能需要几秒钟才能完成更新。
-
确认附加组件版本已更新。将 my-cluster
替换为您的集群名称。
aws eks describe-addon --cluster-name my-cluster
--addon-name eks-pod-identity-agent
可能需要几秒钟才能完成更新。
示例输出如下。
{
"addon": {
"addonName": "eks-pod-identity-agent",
"clusterName": "my-cluster
",
"status": "ACTIVE",
"addonVersion": "v1.0.0-eksbuild.1
",
"health": {
"issues": []
},
"addonArn": "arn:aws:eks:region
:111122223333
:addon/my-cluster
/eks-pod-identity-agent/74c33d2f-b4dc-8718-56e7-9fdfa65d14a9
",
"createdAt": "2023-04-12T18:25:19.319000+00:00",
"modifiedAt": "2023-04-12T18:40:28.683000+00:00",
"tags": {}
}
}
EKS 容器组身份代理配置
在 EKS 容器组身份代理中禁用 IPv6
- AWS Management Console
-
在 AWS Management Console 中禁用 IPv6
-
要在 EKS 容器组身份代理中禁用 IPv6
,请将以下配置添加到 EKS 附加组件的可选配置设置中。
从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters。
-
在左侧导航窗格中,选择 Clusters(集群),然后选择要为其配置附加组件的集群的名称。
-
选择附加组件选项卡。
-
选择 EKS 容器组身份代理附加组件框右上角的框,然后选择编辑。
-
在配置 EKS 容器组身份代理页面上:
-
选择您想使用的 Version(版本)。我们建议您保留与上一步相同的版本,并通过单独的操作更新版本和配置。
-
展开可选配置设置。
-
在配置值中输入 JSON 键 "agent":
,以及键为 "additionalArgs":
的嵌套 JSON 对象的值。生成的文本必须是有效的 JSON 对象。如果此键和值是文本框中的唯一数据,请用大括号 {}
将键和值括起来。以下示例显示网络策略已启用:
{
"agent": {
"additionalArgs": {
"-b": "169.254.170.23"
}
}
}
此配置会将 IPv4
地址设置为代理所使用的唯一地址。
-
要通过替换 EKS 容器组身份代理容器组来应用新配置,请选择保存更改。
Amazon EKS 通过推出适用于 EKS 容器组身份代理的 Kubernetes DaemonSet
,将更改应用到 EKS 附加组件。可在 AWS Management Console 中的附加组件更新历史记录中跟踪推出状态和 kubectl rollout status
daemonset/eks-pod-identity-agent --namespace
kube-system
。
kubectl rollout
具有以下命令:
$ kubectl rollout
history -- View rollout history
pause -- Mark the provided resource as paused
restart -- Restart a resource
resume -- Resume a paused resource
status -- Show the status of the rollout
undo -- Undo a previous rollout
如果推出时间过长,Amazon EKS 将撤销推出,并且会将类型为附加组件更新且状态为失败的消息添加到附加组件的更新历史记录中。要调查任何问题,请先查看推出历史记录,然后在 EKS 容器组身份代理容器组上运行 kubectl logs
,进而查看 EKS 容器组身份代理的日志。
-
如果更新历史记录中的新条目状态为成功,则表示推出已完成,并且附加组件正在所有 EKS 容器组身份代理容器组中使用新配置。
- AWS CLI
-
在 AWS CLI 中禁用 IPv6
-
要在 EKS 容器组身份代理中禁用 IPv6
,请将以下配置添加到 EKS 附加组件的配置值中。
运行以下 AWS CLI 命令:将 my-cluster
替换为集群的名称,并将 IAM 角色 ARN 替换为您正在使用的角色。
aws eks update-addon --cluster-name my-cluster
--addon-name eks-pod-identity-agent \
--resolve-conflicts PRESERVE --configuration-values '{"agent":{"additionalArgs": { "-b": "169.254.170.23"}}}'
此配置会将 IPv4
地址设置为代理所使用的唯一地址。
Amazon EKS 通过推出适用于 EKS 容器组身份代理的 Kubernetes DaemonSet,将更改应用到 EKS 附加组件。可在 AWS Management Console 中的附加组件更新历史记录中跟踪推出状态和 kubectl rollout status
daemonset/eks-pod-identity-agent --namespace kube-system
。
kubectl rollout
具有以下命令:
kubectl rollout
history -- View rollout history
pause -- Mark the provided resource as paused
restart -- Restart a resource
resume -- Resume a paused resource
status -- Show the status of the rollout
undo -- Undo a previous rollout
如果推出时间过长,Amazon EKS 将撤销推出,并且会将类型为附加组件更新且状态为失败的消息添加到附加组件的更新历史记录中。要调查任何问题,请先查看推出历史记录,然后在 EKS 容器组身份代理容器组上运行 kubectl logs
,进而查看 EKS 容器组身份代理的日志。