我是Kubernetes的新手,正在尝试创建一个AWS CodePipeline将服务部署到EKS堆栈。
我正在关注this教程
我已按照所有步骤进行操作,包括创建角色和添加权限,以便 CodeBuild 将能够与EKS进行通信。
我现在面临的问题是CodePipeline运行时,在 CodeBuild 阶段无法执行以下命令。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 list 到Kubernetes需要执行以下步骤:

高层过程包括以下步骤:

  • 为CodeBuild
  • 创建IAM服务角色
  • 使用“aws-auth” ConfigMap
  • 映射EKS中的CodeBuild服务角色
  • 在代码存储库
  • 中创建源文件
  • 创建并启动CodeBuild项目
  • 确认在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 Service角色

    编辑“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

    笔记:
  • buildspec.yml文件在CodeBuild环境
  • 中安装kubectl,aws-iam-authenticator并配置kubectl
  • 在第16行
  • 上使用正确的区域和cluster_name更新buildspec.yml文件
  • 在“deployment”目录中添加部署YAML文件

  • 创建并开始构建项目
  • 打开CodeBuild控制台
  • 点击“创建构建项目”按钮
  • 命名项目
  • 使用CodeCommit存储库,在其中添加了附件文件:“buildspec.yml”和“pod.yaml”。
  • 使用托管镜像> Ubuntu> Standard 1.0
  • 在“角色名称”中,选择“CodeBuildKubectlRole”
  • 点击“创建构建项目”按钮
  • 创建“开始构建”按钮以开始构建

  • 确认在EKS集群中创建了必需的对象

    您可以使用简单的命令(例如,
    $ kubectl get all --all-namespaces
    

    09-05 14:38