问题 kubectl error访问EKS群集时,您必须登录服务器(未授权)


我一直在尝试遵循EKS的入门指南。 当我试图调用kubectl获取服务时,我收到了消息:错误:您必须登录到服务器(未经授权) 这是我做的:
1.创建了EKS集群。
2.按如下方式创建配置文件:

apiVersion: v1
clusters:
- cluster:
    server: https://*********.yl4.us-west-2.eks.amazonaws.com
    certificate-authority-data: *********
  name: *********
contexts:
- context:
    cluster: *********
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: heptio-authenticator-aws
      args:
        - "token"
        - "-i"
        - "*********"
        - "-r"
        - "arn:aws:iam::*****:role/******"
  1. 下载并安装最新的aws cli
  2. Ran aws配置并设置我的IAM用户和区域的凭据为us-west-2
  3. 为IAM用户添加了针对EKS角色的sts:AssumeRole的策略,并将其设置为信任关系
  4. 设置kubectl以使用配置文件

当我运行heptio-authenticator-aws token -r arn时,我可以获得一个令牌:aws:iam :: **********:role / ********* -i my-cluster -ame 但是,当我尝试访问群集时,我一直收到错误:您必须登录到服务器(未经授权)

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


11290
2018-06-11 06:03


起源



答案:


创建Amazon EKS群集时,创建群集的IAM实体(用户或角色)将作为管理员添加到Kubernetes RBAC授权表中。最初,只有IAM用户可以使用kubectl调用Kubernetes API服务器。

EKS-文档

所以要添加对他人的访问权限 AWS 用户,首先 您必须编辑ConfigMap以将IAM用户或角色添加到Amazon EKS群集。

您可以通过执行以下命令来编辑ConfigMap文件: kubectl edit -n kube-system configmap/aws-auth之后,您将获得用于映射新用户的编辑器。

apiVersion: v1
data:
  mapRoles: |
    - rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
  mapUsers: |
    - userarn: arn:aws:iam::111122223333:user/ops-user
      username: ops-user
      groups:
        - system:masters
  mapAccounts: |
    - "111122223333"

记住 mapUsers 在哪里添加 OPS-用户  和...一起 mapAccounts 映射的标签 AWS Kubernetes群集上具有用户名的用户帐户。

但是,仅通过此操作就没有在RBAC中提供权限;您仍必须在群集中创建角色绑定以提供这些实体权限。

作为亚马逊文件(IAM-文档)声明您需要为ConfigMap中指定的用户在kubernetes集群上创建角色绑定。你可以通过执行fallowing命令来做到这一点(KUB-文档):

kubectl create clusterrolebinding ops-user-cluster-admin-binding --clusterrole=cluster-admin --user=ops-user

授予群集管理员权限 ClusterRole 给名为的用户 OPS-用户 整个集群。


9
2017-07-03 11:32





另外,请确保您的用户位于aws-auth k8s ConfigMap中:

https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html


4
2018-06-15 00:31



我使用了一个角色,我让用户担任该角色,因此无需添加IAM用户。但是,当我尝试设置具有相同权限的另一个用户时,它无法连接,即使它具有相同的假定角色权限 - Itay k


答案:


创建Amazon EKS群集时,创建群集的IAM实体(用户或角色)将作为管理员添加到Kubernetes RBAC授权表中。最初,只有IAM用户可以使用kubectl调用Kubernetes API服务器。

EKS-文档

所以要添加对他人的访问权限 AWS 用户,首先 您必须编辑ConfigMap以将IAM用户或角色添加到Amazon EKS群集。

您可以通过执行以下命令来编辑ConfigMap文件: kubectl edit -n kube-system configmap/aws-auth之后,您将获得用于映射新用户的编辑器。

apiVersion: v1
data:
  mapRoles: |
    - rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
  mapUsers: |
    - userarn: arn:aws:iam::111122223333:user/ops-user
      username: ops-user
      groups:
        - system:masters
  mapAccounts: |
    - "111122223333"

记住 mapUsers 在哪里添加 OPS-用户  和...一起 mapAccounts 映射的标签 AWS Kubernetes群集上具有用户名的用户帐户。

但是,仅通过此操作就没有在RBAC中提供权限;您仍必须在群集中创建角色绑定以提供这些实体权限。

作为亚马逊文件(IAM-文档)声明您需要为ConfigMap中指定的用户在kubernetes集群上创建角色绑定。你可以通过执行fallowing命令来做到这一点(KUB-文档):

kubectl create clusterrolebinding ops-user-cluster-admin-binding --clusterrole=cluster-admin --user=ops-user

授予群集管理员权限 ClusterRole 给名为的用户 OPS-用户 整个集群。


9
2017-07-03 11:32





另外,请确保您的用户位于aws-auth k8s ConfigMap中:

https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html


4
2018-06-15 00:31



我使用了一个角色,我让用户担任该角色,因此无需添加IAM用户。但是,当我尝试设置具有相同权限的另一个用户时,它无法连接,即使它具有相同的假定角色权限 - Itay k


我注释掉了配置文件的最后两行

# - "-r"
# - "arn:aws:iam::**********:role/**********"

它工作虽然我不知道为什么


1
2018-06-11 06:07



这是我现在唯一的解决方案,直到进一步调查。如果你已经想出来了,请发表你的答案。非常感激 - Diyoda_


您需要在通过AWS cli访问它的同一IAM配置文件下创建集群。

换句话说,里面 ~/.aws/credentials,访问kubectl的配置文件 必须完全匹配相同的IAM 用于创建集群的。

我的建议是使用AWS cli来创建集群,因为从GUI创建可能比有用更令人困惑。该 入门 指南是你起床和跑步的最佳选择。


1
2018-06-16 02:22



如果我希望其他用户能够部署到群集,该怎么办? - Itay k
@Itayk你可以编辑你的aws-auth configMap来添加用户和角色 docs.aws.amazon.com/eks/latest/userguide/add-user-role.html - Daniel Shalev
我希望其他用户承担我在ConfigMap中的角色。这样我就可以从IAM控制台处理它了。它没用。我将尝试使用CopnfigMap。谢谢。 - Itay k
这是不正确的 - 文档提供了通过EKS集群上的aws-auth configMap添加其他用户的机制。用户不需要与创建群集的用户相同。 - Mr.Budris
@ Mr.Budris Correct-我从未说过你不能作为另一个用户访问;我说如果您创建了EKS群集,则必须使用相同的IAM配置文件来访问该群集,以便向其添加新用户。如果无法访问群集,则无法添加configMap。 - DPS


我有同样的问题 。您可能正在使用root帐户。似乎阻止root帐户承担所需的角色。如果您使用过期密钥,有时可能会隐藏此错误。


1
2018-06-20 21:02



不,使用IAM帐户 - Itay k


我刚刚调试了这个问题。我有个问题。你是在公司的无线网络上运行吗?如果是,您是否可以创建EC2实例,然后测试您是否能够执行此操作 kubectl get svc

此外,尝试此命令是否有效 kubectl get svc ---insecure-skip-tls-verify


-1
2018-06-26 00:00