由于身份验证问题,在连接Amazon EKS集群的AWS CodeBuild上执行kubectl无法正常工作

时间:2019-08-26 04:41:22

标签: kubernetes amazon-iam kubectl aws-codebuild amazon-eks

kubectl version在CodeBuild上显示错误...

[Container] 2019/08/26 04:07:32 Running command kubectl version 
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"} 
error: You must be logged in to the server (the server has asked for the client to provide credentials)
  

错误:您必须登录到服务器(服务器已要求客户端提供凭据)

我正在使用Amazon EKS Cluster。 似乎缺少某些身份验证设置...?

我做了什么:

  1. 设置代码构建项目(已创建新的服务角色codebuild-hoge-service-role)。
  2. eks:DescribeCluster策略添加到角色中作为内联策略,因为aws eks update-kubeconfig需要它。
  3. 通过configmap/aws-auth在我的本地设备上编辑kubectl edit -n kube-system configmap/aws-auth以绑定角色和RBAC,向mapRoles添加新配置,例如:
   mapRoles: |
     - rolearn: .....
     - rolearn: arn:aws:iam::999999999999:role/service-role/codebuild-hoge-service-role
     ¦ username: codebuild
     ¦ groups:
     ¦   - system:masters

仅此而已。 不够?我有什么想念的吗?

我也尝试了另一种调试方法,它成功地工作了。

  1. 创建IAM用户和IAM角色。他可以切换到角色(担任角色)。
  2. 编辑configmap/aws-auth并为该角色添加配置。 (与失败过程相同)
  3. 将角色切换到本地并执行kubectl version。很好!

buildspec.yml

version: 0.2
phases:
  install:
    runtime-versions:
      docker: 18
    commands:
      - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl
      - chmod +x ./kubectl
      - mv -f ./kubectl /usr/local/bin/kubectl
  pre_build:
    commands:
      - aws eks update-kubeconfig --name mycluster
      - kubectl version
  build:
    commands:
      - kubectl get svc -A

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我只需要创建一个具有与原始角色相同的受信任关系和策略的角色。但是它起作用了。

我唯一不同的是没有添加路径 / service-role / ,因此ARN看起来像:arn:aws:iam::123456789012:role/another-codebuild-role