我一直在尝试遵循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/******"
- 下载并安装最新的aws cli
- Ran aws配置并设置我的IAM用户和区域的凭据为us-west-2
- 为IAM用户添加了针对EKS角色的sts:AssumeRole的策略,并将其设置为信任关系
- 设置kubectl以使用配置文件
当我运行heptio-authenticator-aws token -r arn时,我可以获得一个令牌:aws:iam :: **********:role / ********* -i my-cluster -ame
但是,当我尝试访问群集时,我一直收到错误:您必须登录到服务器(未经授权)
知道如何解决这个问题吗?
创建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-用户 整个集群。
创建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-用户 整个集群。
我注释掉了配置文件的最后两行
# - "-r"
# - "arn:aws:iam::**********:role/**********"
它工作虽然我不知道为什么
您需要在通过AWS cli访问它的同一IAM配置文件下创建集群。
换句话说,里面 ~/.aws/credentials,访问kubectl的配置文件 必须完全匹配相同的IAM 用于创建集群的。
我的建议是使用AWS cli来创建集群,因为从GUI创建可能比有用更令人困惑。该 入门 指南是你起床和跑步的最佳选择。
我有同样的问题 。您可能正在使用root帐户。似乎阻止root帐户承担所需的角色。如果您使用过期密钥,有时可能会隐藏此错误。
我刚刚调试了这个问题。我有个问题。你是在公司的无线网络上运行吗?如果是,您是否可以创建EC2实例,然后测试您是否能够执行此操作 kubectl get svc?
此外,尝试此命令是否有效
kubectl get svc ---insecure-skip-tls-verify