16

从 ~empty AWS 账户开始,我正在尝试关注https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html

这意味着我创建了一个 VPS 堆栈,然后安装了 aws-iam-authenticator、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 访问我的集群?

4

5 回答 5

18
  1. docs中所述,AWS IAM 用户创建的 EKS 集群会自动获得system:master权限,并且足以开始kubectl工作。您需要使用此用户凭据 (AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY) 来访问集群。如果您没有创建特定的 IAM 用户来创建集群,那么您可能使用根 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 用户的创建。

于 2018-11-12T19:37:28.767 回答
2

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

于 2021-08-09T16:37:50.977 回答
2

在查看评论后,我认为您似乎:

  1. 已使用 root 用户创建集群。
  2. 然后创建一个 IAM 用户并为其创建 AWS 凭证 (AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)。
  3. 在您的设置中使用这些访问权限和密钥kubeconfig(无论如何 - 有多种方法)。

这是文档中描述的问题:

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

  • 无法获取令牌:AccessDenied:访问被拒绝
  • 错误:您必须登录到服务器(未经授权)
  • 错误:服务器没有资源类型“svc” <---你的情况

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

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

有关更多信息,请参阅管理集群的用户或 IAM 角色。如果您使用控制台创建集群,当您在集群上运行 kubectl 命令时,您必须确保相同的 IAM 用户凭证位于 AWS 开发工具包凭证链中。

这是错误的原因。

正如接受的答案所述 - 您需要进行编辑aws-auth才能管理集群的用户或 IAM 角色

于 2020-07-23T21:40:35.780 回答
1

在您的系统上设置 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安装说明进行操作,这应该可以工作。

于 2021-12-16T11:25:58.513 回答
-4

请使用您更新的密钥访问密钥 ID来连接 EKS 集群。

于 2020-10-10T04:28:38.457 回答