我有一个服务帐户,我试图在安装在同一命名空间中的多个 pod 中使用它。
其中一个 pod 是由 Airflow KubernetesPodOperator 创建的。另一个是通过 Helm 通过 Kubernetes 部署创建的。
在 Airflow 部署中,我看到分配了 IAM 角色并创建、列出了 DynamoDB 表等,但是在第二个掌舵图部署(或)在测试 pod 中(按此处所示创建),我在 DynamoDB 中不断收到AccessDenied
错误消息。CreateTable
我可以看到 AWS 角色 ARN 被分配给服务账户,服务账户被应用到 pod 并且相应的令牌文件也被创建,但我看到了AccessDenied
异常。
arn:aws:sts::1234567890:assumed-role/MyCustomRole/aws-sdk-java-1636152310195 is not authorized to perform: dynamodb:CreateTable on resource
服务帐户
Name: mypipeline-service-account
Namespace: abc-qa-daemons
Labels: app.kubernetes.io/managed-by=Helm
chart=abc-pipeline-main.651
heritage=Helm
release=ab-qa-pipeline
tier=mypipeline
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::1234567890:role/MyCustomRole
meta.helm.sh/release-name: ab-qa-pipeline
meta.helm.sh/release-namespace: abc-qa-daemons
Image pull secrets: <none>
Mountable secrets: mypipeline-service-account-token-6gm5b
Tokens: mypipeline-service-account-token-6gm5b
PS:使用KubernetesPodOperator
和通过 Helm 图表部署创建的客户端代码都是相同的,即相同的 docker 映像。其他属性,如nodeSelector
等tolerations
,卷挂载也是相同的。
它们的describe pod
输出是相似的,只是名称和标签发生了一些变化。KubernetesPodOperator
pod 具有 QoS 类,而Burstable
Helm 图表是BestEffort
.
为什么我进入AccessDenied
Helm 部署但没有进入KubernetesPodOperator
?如何调试这个问题?