如何让kubectl登录AWS EKS集群?

sbs*_*sbs 7 amazon-web-services kubernetes kubectl amazon-eks

从一个空的AWS账户开始,我试图关注https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html

这意味着我创建了一个VPS堆栈,然后安装了aws-iam-authenticator,awscli和kubectl,然后创建了一个具有Programmatic访问权限且直接连接了AmazonEKSAdminPolicy的IAM用户.

然后我使用该网站创建了我的EKS集群,并用于aws configure设置我的IAM用户的访问密钥和秘密.

aws eks update-kubeconfig --name wr-eks-cluster 工作得很好,但是:

kubectl get svc
error: the server doesn't have a resource type "svc"
Run Code Online (Sandbox Code Playgroud)

无论如何我继续创建我的工作节点堆栈,现在我处于一个死胡同:

kubectl apply -f aws-auth-cm.yaml
error: You must be logged in to the server (the server has asked for the client to provide credentials)
Run Code Online (Sandbox Code Playgroud)

aws-iam-authenticator token -i <my cluster name> 似乎工作正常.

我似乎缺少的是,当您创建群集时,您指定了IAM角色,但是当您创建用户时(根据指南),您附加了一个策略.我的用户应该如何访问此群集?

或者最终,如何使用kubectl继续访问我的集群?

son*_*207 14

这是我使用aws-cli 的步骤


$ export AWS_ACCESS_KEY_ID="something"
$ export AWS_SECRET_ACCESS_KEY="something"
$ export AWS_SESSION_TOKEN="something"

$ aws eks update-kubeconfig \
  --region us-west-2 \
  --name my-cluster

>> Added new context arn:aws:eks:us-west-2:#########:cluster/my-cluster to /home/john/.kube/config

Run Code Online (Sandbox Code Playgroud)

奖励,使用kubectx切换 kubectl 上下文

$ kubectx 

>> arn:aws:eks:us-west-2:#########:cluster/my-cluster-two     arn:aws:eks:us-east-1:#####:cluster/my-cluster  

$ kubectx arn:aws:eks:us-east-1:#####:cluster/my-cluster


>> Switched to context "arn:aws:eks:us-east-1:#####:cluster/my-cluster".

Run Code Online (Sandbox Code Playgroud)

参考: https: //docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html


Iva*_*ita 11

  1. 正如文档中所提到,AWS IAM用户创建的EKS集群自动接收system:master权限,并且足以使其kubectl正常工作.您需要使用此用户凭据(AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)来访问群集.如果您没有创建特定的IAM用户来创建集群,那么您可能使用root AWS账户创建了它.在这种情况下,您可以使用root用户凭据(为Root用户创建访问密钥).
  2. 主要的魔力在于aws-auth集群中的ConfigMap - 它包含IAM实体 - > kubernetes ServiceAccount映射.

我不确定你如何传递凭证aws-iam-authenticator:

  • 如果你有~/.aws/credentials,aws_profile_of_eks_iam_creator那么你可以试试$ AWS_PROFILE=aws_profile_of_eks_iam_creator kubectl get all --all-namespaces
  • 此外,您可以使用环境变量 $ AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY AWS_DEFAULT_REGION=your-region-1 kubectl get all --all-namespaces

它们都应该工作,因为kubectl ...将使用~/.kube/config包含aws-iam-authenticator token -i cluster_name命令的生成.aws-iam-authenticator使用环境变量或~/.aws/credentials为您提供令牌.

此外,这个答案可能有助于理解第一个EKS用户创建.