在 CodeBuild 阶段运行 kubectl apply -f hello-k8s.yml 时出现“无法识别 \”hello-k8s.yml\”:未经授权”错误

2023-12-12

我是 Kubernetes 新手,正在尝试创建 AWS CodePipeline 将服务部署到 EKS 堆栈。

我正在关注this教程 我已执行所有步骤,包括创建角色和添加权限,以便代码构建将能够与 EKS 交谈。

我现在面临的问题是,当 CodePipeline 运行时,以下命令失败代码构建 phase.

kubectl apply -f hello-k8s.yml

并给出这个错误

[Container] 2019/12/04 07:41:43 Running command kubectl apply -f hello-k8s.yml 
unable to recognize "hello-k8s.yml": Unauthorized 
unable to recognize "hello-k8s.yml": Unauthorized 

我不太确定这是否是凭据问题,因为我已按照教程使用了所有步骤来添加用户/角色。

有人可以帮我解决这个问题吗?


从 CodeBuild 将 Yaml 清单部署到 Kubernetes 需要以下步骤:

高级流程包括以下步骤:

  1. 为 CodeBuild 创建 IAM 服务角色

  2. 使用“aws-auth”ConfigMap 在 EKS 中映射 CodeBuild 服务角色

  3. 在代码存储库中创建源文件

  4. 创建并启动 CodeBuild 项目

  5. 确认EKS集群中创建了所需的对象

为 CodeBuild 创建 IAM 服务角色(不要使用现有服务角色,因为它包含“/path/”)

运行以下命令创建 CodeBuild 服务角色并附加所需的策略:

TRUST = "{   \"Version\": \"2012-10-17\",   \"Statement\": [     {       \"Effect\": \"Allow\",       \"Principal\": {         \"Service\": \"codebuild.amazonaws.com\"       },       \"Action\": \"sts:AssumeRole\"     }   ] }"

$ echo '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "eks:Describe*", "Resource": "*" } ] }' > /tmp/iam-role-policy

$ aws iam create-role --role-name CodeBuildKubectlRole --assume-role-policy-document "$TRUST" --output text --query 'Role.Arn'

$ aws iam put-role-policy --role-name CodeBuildKubectlRole --policy-name eks-describe --policy-document file:///tmp/iam-role-policy

$ aws iam attach-role-policy --role-name CodeBuildKubectlRole --policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess

$ aws iam attach-role-policy --role-name CodeBuildKubectlRole --policy-arn arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess

使用“aws-auth”ConfigMap 在 EKS 中映射 CodeBuild 服务角色

编辑“aws-auth”ConfigMap 并添加 CodeBuild 服务角色的角色映射:

$ vi aws-auth.yaml



apiVersion: v1

kind: ConfigMap

metadata:

  name: aws-auth

  namespace: kube-system

data:

  mapRoles: |

    - rolearn:  arn:aws:iam::AccountId:role/devel-worker-nodes-NodeInstanceRole-14W1I3VCZQHU7

      username: system:node:{{EC2PrivateDNSName}}

      groups:

        - system:bootstrappers

        - system:nodes

    - rolearn: arn:aws:iam::AccountId:role/CodeBuildKubectlRole

      username: build

      groups:

        - system:masters


$ kubectl apply -f aws-auth.yaml

在代码存储库中创建源文件

在 Github/CodeCommit 中创建一个包含示例文件的存储库,如下所示:

.
├── buildspec.yml
└── deployment
   └── pod.yaml

示例存储库位于此处:https://github.com/shariqmus/codebuild-to-eks

Notes:

  • buildspec.yml 文件安装 kubectl、aws-iam-authenticator 并在 CodeBuild 环境中配置 kubectl

  • 在第 16 行使用正确的区域和 cluster_name 更新 buildspec.yml 文件

  • 在“deployment”目录中添加部署 YAML 文件

创建并启动构建项目

  1. 打开 CodeBuild 控制台

  2. 单击“创建构建项目”按钮

  3. 为项目命名

  4. 使用已添加附加文件的 CodeCommit 存储库:“buildspec.yml”和“pod.yaml”

  5. 使用托管映像 > Ubuntu > 标准 1.0

  6. 在角色名称中,选择“CodeBuildKubectlRole”

  7. 单击“创建构建项目”按钮

  8. 创建“开始构建”按钮以开始构建

确认EKS集群中创建了所需的对象

您可以使用简单的命令来确认这一点,例如

$ kubectl get all --all-namespaces
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 CodeBuild 阶段运行 kubectl apply -f hello-k8s.yml 时出现“无法识别 \”hello-k8s.yml\”:未经授权”错误 的相关文章

随机推荐