【问题标题】:Passing EKS token to other kubectl cli commands将 EKS 令牌传递给其他 kubectl cli 命令
【发布时间】:2019-05-20 19:51:44
【问题描述】:

假设我使用以下方式获得了 EKS 令牌:

aws eks get-token --region us-west-2 --cluster-name eks1

结果如下:

{"status": {"token": "k8s-aws-v1.aHR0.....Ni"}, "kind": "ExecCredential", "apiVersion": "client.authentication.k8s.io/v1alpha1", "spec": {}}

如何将令牌传递给其他 cli 命令?类似:

kubectl get svc --token="$token-from-above"

没有令牌,我不断收到此错误:

错误:您必须登录到服务器(未经授权)

但是我的 AWS 信用是存在的,这就是我可以获得令牌的原因。我认为它与aws-iam-authenticator token -i eks1生成的令牌相同

我试过运行这个:

export AWS_SESSION_TOKEN="$token-from-above"
kubectl get svc

这也不起作用,同样的错误。

【问题讨论】:

  • 显然我在使用之前从JSON中提取了令牌,那部分是正确的,我仔细检查了
  • AWS 令牌可能不适用于 kubectl 命令,而仅适用于 aws 命令?

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


【解决方案1】:

@MrCholo,您确定将您的KUBECONFIG 配置为使用 exec 凭证流吗?使用 EKS 和/或身份验证器,您无需生成令牌然后将其注入每个请求 kubectl 有一种 exec 为您提供二进制文件的方法。我们已将所有这些内容融入到 update-kubeconfig cli 命令中,您可以看到 https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl

但它看起来是这样的:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: XXX
    server: XXX
  name: XXX
contexts:
- context:
    cluster: XXX
    user: XXX
  name: XXX
current-context: XXX
kind: Config
preferences: {}
users:
- name: XXX
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - eks
      - get-token
      - --region us-west-2 
      - --cluster-name eks1
      command: aws
      env: null

您需要确保至少拥有 1.10+ kubectl 客户端版本,您可以使用 kubectl version --client --short 进行检查。

需要注意的其他事项,此令牌不是 AWS IAM 令牌,它是 API 服务器用来验证用户身份的生成和签名 URL。底层请求实际上是aws sts get-caller-identity,但我们并没有完成请求,我们只是对URL进行签名然后base64编码并封装成JSON提交给api服务器。一旦它被传递到 api 服务器,令牌就会被发送到控制平面中的身份验证器 Web 服务器,该服务器会解码然后“完成”STS 调用以返回你是谁,然后它会使用它来验证你是否在用户白名单中.

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    确保您没有配置任何这样的环境变量:

    unset AWS_ACCESS_KEY_ID
    unset AWS_SECRET_ACCESS_KEY
    

    大多数(如果不是全部)aws 工具将优先考虑这些配置。例如,当我尝试使用 AWS_PROFILE 时,我被这个愚弄了。

    【讨论】:

    • 只是好奇为什么会这样?
    • @MrCholo 刚刚用一些额外的信息更新了答案。希望这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2016-06-22
    • 2019-09-21
    • 2023-04-02
    • 1970-01-01
    • 2012-04-15
    • 2017-10-03
    相关资源
    最近更新 更多