我已经使用适当的 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"