配置服务账户的 Amazon Security Token Service 端点
如果您将 Kubernetes 服务账户与 服务账户的 IAM 角色 结合使用,若您的集群和平台版本相同,或者晚于下表中所列的版本,则您可以配置服务账户使用的 Amazon Security Token Service 端点类型。如果您的 Kubernetes 或平台版本早于表中列出的版本,则您的服务账户只能使用全局端点。
Kubernetes 版本 | 平台版本 | 默认端点类型 |
---|---|---|
1.29 |
eks.1 |
区域性 |
1.28 |
eks.1 |
区域性 |
1.27 |
eks.1 |
区域性 |
1.26 |
eks.1 |
区域性 |
1.25 |
eks.1 |
区域性 |
1.24 |
eks.2 |
区域性 |
1.23 |
eks.1 |
区域性 |
Amazon 建议使用区域 Amazon STS 端点而不是全局端点。这可以减少延迟,提供内置冗余并提高会话令牌的有效性。Amazon Security Token Service 必须在 Pod 运行的 Amazon Web Services 区域 中是活动的。此外,您的应用程序必须内置冗余功能,以便在该 Amazon Web Services 区域 的服务出现故障时选择其他 Amazon Web Services 区域。有关更多信息,请参阅 IAM 用户指南中的在 Amazon Web Services 区域中管理 Amazon STS。
先决条件
-
现有集群。如果还没有,可以使用 开始使用 Amazon EKS 指南之一创建一个。
-
集群的现有 IAM OIDC 提供商。有关更多信息,请参阅为集群创建 IAM OIDC 提供商。
-
现有的 Kubernetes 服务账户配置为与适用于服务账户的 Amazon EKS IAM 功能结合使用。
要配置 Kubernetes 服务账户使用的端点类型
以下示例全部使用 Amazon VPC CNI 插件所使用的 aws-node
Kubernetes 服务账户。您可以将
替换为您自己的服务账户、Pods、命名空间和其他资源。example values
-
选择一个使用要更改其端点的服务账户的 Pod。确定 Pod 在其中运行的 Amazon Web Services 区域。将
替换为您的 Pod 名称,并将aws-node-6mfgv
替换为您的 Pod 的命名空间。kube-system
kubectl describe pod
aws-node-6mfgv
-nkube-system
|grep Node:示例输出如下。
ip-192-168-79-166.cn-north-1/192.168.79.166
在之前的输出中,Pod 在 Amazon Web Services 区域 cn-north-1 中的节点上运行。
-
确定 Pod's 的服务账户使用的端点类型。
kubectl describe pod
aws-node-6mfgv
-nkube-system
|grep AWS_STS_REGIONAL_ENDPOINTS示例输出如下。
AWS_STS_REGIONAL_ENDPOINTS:
regional
如果当前端点是全局端点,则输出中将返回
global
。如果没有返回输出,则默认端点类型正在使用中且尚未被覆盖。 -
如果您的集群或平台版本与表中列出的版本相同或晚于该版本,则可以使用以下命令之一将服务账户使用的端点类型从默认类型更改为其他类型。将
替换为服务账户的服务账户的名称,并将aws-node
替换为服务账户的命名空间。kube-system
-
如果您的默认或当前端点类型为全局端点类型,并且您想将其更改为区域性端点:
kubectl annotate serviceaccount -n
kube-system
aws-node
eks.amazonaws.com/sts-regional-endpoints=true如果您使用 服务账户的 IAM 角色 以在 Pods 的容器中运行的应用程序中生成预签名 S3 URL,则区域端点的 URL 格式与以下示例类似:
https://bucket.s3.cn-north-1.amazonaws.com.cn/path?...&X-Amz-Credential=
your-access-key-id
/date
/cn-north-1/s3/aws4_request&... -
如果您的默认或当前端点类型为区域性端点类型,并且您想将其更改为全局性端点:
kubectl annotate serviceaccount -n
kube-system
aws-node
eks.amazonaws.com/sts-regional-endpoints=false如果您的应用程序明确向 Amazon STS 全局端点提出请求,且您不会覆盖在 Amazon EKS 集群中使用区域端点的默认行为,则请求将失败,并出现错误。有关更多信息,请参阅容器组(pod)容器收到以下错误:An error occurred (SignatureDoesNotMatch) when calling the GetCallerIdentity operation: Credential should be scoped to a valid region。
如果您使用 服务账户的 IAM 角色 以在 Pods 的容器中运行的应用程序中生成预签名 S3 URL,则全局端点的 URL 格式与以下示例类似:
https://bucket.s3.amazonaws.com.cn/path?...&X-Amz-Credential=
your-access-key-id
/date
/cn-north-1/s3/aws4_request&...
如果您的自动化需要特定格式的预签名 URL,或者如果您的应用程序或使用预签名 URL 的下游依赖关系对目标 Amazon Web Services 区域 有期望,则进行必要的更改以使用适当的 Amazon STS 端点。
-
-
删除并重新创建任何与服务账户关联的现有 Pods,以应用凭证环境变量。变异 Webhook 不将其应用到已经在运行的 Pods。您可以将
、Pods
和kube-system
替换为您设置注释的 Pods 的信息。-l k8s-app=aws-node
kubectl delete
Pods
-nkube-system
-l
k8s-app=aws-node
-
确认 Pods 已全部重新启动。
kubectl get
Pods
-nkube-system
-l k8s-app=aws-node
-
查看其中一个 Pods 的环境变量。验证
AWS_STS_REGIONAL_ENDPOINTS
值是您在上一步中将其设置的值。kubectl describe pod
aws-node-kzbtr
-nkube-system
|grep AWS_STS_REGIONAL_ENDPOINTS示例输出如下。
AWS_STS_REGIONAL_ENDPOINTS=
regional