我目前正在使用 AWS EKS 但当我尝试运行
error: You must be logged in to the server (Unauthorized)
命令时,我总是得到 kubectl cluster-info
。
我读过很多AWS文档,也看过很多面临同样问题的类似问题。不幸的是,他们都没有解决我的问题。
所以,这就是我所做的
crop-portal
crop-cluster
crop-cluster
名称crop-cluster
创建EKS集群(集群和角色具有相同的名称)crop-portal
aws eks update-kubeconfig --name crop-cluster
更新 kube 配置aws sts assume-role --role-arn crop-cluster-arn --role-session-name eks-access
aws sts get-caller-indentity
,现在结果表明它已经使用了假设角色{
"UserId": "AROAXWZGX5HOBZPVGAUKC:botocore-session-1572604810",
"Account": "529972849116",
"Arn": "arn:aws:sts::529972849116:assumed-role/crop-cluster/botocore-session-1572604810"
}
kubectl cluster
并且始终get error: You must be logged in to the server (Unauthorized)
当我运行
aws-iam-authenticator token -i crop-cluster
时,它给了我令牌并且
当我运行aws-iam-authenticator verify -t token -i crop-portal
时,它也通过了
&{ARN:arn:aws:sts::529972849116:assumed-role/crop-cluster/1572605554603576170 CanonicalARN:arn:aws:iam::529972849116:role/crop-cluster AccountID:529972849116 UserID:AROAXWZGX5HOBZPVGAUKC SessionName:1572605554603576170}
我不知道出了什么问题或者我错过了什么。我非常努力地让它发挥作用,但我真的不知道之后该怎么办。 有些人建议使用 awscli 而不是 GUI 创建集群。我尝试了两种方法,但都不起作用。使用 awscli 或 GUI 创建对我来说都是一样的。
请有人帮忙:(
我将尝试在此处添加更多信息,希望它在设置对 EKS 集群的访问时会更有帮助。
当我们通过 CloudFormation/CLI/EKSCTL 通过任何方法创建 EKS 集群时,创建集群的 IAM 角色/用户将自动绑定到默认的 kubernetes RBAC API 组“system:masters” (https://kubernetes.io/ docs/reference/access-authn-authz/rbac/#user-faceing-roles),这样集群的创建者将获得集群的管理员访问权限。
要验证 EKS 集群的角色或用户,我们可以在 cloudtrail 上搜索 CreateCluster Api 调用,它会告诉我们集群的创建者。
现在,通常如果我们像您一样使用角色来创建集群(例如“crop-cluster”)。在使用 kubectl 进行任何 api 调用之前,我们必须确保我们承担此角色,最简单的方法是在 kubeconfig 文件中设置此角色。我们可以通过从终端运行以下命令轻松地做到这一点。
aws eks --region region-code update-kubeconfig --name cluster_name --role-arn crop-cluster-arn
现在,如果我们运行上述命令,那么它将在 kube 配置文件中使用 -r 标志设置角色,这样我们就告诉 aws/aws-iam-authenticator 在进行任何 api 调用之前,它应该首先假定这样我们就不必使用“aws sts Should-role --role-arn Crop-cluster-arn --role-session-name eks-access”通过 cli 手动承担该角色。
正确设置 kubeconfig 文件后,请确保使用 IAM 用户凭证“crop-portal”正确配置 CLI。我们可以通过运行
"aws sts get-caller-identity"
命令来确认这一点,输出应在“Arn”部分中向我们显示用户 ARN,如下所示。
$ aws sts get-caller-identity
{
"Account": "xxxxxxxxxxxxx",
"UserId": "xxxxxxxxxxxxxx",
"Arn": "arn:aws:iam::xxxxxxxxxxx:user/crop-portal"
}
完成后,您应该可以直接执行 kubectl 命令,没有任何问题。
注意:我假设用户“crop-portal”确实有足够的权限来担任“crop-cluster”角色
注意: 有关更多详细信息,我们也可以参考此问题的答案设置 EKS 集群后出现错误“调用 AssumeRole 操作时发生错误(AccessDenied):访问被拒绝”