我已经使用适当的configMap部署了一个测试EKS群集,并且SSO所在的用户可以通过导出会话凭据(AWS_ACCESS_KEY_ID,SECRET_ACCESS_KEY_ID,AWS_SESSION_TOKEN等)来访问群集,并拥有在其终端中安装了aws-iam-authenticator客户端。当用户尝试使用aws-iam-authenticator使用aws sso
中存储的~/.aws/config
配置文件时,就会出现问题。运行任何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/config
导出了在export AWS_PROFILE=User1
文件中找到的AWS概要文件,并且运行aws sts get-caller-identity
正确显示了正在导出的概要文件。我已经在多个命名的配置文件之间切换,并且每个配置文件都具有正确的标识和权限,但是,在运行任何kubectl
命令时,都会出现上述错误。我也尝试过符号链接config
-> credentials
,但是没有运气。它的唯一工作方式是将access_key,secret_key和session_token导出到环境变量。
我想我可以忍受粘贴来自AWS SSO的动态凭据,但是我对解决方案的需求不会让我放弃:(。我一直在关注这个github {{3 }}但没有运气,我设置的kube配置文件已根据AWS文档确定。
我怀疑aws-iam-authenticator
服务器部署可能有些问题,但是pod日志中没有任何显示。这是github issue工具的一个片段,我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"
答案 0 :(得分:2)
AWS CLI v2现在是supports AWS SSO,因此我决定更新Kube配置文件以使用aws
命令而不是aws-iam-authenticator
命令。现在,通过SSO进行认证变得轻而易举!看来AWS希望摆脱必须拥有其他二进制文件才能对EKS集群进行身份验证的感觉,这对我来说很好!希望这可以帮助。