由于身份验证问题,在连接 Amazon EKS 集群的 AWS CodeBuild 上执行 kubectl 不起作用

1 amazon-iam kubernetes kubectl aws-codebuild amazon-eks

kubectl version在 CodeBuild 上打印错误...

\n\n
[Container] 2019/08/26 04:07:32 Running command kubectl version \nClient 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"} \nerror: You must be logged in to the server (the server has asked for the client to provide credentials)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

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

\n
\n\n

我正在使用 Amazon EKS 集群。\n似乎缺少一些身份验证设置...?

\n\n

我做了什么:

\n\n
    \n
  1. codebuild-hoge-service-role设置代码构建项目(创建新的服务角色)。
  2. \n
  3. 将策略添加eks:DescribeCluster到角色作为内联策略,因为aws eks update-kubeconfig需要它。
  4. \n
  5. 编辑以在本地设备上configmap/aws-auth绑定角色和 RBAC ,添加新配置:kubectl edit -n kube-system configmap/aws-authmapRoles
  6. \n
\n\n
   mapRoles: |\n     - rolearn: .....\n     - rolearn: arn:aws:iam::999999999999:role/service-role/codebuild-hoge-service-role\n     \xc2\xa6 username: codebuild\n     \xc2\xa6 groups:\n     \xc2\xa6   - system:masters\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

仅此而已。\n还不够?有什么我错过的吗?

\n\n

我还尝试了另一种调试方法,它成功了。

\n\n
    \n
  1. 创建 IAM 用户和 IAM 角色。他可以切换到角色(承担角色)。
  2. \n
  3. 编辑configmap/aws-auth并添加角色的配置。(与失败过程相同)
  4. \n
  5. 在本地切换角色并执行kubectl version。有效!!
  6. \n
\n\n

构建规范.yml

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

小智 9

我遇到过同样的问题。我只需创建另一个具有与原始角色相同的信任关系和策略的角色。但它奏效了。

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

  • 我们可以将此答案标记为好吗?在花费了大量时间研究为什么 Codebuild 无法与我们的 kubernetes 集群交互后,这是解决方案 (3认同)
  • 绝对是正确答案。这真是太疯狂了。感谢开发团队。谁能找到这个错误?这是一些真正的天才和即兴创作!多谢。我们花了两个小时来调试这个愚蠢的东西。 (2认同)