如何让kubectl登录到AWS EKS集群



从一个空的AWS帐户开始,我正在努力https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html

因此,这意味着我创建了一个VPS堆栈,然后安装了aws-iam验证器、awscli和kubectl,然后直接创建了具有编程访问权限和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"

无论如何,我继续创建我的工作节点堆栈,现在我已经走到了死胡同:

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)

aws-iam-authenticator token -i <my cluster name>似乎运行良好。

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

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

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

我不确定如何传递aws-iam-authenticator:的凭据

  • 如果您有~/.aws/credentialsaws_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 ...将使用生成的包含aws-iam-authenticator token -i cluster_name命令的~/.kube/configaws-iam-authenticator使用环境变量或~/.aws/credentials为您提供令牌。

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

以下是我使用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

奖金,使用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".

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

看完评论后,我想你似乎:

  1. 已经使用root用户创建了集群
  2. 然后创建IAM用户并为其创建AWS凭据(AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)。
  3. kubeconfig设置中使用这些访问权限和密钥(无所谓,有多种方法)

这是文档中描述的问题:

如果在运行kubectl时收到以下错误之一命令,则您的kubectl没有为Amazon EKS正确配置或者您正在使用的IAM用户或角色凭据未映射到在您的Amazon EKS中拥有足够权限的Kubernetes RBAC用户集群

  • 无法获取令牌:拒绝访问:拒绝访问
  • 错误:您必须登录到服务器(未经授权)
  • 错误:服务器没有资源类型";svc"><---您的案例

这可能是因为集群是用一组AWS 凭据(来自IAM用户或角色)创建的,而kubectl使用的是一组不同的凭据

创建Amazon EKS集群时,IAM实体(用户或角色)创建集群的已添加到Kubernetes RBAC授权表作为管理员(具有system:masters权限)
最初,只有IAM用户才能调用Kubernetes API服务器使用kubectl。

有关详细信息,请参阅管理用户或IAM集群的角色。如果使用控制台创建集群,您必须确保AWS SDK中有相同的IAM用户凭据凭据链当您在簇

这就是错误的原因。

正如已接受的答案所述,您需要编辑aws-auth,以便管理集群的用户或IAM角色。

适用于在aws-cli中使用多个profiles的用户。以下是我的设置:

~/.aws/credentials文件:

1 [prod]
2 aws_access_key_id=****
3 aws_secret_access_key=****
4 region=****
11 [dev]
12 aws_access_key_id=****
13 aws_secret_access_key=****

我有两个aws配置文件proddev

使用为prod和dev集群生成kubeconfig

$ aws eks --region <region> update-kubeconfig --name <cluster_name> --profile dev
$ aws eks --region <region> update-kubeconfig --name <cluster_name> --profile prod

该配置文件元数据也存储在配置文件(~/.kube/config)中。

使用kubectx查看/更改当前集群,使用kubens切换集群内的命名空间。

$ kubectx
arn:aws:eks:region:accontid:cluster/dev
arn:aws:eks:region:accontid:cluster/prod

切换到dev集群。

$ kubectx arn:aws:eks:region:accountid:cluster/dev
Switched to context "arn:aws:eks:region:accountid:cluster/dev".

类似地,我们可以使用kubens查看/更改当前集群中的命名空间。

一旦您在系统上设置了aws配置,请检查当前身份以验证您是否使用了对Amazon EKS集群具有权限的正确凭据:

aws sts get-caller-identity

之后使用:

aws eks --region region update-kubeconfig --name cluster_name

这将在您的主路径上创建kubeconfig,所需的kubernetes API服务器url位于$HOME/.kube/config

之后,您可以按照kubectl的说明进行安装,这应该会起作用。

请使用您更新的密钥&用于与EKS集群连接的访问密钥id

相关内容

  • 没有找到相关文章

最新更新