总是出错:您必须登录到服务器(未经授权)EKS

时间:2019-11-01 11:37:58

标签: kubernetes kubectl amazon-eks eks aws-iam-authenticator

我目前正在使用AWS EKS 但是尝试运行error: You must be logged in to the server (Unauthorized)命令时,我总是得到kubectl cluster-info

我阅读了许多AWS文档,并研究了许多面临相同问题的类似问题。不幸的是,他们都没有解决我的问题。

所以,这就是我所做的

  1. 安装所有必需的软件包
  2. 创建用户以访问 aws-cli 名称crop-portal
  3. 为EKS名称crop-cluster创建角色
  4. 通过AWS控制台使用角色crop-cluster名称crop-cluster(集群和角色具有相同的名称)创建EKS集群
  5. 为用户crop-portal运行AWS配置
  6. 运行aws eks update-kubeconfig --name crop-cluster以更新kube配置
  7. 运行aws sts assume-role --role-arn crop-cluster-arn --role-session-name eks-access
  8. accessKey secreyKey sessionToken 复制到环境变量 AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY 和相应的 AWS_SESSION_TOKEN
  9. 运行aws sts get-caller-indentity,现在结果表明它已经使用了角色
{
    "UserId": "AROAXWZGX5HOBZPVGAUKC:botocore-session-1572604810",
    "Account": "529972849116",
    "Arn": "arn:aws:sts::529972849116:assumed-role/crop-cluster/botocore-session-1572604810"
}
  1. 运行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创建对我来说都是相同的。

请有人帮助:(

1 个答案:

答案 0 :(得分:0)

我将尝试在此处添加更多信息,希望在设置对EKS群集的访问权限时会有所帮助。

当我们通过CloudFormation / CLI / EKSCTL通过任何方法创建EKS集群时,创建集群的IAM角色/用户将自动绑定到默认的kubernetes RBAC API组“ system:masters”(https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-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承担角色-role-arn作物-集群-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”的权限

注意: 有关更多详细信息,我们也可以参考有关此问题的答案Getting error "An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied" after setting up EKS cluster