EKS Pod Identity 是 AWS 推出的一种机制,它解决了 Kubernetes 集群中的 Pod 访问 AWS 服务时的复杂身份认证问题。在 EKS Pod Identity 出现之前,Pod 访问 AWS 服务通常需要使用 IAM 角色与服务账号(IRSA),这增加了配置复杂性。
另外它消除了使用 OIDC provider的复杂性,相比 IRSA,不再需要为每个集群设置和管理 OIDC provider。
先在eks集群上安装pod identity agent:
aws eks create-addon --cluster-name my-cluster --addon-name eks-pod-identity-agent --addon-version v1.0.0-eksbuild.1
安装完成后的效果:
在kubectl命令里也能看到pod:
kubectl get pods -n kube-system | grep 'eks-pod-identity-agent'
假设我们有一个需要访问 S3 存储桶的应用程序,下面是使用 EKS Pod Identity 的示例:
首先,在 AWS 中创建一个具有 S3 访问权限的 IAM 角色:
aws iam create-role --role-name my-s3-access-role --assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
"Effect": "Allow",
"Principal": {
"Service": "pods.eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}'
将AmazonS3ReadOnlyAccess
加到这个role上面:
aws iam attach-role-policy --role-name my-s3-access-role --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
创建一个service account:
cat >my-service-account.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
namespace: default
EOF
kubectl apply -f my-service-account.yaml
在 EKS 集群中创建一个 EKS Pod Identity Association:
aws eks create-pod-identity-association \
--cluster-name my-cluster \ # 集群名进行替换
--namespace default \
--service-account pod-identity-sa-test \
--role-arn arn:aws:iam::123456789012:role/my-s3-access-role # 将这个帐号id替换成自己的
返回结果示例:
此时在eks 页面也能看到新创建出来的这个pod identity association:
创建一个测试pod,它使用了上面的my-service-account
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: amazon/aws-cli:latest
command: ["sleep", "100000000"]
EOF
kubectl apply -f my-deployment.yaml
创建完成后,登录到这个pod的shell, 能够执行s3 ls命令并访问到结果:
这个应用程序的 Pod 将自动获取访问 S3 的临时凭证,AWS SDK 会自动使用这些凭证进行 S3 操作,从而简化了凭证管理且提高了安全性。
与 IRSA 相比,EKS Pod Identity 不需要设置 OIDC 提供者,降低了操作复杂性,并提供了更简单的使用体验。
参考文档:
https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html