KUBECTL 错误:服务器已要求客户端提供凭据

use*_*_02 7 kubernetes amazon-eks

目前,有两个 eks 集群:prod 和 dev。我正在尝试访问存在于不同 aws 帐户中的开发集群,但出现错误“您必须登录到服务器”

当我尝试获取 kubectl 版本时,出现错误。请指出我的错误。这种情况仅发生在开发集群中。如果我有任何错误,还请让我知道纠正步骤。

AWS_PROFILE=eks_admin_dev kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-07-26T20:40:11Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
error: You must be logged in to the server (the server has asked for the client to provide credentials)

AWS_PROFILE=eks_admin_dev kubectl get pods
error: You must be logged in to the server (Unauthorized)
Run Code Online (Sandbox Code Playgroud)

我已经为我的开发用户创建了访问密钥和秘密访问密钥(这是管理员凭据)。我创建了两个配置文件 dev 和 eks_admin_dev。据我了解,source_profile 部分告诉它使用 dev 配置文件为 eks-admin 角色执行 sts:AssumeRole。

$ aws --version
aws-cli/1.16.45 Python/2.7.12 Linux/4.4.0-1066-aws botocore/1.12.35

$ kubectl config current-context
dev

$ cat ~/.aws/config
[default]   ---> prod account 
region = us-east-1
[profile eks_admin_dev] ---> dev account
role_arn = arn:aws:iam::xxxxxxxx:role/eks-admin
source_profile = dev
region = us-east
[profile dev]  ---> dev account
region = us-east-1
Run Code Online (Sandbox Code Playgroud)

我的凭据:

$ cat ~/.aws/credentials
[old]
aws_secret_access_key = xxxxxxxxxxxxxx
aws_access_key_id = xxxxxxxxx
[default]
aws_access_key_id = xxxxxx
aws_secret_access_key = xxx
[dev]
aws_secret_access_key = xxx
aws_access_key_id = xxx
[eks_admin_dev]
aws_access_key_id = xx
aws_secret_access_key = xx
Run Code Online (Sandbox Code Playgroud)

cat ~/.kube/kubeconfig,我尝试在这里指定角色,同样的错误。

users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - token
      - -i
      - dev-0
      command: aws-iam-authenticator
      env:
      - name: AWS_PROFILE
        value: eks_admin_dev
Run Code Online (Sandbox Code Playgroud)

Ric*_*ico 8

这对我来说既可以AWS_PROFILE在命令行上使用 env,也可以在文件中设置 env ~/.kube/config

我认为可能发生的唯一事情是您已经在 bash 环境中为您的产品帐户预定义了 AWS 凭证(这些凭证优先于 中的内容~/.aws/credentials。您可以检查以下内容:

$ env | grep AWS
AWS_SECRET_ACCESS_KEY=xxxxxxxx
AWS_ACCESS_KEY_ID=xxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,您可以取消设置它们或从您可能在 shell 上获取的任何初始化文件中删除它们。

$ unset AWS_SECRET_ACCESS_KEY
$ unset AWS_ACCESS_KEY_ID
Run Code Online (Sandbox Code Playgroud)