1

我已经使用适当的 configMap 部署了一个测试 EKS 集群,并且 SSO 的用户可以通过导出会话凭据(AWS_ACCESS_KEY_ID、SECRET_ACCESS_KEY_ID、AWS_SESSION_TOKEN 等)并在他们的终端中安装 aws-iam-authenticator 客户端来访问集群. 当用户尝试使用aws sso存储在~/.aws/config使用 aws-iam-authenticator 中的配置文件时,就会出现问题。运行任何命令时收到的错误kubectl如下:

 $ kubectl get all
    could not get token: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

我已经在我的本地机器(AWS CLI v2)上对此进行了测试,但没有取得任何成功。我已经导出了在文件中找到的 AWS 配置~/.aws/config文件,export AWS_PROFILE=User1并且aws sts get-caller-identity正确运行显示了正在导出的配置文件。我已经在多个命名配置文件之间进行了切换,并且每个配置文件都获得了正确的身份和权限,但是,在运行任何kubectl命令时,我都会收到上述错误。我也尝试过符号链接config->credentials但没有运气。唯一可行的方法是将 access_key、secret_key 和 session_token 导出到环境变量。

我想我可以忍受必须粘贴来自 AWS SSO 的动态凭据,但我需要解决解决方案不会让我放弃:(。我正在关注这个 github问题中找到的线程,但没有运气。我设置的 kube 配置文件是 AWS 文档中指定的。

我怀疑aws-iam-authenticator服务器部署可能有问题,但 pod 日志中没有显示任何内容。这是我正确遵循的工具 github页面的片段think,但由于我忘记的原因,我确实跳过了第 3 步:

Kubernetes API 使用令牌身份验证 Webhook 与适用于 Kubernetes 的 AWS IAM Authenticator 集成。当您运行 aws-iam-authenticator 服务器时,它将生成一个 webhook 配置文件并将其保存到主机文件系统中。您需要在 API 服务器配置中添加一个附加标志:

Kube 配置文件

apiVersion: v1
clusters:
- cluster:
    server: <endpoint-url>
    certificate-authority-data: <base64-encoded-ca-cert>
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - "eks-cluster-name"
        - "-r"
        - "EKS-ADMIN-ROLE:ARN:::::::"
      env:
        - name: AWS_PROFILE
          value: "USER"
4

1 回答 1

3

AWS CLI v2 现在支持AWS SSO,因此我决定更新我的 Kube 配置文件以利用该aws命令而不是aws-iam-authenticator. 现在通过 SSO 进行身份验证变得轻而易举!看起来 AWS 想要摆脱必须拥有一个额外的二进制文件才能在 EKS 集群中进行身份验证的情况,这对我来说很好!希望这可以帮助。

于 2020-04-08T06:08:16.627 回答