我是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服务角色(不要使用现有的服务角色,因为它包含'/ 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
笔记:
创建并开始构建项目
确认在EKS集群中创建了必需的对象
您可以使用简单的命令(例如,
$ kubectl get all --all-namespaces