首页 > 解决方案 > Kubectl with Gitlab EKS Cluster Error: You must be logged in to the server (Unauthorized)

问题描述

我正在尝试在从第三方(Gitlab)创建的 EKS 集群中运行 kubectl,我需要使用 kubectl 访问此集群以安装指标服务器。

但是我不能用 kubectl 访问这个集群。我从文档中做了所有事情。我已经在集群的 IAM 角色中设置了信任关系,如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com",
        "AWS": [
          "arn:aws:sts::123456789012:assumed-role/AzureAD_AWS_Admin/me@mycompany.com",
          "arn:aws:iam::123456789012:root"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

而且我已经像上面的命令一样使用 external-id 测试了假设角色,并且一切都可以无缝运行!

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/eksServiceRole --external-id 2ffd8b2c3d8edaf02104a081af4b78d82f6e770f --role-session-name my_test

因此,我按照这些步骤担任角色并向我的用户授予权限(对于步骤:如果 cluster_creator 是 IAM 角色,则将指定用户添加到 ConfigMap)以使用 kubectl。

但是当我运行时,我kubectl get pods再次收到此消息:

error: You must be logged in to the server (Unauthorized)

标签: amazon-web-serviceskubernetesamazon-iamgitlab-ci-runneramazon-eks

解决方案


遵循 Gitlab 说明时,我遇到了同样的问题。本指南有助于:

在 aws-services -> IAM -> Roles -> 中选择您为 gitlab 定义的角色。

现在您可以 (1) 简单地将您的用户添加到受信任的实体,或者 (2) 仅临时更新它们并编辑 aws-auth 配置。


(1) 用您的账户 ID 添加另一个不带外部 ID 条件的语句:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::[account]:user/username"
      },
      "Action": "sts:AssumeRole"
    },
    {
      // Leave untouched
    }
  ]
}

(2) 通过删除 externalId 条件来编辑受信任实体并将其更改为您的用户帐户 ID(您使用它配置 aws-cli):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::[gitlabsaccount]:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "[externalId]"
        }
      }
    }
  ]
}

->

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::[account]:user/username"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

然后运行 ​​cli-command 以使用此角色重新配置您的 kubectl 集群访问:

aws --region [region] eks update-kubeconfig --name [cluster-name] --role-arn arn:aws:iam::[account]:role/[role-name]

最后,使用权限将自己添加到 aws-auth 配置映射:

kubectl edit -n kube-system configmap/aws-auth

然后添加您的帐户:

apiVersion: v1
data:
  mapRoles: |
    ...
  mapUsers: |
    ---
    - userarn: arn:aws:iam::[account]:user/[username]
      username: [username]
      groups:
      - system:masters
...

不要忘记将 gitlab-user 改回角色和外部条件。


推荐阅读