【问题标题】:"kubectl" not connecting to aws EKS cluster from my local windows workstation“kubectl”未从我的本地 Windows 工作站连接到 aws EKS 集群
【发布时间】:2019-07-27 01:45:33
【问题描述】:

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

  1. 创建 aws 服务角色(aws 控制台 -> IAM -> 角色 -> 单击“创建角色”-> 选择 AWS 服务角色“EKS” -> 赋予角色名称“eks-role-1”
  2. 在 IAM 中创建另一个名为“eks”的用户以进行编程访问。这将帮助我从本地 Windows 工作站连接我的 EKS 集群。我添加到其中的策略是“AmazonEKSClusterPolicy”、“AmazonEKSWorkerNodePolicy”、“AmazonEKSServicePolicy”、“AmazonEKS_CNI_Policy”。
  3. 已使用在步骤#1 中创建的 roleARN 创建了下一个 EKS 集群。最后,在 aws 控制台中创建了 EKS 集群。
  4. 在我的本地 Windows 工作站中,我下载了“kubectl.exe”和“aws-iam-authenticator.exe”,并使用第 2 步中的 accesskey 和令牌为用户“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 的 accesskey 和 token(步骤 2:eks-role-1)?

【问题讨论】:

    标签: amazon-web-services amazon-eks


    【解决方案1】:

    对于参与其中的人,可能是您为 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>" #
    

    【讨论】:

      【解决方案2】:

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

      您也可以设置 AWS 环境参数:

      export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxx

      export AWS_SECRET_ACCESS_KEY=ssssssssss

      【讨论】:

        【解决方案3】:

        添加另一个选项。

        您可以将命令更改为 aws 并替换 args,而不是使用 aws-iam-authenticator

        - 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>
        

        【讨论】:

          【解决方案4】:

          我想我得到了这个问题的答案;想在这里写下来,这样人们就会从中受益。 当您第一次创建 EKS 集群时;检查您是从哪里创建的(检查您的 aws Web 控制台用户设置)。即使您是从 CFN 脚本创建,也要分配不同的角色来创建集群。您必须获得 CLI 访问权限才能让用户开始从 kubectl 工具访问您的集群。一旦您获得第一次访问权限(默认情况下,该用户将拥有管理员访问权限);您可能需要使用 congifMap 将另一个 IAM 用户添加到集群管理员(或其他角色)中;那么只有您可以切换或使用备用 IAM 用户从 kubectl 命令行访问集群。

          【讨论】:

            猜你喜欢
            • 2020-06-05
            • 2021-03-10
            • 2016-04-06
            • 1970-01-01
            • 2019-04-15
            • 1970-01-01
            • 2022-10-20
            • 2022-06-27
            • 2019-12-30
            相关资源
            最近更新 更多