kubectl : 错误: 您必须登录到服务器(未经授权)



我已经创建了kops集群,并在登录到集群时出现以下错误。

错误日志 :

*****INFO! KUBECONFIG env var set to /home/user/scripts/kube/kubeconfig.yaml
INFO! Testing kubectl connection....
error: You must be logged in to the server (Unauthorized)
ERROR! Test Failed, AWS role might not be recongized by cluster*****

使用脚本进行 IAM 身份验证,并在连接之前以正确的角色登录到服务器。 我可以登录到同一环境中的其他服务器。尝试使用差异 K8s 版本和差异配置。

KUBECONFIG 没有任何问题,并且与其他集群一样具有相同的条目和令牌详细信息。 我可以看到带有"aws-iam-authenticator"命令的令牌

浏览了大部分文章,没有帮助

使用 kops vs1.19 时,您需要添加--admin--user来更新您的 Kubernetes 集群,每次注销服务器时,您都必须导出集群名称和存储桶,然后再次更新集群。 这将起作用。

这似乎是 AWS 授权问题。在创建集群时,只有创建集群的 IAM 用户对其具有管理员权限,因此您可能需要先添加自己的 IAM 用户。

1-首先验证所有命令中隐式使用的IAM用户身份:aws sts get-caller-identity

如果您的 aws-cli 设置正确,您将获得类似于以下内容的输出:

{
"UserId": "ABCDEFGHIJK",
"Account": "12344455555",
"Arn": "arn:aws:iam::1234577777:user/Toto"
}

我们将Account中的值称为步骤 3 中的YOUR_AWS_ACCOUNT_ID。(在此示例中YOUR_AWS_ACCOUNT_ID="12344455555"

2-拥有此身份后,必须将其添加到 AWS 角色绑定以获取 EKS 权限。

3-您需要编辑kubectl使用的ConfigMap文件以添加您的用户kubectl edit -n kube-system configmap/aws-auth在打开的编辑器中,创建一个要用于使用集群YOUR_USER_NAME引用自己的用户名(为简单起见,您可以使用与您的 AWS 用户名相同的用户名,示例Toto在步骤 2 中(,您将在步骤 4 中需要它,并使用 AWS 账户 ID(不要忘记保留引号 "(,您在步骤 1YOUR_AWS_ACCOUNT_ID的标识信息中找到了它,如下第mapUsersmapAccounts节。

mapUsers: |
- userarn: arn:aws:iam::111122223333:user/ops-user
username: YOUR_USER_NAME
groups:
- system:masters
mapAccounts: |
- "YOUR_AWS_ACCOUNT_ID"

4-最后,您需要在 kubernetes 集群上为 ConfigMap 中指定的用户创建一个角色绑定

kubectl create clusterrolebinding cluster-admin-binding 
--clusterrole cluster-admin 
--user YOUR_USER_NAME

最新更新