如何解决连接到 Amazon EKS API 服务器时出现的未经授权服务器错误?

上次更新时间:2020 年 1 月 20 日

我在使用 kubectl 命令连接到 Amazon Elastic Kubernetes Service (Amazon EKS) API 服务器时收到消息“错误:您必须登录服务器(未经授权)”。如何解决此错误?

简短描述

在您连接 Amazon EKS API 服务器之前,安装配置最新版本的 AWS 命令行界面 (AWS CLI)。

然后,集群管理员必须完成下面其中一个部分中的步骤:

  • 您是集群创建者
  • 您不是集群创建者

最后,收到错误的人必须完成您是收到此错误的用户或角色部分中的步骤。

解决方法

您是集群创建者

如果您是集群创建者,请完成 下面的步骤:

1.    要查看您的 AWS CLI 用户或角色的配置,请运行下面的命令:

$ aws sts get-caller-identity

输出将返回 AWS Identity and Access Management (IAM) 用户或角色的 Amazon 资源名称 (ARN)。请参阅以下示例:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

2.    确认 ARN 与集群创建者相匹配。

3.    使用下面的命令之一更新或生成 kubeconfig 文件。

以 IAM 用户的身份运行以下命令:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

注意:eks-cluster-name 替换为您的集群名称。将 aws-region 替换为您的 AWS 区域。

以 IAM 角色的身份运行以下命令:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole

注意:eks-cluster-name 替换为您的集群名称。将 aws-region 替换为您的 AWS 区域。

4.    要确认 kubeconfig 文件已更新,请运行以下命令:

$ kubectl config view --minify

5.    要确认您的 IAM 用户或角色已经过身份验证,请运行以下命令:

$ kubectl get svc

您应会收到与以下类似的输出:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

您不是集群创建者

如果您不是集群创建者,请完成以下步骤:

1.    要查看您的 AWS CLI 用户或角色的配置,请运行下面的命令:

$ aws sts get-caller-identity

输出将返回 IAM 用户或角色的 ARN。

2.    要求集群拥有者或管理员将您的 IAM 用户或角色添加到 aws-auth ConfigMap 中。

3.    要在文本编辑器中编辑 aws-auth ConfigMap,集群拥有者或管理员必须允许以下命令:

$ kubectl edit configmap aws-auth -n kube-system

4.    要添加 IAM 用户或 IAM 角色,请完成以下步骤之一。

添加 IAM 用户到 mapUsers。请参阅以下示例:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
    username: testuser
    groups:
      - system:masters

添加 IAM 角色到 mapRoles。请参阅以下示例:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole
    groups:
      - system:masters

注意:system:masters 组允许超级用户访问,以在任何资源上执行任何操作。有关更多信息,请参阅默认角色和角色绑定

您是收到错误的用户或角色

如果您收到错误,请完成以下步骤:

1.    要在更新 aws-auth ConfigMap 之后更新或生成 kubeconfig 文件,请运行以下命令之一。

以 IAM 用户的身份运行以下命令:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

注意:eks-cluster-name 替换为您的集群名称。将 aws-region 替换为您的 AWS 区域。

2.    以 IAM 角色的身份运行以下命令:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole

注意:eks-cluster-name 替换为您的集群名称。将 aws-region 替换为您的 AWS 区域。

3.    要确认 kubeconfig 文件已更新,请运行以下命令:

$ kubectl config view --minify

4.    要确认您的 IAM 用户或角色已经过身份验证,请运行以下命令:

$ kubectl get svc

您应会收到与以下类似的输出:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

注意:如果您仍然收到错误,请参阅使用 RBAC 授权了解问题排查指南。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?