如果您使用 terraform 创建 EKS 集群,然后使用用于创建集群的相同凭证,但看到这些错误,则此解决方案可能会解决您的问题。
Your current IAM principal doesn’t have access to Kubernetes objects on this cluster.
This may be due to the current user or role not having Kubernetes RBAC permissions to describe cluster resources or not having an entry in the cluster’s auth config map
其中包含一个不太有用的链接,指向了解更多
kubectl
the server has asked for the client to provide credentials
eksctl
Error: getting auth <object>>: Unauthorized
确保集群 API 端点可访问。
如果
kubectl
返回如下错误:
"https://XXXXX.gr7.us-east-1.eks.amazonaws.com/api?timeout=32s": dial tcp 10.0.2.234:443: i/o timeout
...那么阻止您连接到 API 的一种可能性是 API 服务器端点访问。您可以使用 CIDR 访问列表将其设置为public,或者必须从 VPC 内部访问它。
请参阅
cluster_endpoint_public_access
和相关设置此处。
确保集群创建者具有管理员权限。
如果
kubectl
返回如下错误,这可能是您的问题:
the server has asked for the client to provide credentials
这是一个很大的“陷阱”,因为当使用
eksctl
创建集群时,它会为你处理这个问题。但是,使用 Terraform 创建 EKS 集群时,此设置的默认值为 false
。您需要主动将其配置为true
。
enable_cluster_creator_admin_permissions = true
- 更多信息
这里
我创建了这个问题和答案,因为当我遇到这个问题并研究它时,所有答案似乎都假设集群是通过
eksctl
创建的,并且集群创建者已经拥有管理员权限。
我找到的答案都假设您实际上仍然可以发出
kubectl
和 eksctl
命令。如果您 not 指定了 enable_cluster_creator_admin_permissions = true
,则 kubectl
将 not 工作,并且许多 eksctl
命令将不起作用,并且会失败并出现如下错误:
Error: getting auth ConfigMap: Unauthorized
请注意,某些
eksctl
命令将起作用,因为它们依赖于 Amazon API 而不是集群 API。 例如,这些仍然有效
aws eks --region <region>> update-kubeconfig --name <cluster_name>
eksctl get cluster --name <cluster_name>
如果您使用
enable_cluster_creator_admin_permissions
的 false
创建 EKS 集群,在我看来,没有办法重新配置您的集群以使其可用。
system:masters
将用户添加到 eksctl create iamidentitymapping
的权限。kubectl
,也无法通过 AWS 控制台访问任何资源(集群、工作负载、配置、服务等)。所以我剩下的问题是:
enable_cluster_creator_admin_permissions = false
创建 EKS 集群的用例是什么?enable_cluster_creator_admin_permissions
设置,为什么不默认为 true
?