我一直在尝试使用 k8s-sig 组提供的指南运行外部 dns pod。我遵循了指南的每一步,并得到了以下错误。
time="2021-02-27T13:27:20Z" level=error msg="records retrieval failed: failed to list hosted zones: WebIdentityErr: failed to retrieve credentials\ncaused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity\n\tstatus code: 403, request id: 87a3ca86-ceb0-47be-8f90-25d0c2de9f48"
Run Code Online (Sandbox Code Playgroud)
我使用 Terraform 创建了 AWS IAM 策略,并成功创建了它。除了我使用过的服务帐户的 IAM 角色之外eksctl,其他所有内容都是通过 Terraform 生成的。
但是后来我看到了这篇文章,它说使用 awscli 创建 AWS IAM 策略可以消除这个错误。所以我删除了使用 Terraform 创建的策略,并使用 awscli 重新创建它。然而,它抛出了同样的错误错误。
下面是我的外部 dns yaml 文件。
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
# If you're using Amazon EKS with IAM Roles for Service Accounts, specify …Run Code Online (Sandbox Code Playgroud) 我一直在按照演练为我的应用程序创建一个 AWS ALB 入口控制器,该控制器也部署在 EKS 集群中。
一切似乎都很好,与演练类似的答案,但是在设置外部 DNS 时,我收到错误消息:
kubectl logs -f $(kubectl get po | egrep -o 'external-dns[A-Za-z0-9-]+')
Run Code Online (Sandbox Code Playgroud)
time="2020-02-20T16:21:57Z" level=error msg="services is forbidden: User \"system:serviceaccount:tick:external-dns\" 无法在 API 组中列出资源 \"services\" \" 在集群范围" time="2020-02-20T16:22:58Z" level=error msg="services is forbidden: User \"system:serviceaccount:tick:external-dns\" cannot list resource \"services \" 在 API 组中 \"\" 在集群范围内"
每一分钟。我确保所有的权限都是需要的,所以不应该是因为这个。
我从这里尝试了解决方案,但没有任何帮助,我找不到任何其他解决方案。
这个错误实际上意味着什么?我应该怎么做才能修复它?
更新编辑我的external-dns配置看起来像:
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::*my*account*id*:role/EKSRole
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: external-dns
rules:
- apiGroups: …Run Code Online (Sandbox Code Playgroud)