从一个空的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访问集群?
- 如文档中所述,AWS IAM用户创建的EKS集群自动接收
system:master
权限,这足以使kubectl
工作。您需要使用此用户凭据(AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)来访问集群。如果您没有创建特定的IAM用户来创建集群,那么您可能会使用根AWS帐户创建它。在这种情况下,您可以使用根用户凭据(为根用户创建访问密钥) - 主要的魔力在于集群中的
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 ...
将使用生成的包含aws-iam-authenticator token -i cluster_name
命令的~/.kube/config
。aws-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
看完评论后,我想你似乎:
- 已经使用root用户创建了集群
- 然后创建IAM用户并为其创建AWS凭据(
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)。 - 在
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配置文件prod
和dev
。
使用为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。