提问者:小点点

无法在AWS Elastic Kubernetes服务中创建名称空间-禁止


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

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

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

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

1.亚马逊EKSClusterPolicy
2.亚马逊EKSWorkerNodePolicy
3.亚马逊EC2Container注册只读
4.AmazonEKS_CNI_Policy
5.亚马逊ElasticContainer注册公开只读
6. EC2InstanceProfileForImageBuilderECRContainerBuilds
7.亚马逊ElasticContainer注册公开完全访问
8.亚马逊ElasticContainerServstryPublicFullAccess
9.亚马逊ElasticContainer注册公开用户
10.秘书管理器读写

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

当我运行kubectl cluster-info和kubectl get nodes时,我得到了以下结果:

然而,当我尝试运行kubectl get namespaces时,我得到了以下错误:

当我试图在EKS集群中创建名称空间时,我得到了同样的错误。不知道我错过了什么。

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

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

运行以下命令:
1。aws-sts获取呼叫者身份
2。aws-eks更新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::XXXXXXXXXXXXX:role/eks群集角色

运行 kubectl cluster-info --kubeconfig /home/centos/.kube/config 后,我收到以下错误:

调用AssumeRole操作时发生错误(拒绝访问):用户:arn:aws:iam::XXXXXXXXXXXXXXXX:用户/XXXXXX无权对资源:arn:aws:iam::XXXXXXXXXXXXXXXXXX:角色/EKS群集角色执行:sts:AsseumeRole

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


共2个答案

匿名用户

检查您的群集角色绑定或用户对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/

匿名用户

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

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

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

1. AWS STS 获取调用方身份 2. AWS EKS 描述集群 --名称 eks-集群 --
区域 ap-south-1 --查询集群状态 (检查集群的状态)
3. AWS eks update-kubeconfig --name eks-cluster --region ap-south-1

在这之后,当我运行kubectl get pods、kubectl get namespaces时,再也没有问题了。事实上,我也能够部署到集群中。

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

谢谢!