【问题标题】:Cannot create namespaces in AWS Elastic Kubernetes Service - Forbidden无法在 AWS Elastic Kubernetes Service 中创建命名空间 - 禁止
【发布时间】:2022-01-26 13:43:56
【问题描述】:

我正在尝试在 AWS Elastic Kubernetes Service(EKS) 中托管应用程序。我已经使用 AWS 控制台配置了 EKS 集群。配置节点组并将节点添加到 EKS 集群,一切正常。

为了连接到集群,我启动了一个 EC2 实例 (Centos7) 并配置了以下内容:

1.安装了 docker、kubeadm、kubelet 和 kubectl。
2.已安装并配置 AWS Cli V2。

为了向 EKS 集群进行身份验证,我已将 IAM 角色附加到具有以下 AWS 托管策略的 EC2 实例:

1. AmazonEKSClusterPolicy
2. AmazonEKSWorkerNodePolicy
3. AmazonEC2ContainerRegistryReadOnly
4. AmazonEKS_CNI_Policy
5. AmazonElasticContainerRegistryPublicReadOnly
6. EC2InstanceProfileForImageBuilderECRContainerBuilds
7. AmazonElasticContainerRegistryPublicFullAccess
8. AWSAppRunnerServicePolicyForECRAccess
9. AmazonElasticContainerRegistryPublicPowerUser
10. SecretsManagerReadWrite

之后,我运行以下命令连接到 EKS 集群:
1. aws sts get-caller-identity
2. aws eks update-kubeconfig --name eks-cluster --region ap-south-1

当我运行 kubectl cluster-infokubectl get nodes 时,我得到了以下信息:

但是,当我尝试运行 kubectl get namespaces 时,我收到以下错误:

当我尝试在 EKS 集群中创建命名空间时,我遇到了同样的错误。 不知道我在这里缺少什么。

来自服务器的错误(禁止):创建“namespace.yml”时出错:命名空间被禁止:用户“system:node:ip-172-31-43-129.ap-south-1.compute.internal”不能在集群范围内的 API 组“”中创建资源“命名空间”

作为替代方案,我尝试在 IAM 中创建具有管理权限的用户。创建了 AWS_ACCESS_KEYAWS_SECRET_KEY_ID。使用 aws configure 在 EC2 实例中配置凭据。

运行以下命令:
1. aws sts get-caller-identity
2. aws eks update-kubeconfig --name eks-cluster --region ap-south-1
3. aws eks update-kubeconfig --name eks-cluster --region ap-south-1 --role-arn arn:aws:iam::XXXXXXXXXXXX:role/EKS-Cluster-Role

运行kubectl cluster-info --kubeconfig /home/centos/.kube/config后出现如下错误:

调用 AssumeRole 操作时发生错误 (AccessDenied):用户:arn:aws:iam::XXXXXXXXXXXX:user/XXXXX 无权执行:sts:AssumeRole on resource:arn:aws:iam::XXXXXXXXXXXX:角色/EKS-集群-角色

有谁知道如何解决这个问题??

【问题讨论】:

  • 谁创建了集群?同一用户可以将您添加到 eks 中的集群中

标签: amazon-web-services kubernetes amazon-iam kubectl amazon-eks


【解决方案1】:

检查您的集群角色绑定或用户对 EKS 集群的访问权限

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eks-console-dashboard-full-access-clusterrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - namespaces
  - pods
  verbs:
  - get
  - list
- apiGroups:
  - apps
  resources:
  - deployments
  - daemonsets
  - statefulsets
  - replicasets
  verbs:
  - get
  - list
- apiGroups:
  - batch
  resources:
  - jobs
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-console-dashboard-full-access-binding
subjects:
- kind: Group
  name: eks-console-dashboard-full-access-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: eks-console-dashboard-full-access-clusterrole
  apiGroup: rbac.authorization.k8s.io

检查集群内具有正确用户 IAM 映射的配置映射

kubectl get configmap aws-auth -n kube-system -o yaml

阅读更多:https://aws.amazon.com/premiumsupport/knowledge-center/eks-kubernetes-object-access-error/

【讨论】:

  • 我无法运行命令:kubectl get clusterrolebinding。错误:来自服务器的错误(禁止):clusterrolebindings.rbac.authorization.k8s.io 被禁止:用户“system:node:ip-172-31-43-129.ap-south-1.compute.internal”无法在集群范围内的 API 组“rbac.authorization.k8s.io”中列出资源“clusterrolebindings”。
  • 检查 configmap 并更新用户详细信息
  • 我也用其他发现更新了这个问题。你能看看吗?
  • 我也无法获取配置图。
【解决方案2】:

我找到了解决这个问题的方法。早些时候,我使用我的 AWS 账户的根用户创建了 AWS EKS 集群(认为这可能是最初的问题)。这一次,我使用具有管理员权限的 IAM 用户创建了 EKS 集群,在集群中创建了一个节点组并添加了一个工作节点。

接下来,我使用 Centos EC2 实例中 IAM 用户的 AWS_ACCESS_KEY_IDAWS_SECRET_KEY_ID 配置 AWS Cli。

和之前一样,我登录到 Centos EC2 实例并运行以下命令:

1. aws sts get-caller-identity
2. aws eks describe-cluster --name eks-cluster --region ap-south-1 --query cluster.status(检查集群状态)
3. aws eks update-kubeconfig --name eks-cluster --region ap-south-1

在此之后,当我运行 kubectl get pods,kubectl get namespaces,就没有更多问题了。事实上,我也可以部署到集群中。

因此,作为结论,我认为我们不应该在 AWS 中使用 root 用户创建 EKS 集群。

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2021-12-06
    • 2021-02-28
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2020-09-19
    相关资源
    最近更新 更多