【发布时间】:2020-04-03 03:09:39
【问题描述】:
我已经使用适当的 configMap 部署了一个测试 EKS 集群,并且 SSO 的用户可以通过导出会话凭据(AWS_ACCESS_KEY_ID、SECRET_ACCESS_KEY_ID、AWS_SESSION_TOKEN 等)访问集群并拥有aws-iam-authenticator 客户端安装在他们的终端中。当用户尝试使用 aws-iam-authenticator 使用存储在 ~/.aws/config 中的 aws sso 配置文件时,就会出现问题。运行任何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) 上对此进行了测试,但没有取得任何成功。我通过export AWS_PROFILE=User1 导出了在~/.aws/config 文件中找到的AWS 配置文件,并且运行aws sts get-caller-identity 正确显示了正在导出的配置文件。我已经在多个命名配置文件之间切换,每个配置文件都获得了正确的身份和权限,但是,当运行任何 kubectl 命令时,我得到了上述错误。我也尝试过符号链接 config -> credentials 但没有运气。唯一可行的方法是将 access_key、secret_key 和 session_token 导出到环境变量。
我想我可以忍受必须粘贴来自 AWS SSO 的动态凭据,但我需要解决解决方案不会让我放弃:(。我正在关注这个 github issue 中的线程但没有运气。我设置的 kube 配置文件是 AWS 文档中指定的。
我怀疑aws-iam-authenticator 服务器部署可能有问题,但 pod 日志中没有显示任何内容。这是来自工具 github page 的 sn-p,我 think 我正确地遵循了它,但由于我忘记的原因我确实跳过了第 3 步:
Kubernetes API 与 AWS IAM Authenticator 集成 Kubernetes 使用令牌认证 webhook。当你跑 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"
【问题讨论】:
标签: kubernetes amazon-eks aws-iam-authenticator