上次更新时间:2020 年 12 月 17 日
我在使用 kubectl 命令连接到 Amazon Elastic Kubernetes Service (Amazon EKS) API 服务器时收到消息“错误:您必须登录服务器(未经授权)”。
简短描述在您连接 Amazon EKS API 服务器之前,安装并配置最新版本的 AWS 命令行界面 (AWS CLI)。
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 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 组允许超级用户访问,以在任何资源上执行任何操作。有关更多信息,请参阅 Kubernetes 网站上的默认角色和角色绑定。
您是收到错误的用户或角色如果您收到错误,请完成以下步骤:
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
注意: 如果您仍然收到错误,请参阅 Kubernetes 网站上的 使用 RBAC 授权了解排查指南。