AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 916022
Accepted
spiffytech
spiffytech
Asked: 2018-06-11 15:47:21 +0800 CST2018-06-11 15:47:21 +0800 CST 2018-06-11 15:47:21 +0800 CST

kubectl 无法使用 AWS EKS 进行身份验证

  • 772

我无法kubectl使用我的同事创建的 EKS Kubernetes 实例进行身份验证。我遵循了 文档:AWS CLI 可以运行aws eks命令(我是 AWS 完全管理员),并且 heptio 身份验证器在我的路径中并且可以生成令牌。

当我运行时,kubectl我收到此错误:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.4", 
GitCommit:"5ca598b4ba5abb89bb773071ce452e33fb66339d", GitTreeState:"clean", 
BuildDate:"2018-06-06T15:22:13Z", GoVersion:"go1.9.6", Compiler:"gc", 
Platform:"darwin/amd64"}
error: You must be logged in to the server (the server has asked for the client
to provide credentials)

这是我的 ~/.kube/config 文件。这正是我的同事可以成功使用的 kubeconfig。

apiVersion: v1
clusters:
- cluster:
    server: https://myinstance.sk1.us-east-1.eks.amazonaws.com
    certificate-authority-data: base64_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: heptio-authenticator-aws
      args:
        - "token"
        - "-i"
        - "dev-qa"
        # - "-r"
        # - "<role-arn>"
amazon-web-services
  • 5 5 个回答
  • 18470 Views

5 个回答

  • Voted
  1. Best Answer
    spiffytech
    2018-06-19T05:19:05+08:002018-06-19T05:19:05+08:00

    根据这些 AWS 文档,我需要将我的 IAM 用户添加到mapUsersConfigMap 部分。configmap/aws-auth

    您可以使用最初创建集群的同一 AWS 用户来编辑配置映射。

    $ kubectl edit -n kube-system configmap/aws-auth
    
    apiVersion: v1
    data:
    mapRoles: |
        - rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6
        username: system:node:{{EC2PrivateDNSName}}
        groups:
            - system:bootstrappers
            - system:nodes
    mapUsers: |
        - userarn: arn:aws:iam::555555555555:user/admin
        username: admin
        groups:
            - system:masters
        - userarn: arn:aws:iam::111122223333:user/ops-user
        username: ops-user
        groups:
            - system:masters
    mapAccounts: |
        - "111122223333"
    
    • 9
  2. VAS
    2018-06-12T02:17:35+08:002018-06-12T02:17:35+08:00

    不幸的是,AWS 还没有像 GKE 的“gcloud container clusters get-credentials”这样的命令,它会为你创建 kubectl 配置。因此,您需要手动创建 kubectl 配置文件。

    如为 Amazon EKS 文档创建 kubeconfig 中所述,您应该从集群中获得两件事:

    1. 检索集群的端点。<endpoint-url>在您的 kubeconfig 文件中使用它。

      aws eks describe-cluster --cluster-name <cluster-name>  --query cluster.endpoint
      
    2. 检索集群的 certificateAuthority.data。<base64-encoded-ca-cert>在您的 kubeconfig 文件中使用它。

      aws eks describe-cluster --cluster-name <cluster-name>  --query cluster.certificateAuthority.data
      

    如果默认 kubectl 文件夹不存在,请创建它。

    mkdir -p ~/.kube
    

    打开您喜欢的文本编辑器并将以下 kubeconfig 代码块粘贴到其中。

    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: heptio-authenticator-aws
          args:
            - "token"
            - "-i"
            - "<cluster-name>"
            # - "-r"
            # - "<role-arn>"
          # env:
            # - name: AWS_PROFILE
            #   value: "<aws-profile>"
    

    将 替换<endpoint-url>为为您的集群创建的端点 URL。将 替换<base64-encoded-ca-cert>为为您的集群创建的 certificateAuthority.data。将 替换为<cluster-name>您的集群名称。

    将文件保存到默认的 kubectl 文件夹,文件名中包含您的集群名称。例如,如果您的集群名称是 devel,请将文件保存为~/.kube/config-devel.

    将该文件路径添加到您的KUBECONFIG环境变量中,以便kubectl知道在哪里查找您的集群配置。

    export KUBECONFIG=$KUBECONFIG:~/.kube/config-devel
    

    (可选)将配置添加到您的 shell 初始化文件中,以便在您打开 shell 时对其进行配置。

    对于 macOS 上的 Bash shell:

    echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-devel' >> ~/.bash_profile
    

    对于 Linux 上的 Bash shell:

    echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-devel' >> ~/.bashrc
    

    测试您的配置。

    kubectl get svc
    

    输出:

    NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    svc/kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   1m
    

    Note
    如果您收到错误消息"heptio-authenticator-aws": executable file not found in $PATH,则说明您kubectl未针对 Amazon EKS 进行配置。有关更多信息,请参阅为 Amazon EKS 配置 kubectl。

    • 2
  3. M Jensen
    2019-06-10T00:21:07+08:002019-06-10T00:21:07+08:00

    随着时间的推移,事情变得有点简单了。要开始使用 Linux(或实际上是 WSL),您需要:

    1. 安装 AWS CLI并配置有效的 AWS CLI 凭证(aws configure或例如使用 AWS SSO 即时生成限时凭证)
    2. 安装 eksctl 和 kubectl
    3. 安装 aws-iam-authenticator

    此时,假设您的 AWS 账户中已经有一个正在运行的 Kubernetes 集群,您可以使用以下命令在 $HOME/.kube/config 中生成/更新 kube 配置:

    aws eks update-kubeconfig --name test

    test根据 AWS 控制台(或aws eks list-clusters) ,您的集群名称在哪里。

    例如,您现在可以运行kubectl get svc而不会出现错误。

    • 1
  4. getglad
    2018-06-12T05:17:44+08:002018-06-12T05:17:44+08:00

    根据您的命令传入您的 AWS 配置变量(或将它们设置为全局变量)。

    例子:

    AWS_PROFILE=profile_name kubectl get all
    
    • 0
  5. Brayton Stafford
    2018-06-13T16:00:51+08:002018-06-13T16:00:51+08:00

    我通过修复我创建的 kubeconfig 文件中的 base64 编码证书解决了这个问题。该文档有点令人困惑,因为它说将 --cluster-name 开关与 aws cli 一起用于 EKS 服务,而对我来说 --name 开关有效。这会将 base64 值打印到 cli,然后我将它复制到保存的 kubeconfig 文件中并且它可以工作。

    $ AWS_ACCESS_KEY_ID=[YOUR_ID_HERE] AWS_SECRET_ACCESS_KEY=[YOUR_SECRET_HERE] aws eks describe-cluster --name staging --query cluster.certificateAuthority.data
    
    • 0

相关问题

  • 与 AWS 中的其他系统相比,CentOS 报告的总内存较低

  • 如何在 Amazon Linux 服务器上升级到 Java 1.8?

  • 了解 Amazon AWS 使用数据

  • 亚马逊提供的负载均衡服务体验如何?

  • ELB 中现有节点的 AWS 自动缩放问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve