用户无法使用 kubectl 登录 EKS 集群

User cannot log into EKS Cluster using kubectl

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

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

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

我曾使用 user1 的 AWS_ACCESS_KEY_IDAWS_SECRET_KEY_ID 从 EC2 中配置 AWS Cli实例以便使用 kubectl 连接到集群。

我 运行 以下命令以用户 1 身份连接到集群:

1. aws sts get-caller-identity
2。 aws eks update-kubeconfig --name trojanwall --region ap-south-1

我能够以用户 1 的身份执行 EKS 集群中的每一项操作。

但是,我现在创建了一个名为“user2”的新用户,并且我已经替换了当前的 AWS_ACCESS_KEY_IDAWS_SECRET_KEY_ID 与user2的相同。执行相同的步骤,当我尝试 运行 'kubectl get pods' 时,出现以下错误:

error: You must be logged in to the server (Unauthorized)

运行ning kubectl describe configmap -n kube-system aws-auth as user1 后的结果:

Name:         aws-auth
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>

Data
====
mapRoles:
----
- groups:
  - system:bootstrappers
  - system:nodes
  rolearn: arn:aws:iam::XXXXXXXXXXXX:role/AWS-EC2-Role
  username: system:node:{{EC2PrivateDNSName}}


BinaryData
====

Events:  <none>

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

当您创建 EKS 集群时,只有创建集群的用户才能访问它。为了允许其他人访问集群,您需要将该用户添加到 aws-auth。为此,在您的 data 部分中,添加

mapUsers: |
  - userarn: arn:was:iam::<your-account-id>:user/<your-username>
    username: <your-username>
    groups:
      - systems:masters

您可以使用不同的组,具体取决于您要授予该用户的权限。

如果您的机器上还没有配置映射:

  1. 下载配置图curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml
  2. 将默认值替换为您的值(角色 arn、用户名、帐户 ID...)
  3. 如上所述添加 mapUsers 部分
  4. 从终端执行kubectl apply -f aws-auth-cm.yaml

您也可以按照 documentation 中的步骤(更详细)