“ kubectl”未从本地Windows工作站连接到AWS EKS群集

时间:2019-03-05 14:44:30

标签: amazon-eks aws-eks eks

我正在尝试设置AWS EKS群集,并希望从本地Windows工作站连接该群集。无法连接。这是我执行的步骤;

  1. 创建aws服务角色(aws控制台-> IAM->角色->单击“创建角色”->选择AWS服务角色“ EKS”->赋予角色名称“ eks-role-1”
  2. 在IAM中创建另一个名为“ eks”的用户以进行程序访问。这将帮助我从本地Windows工作站连接EKS群集。我添加到其中的策略是“ AmazonEKSClusterPolicy”,“ AmazonEKSWorkerNodePolicy”,“ AmazonEKSServicePolicy”,“ AmazonEKS_CNI_Policy”。
  3. 已使用roleARN创建了下一个EKS集群,该集群已在步骤#1中创建。终于在aws控制台中创建了EKS集群。
  4. 在我的本地Windows工作站中,我已经下载了“ kubectl.exe”和“ aws-iam-authenticator.exe”,并使用步骤2中的访问密钥和令牌为用户“ eks”进行了“ aws配置”。配置“〜/ .kube / config”后;我在命令下运行并得到如下错误:

Command:kubectl.exe get svc

output:
could not get token: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors
could not get token: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors
could not get token: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors
could not get token: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors
could not get token: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors
Unable to connect to the server: getting credentials: exec: exit status 1

不确定在这里有什么错误的设置。有人可以帮忙吗?我知道有些地方说您必须使用相同的aws用户来连接群集(EKS)。但是,如何获取AWS Assign-role的访问密钥和令牌(步骤2:eks-role-1)?

4 个答案:

答案 0 :(得分:0)

我想我已经解决了这个问题;想在这里写下来,以便人们从中受益。 首次创建EKS集群时;检查您从中创建(检查AWS Web Console用户设置)。即使您是从CFN脚本创建的,也要分配不同的角色来创建集群。您必须具有CLI访问权限,用户才能开始从kubectl工具访问您的集群。首次访问后(默认情况下,该用户将具有管理员访问权限);您可能需要使用congifMap将另一个IAM用户添加到群集管理员(或其他角色)中;那么只有您可以切换或使用备用IAM用户从kubectl命令行访问群集。

答案 1 :(得分:0)

确保文件〜/ .aws / credentials具有可管理群集的IAM帐户的AWS密钥和秘密密钥。

或者,您可以设置AWS env参数:

export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxx

export AWS_SECRET_ACCESS_KEY=ssssssssss

答案 2 :(得分:0)

对于参与此活动的人们,也许您需要为eks提供个人资料。

EKS不在kubeconfig中添加配置文件。

解决方案:

  1. 导出AWS凭证
$ export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxx
$ export AWS_SECRET_ACCESS_KEY=ssssssssss
  1. 如果您已经配置了AWS凭证。尝试导出AWS_PROFILE
$ export AWS_PROFILE=ppppp
  1. 类似于2,但您只需要执行一次。编辑您的kubeconfig
users:
- name: eks # This depends on your config.
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - "general"
      env:
        - name: AWS_PROFILE
          value: "<YOUR_PROFILE_HERE>" #

答案 3 :(得分:0)

添加另一个选项。

除了使用 aws-iam-authenticator,您还可以将命令更改为 aws 并替换 args,如下所示:

- name: my-cluster
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args: #<--- Change the args
      - --region
      - <YOUR_REGION>
      - eks
      - get-token
      - --cluster-name
      - my-cluster
      command: aws #<--- Change to command to aws
      env:
      - name: AWS_PROFILE
        value: <YOUR_PROFILE_HERE>