web-dev-qa-db-ja.com

kubectlを実行しているときに "hello-k8s.yml":unauthorized "エラーが発生する" hello-k8s.ymlがcodeBuildフェーズでapply apply apply \ "というエラーが発生しました

私はKubernetesに慣れており、EKSスタックにサービスを展開するためのAWS Codepipelineを作成しようとしています。

私は次のものです これは チュートリアルで、ロールの作成と権限の追加などすべての手順に従っています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 
 _

私はチュートリアルに従ってユーザー/役割を追加するためのすべてのステップを使用したので、資格情報が問題になっているかどうかは非常によくわかりません。

誰もがこれを助けてもらえますか?

4
Pratik

YAMLの展開CodeBuildから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-tokes

ノート:

  • Buildspec.ymlファイルは、Kubectl、AWS-IAMオーベクチャツールをインストールし、CodeBuild環境でKubectlを設定します

  • 16行目の正しい領域とcluster_nameでbuildspec.ymlファイルを更新します。

  • 展開yamlファイルを "展開"ディレクトリに追加します

ビルドプロジェクトを作成して起動します

  1. CodeBuildコンソールを開きます

  2. [ビルドプロジェクトの作成]ボタンをクリックします

  3. プロジェクトに名前を付けます

  4. 添付ファイルを追加したCodeCommitリポジトリを使用します。 "buildspec.yml"と "pod.yaml"

  5. 管理Image> Ubuntu> Standard 1.0を使用してください

  6. 「役割名」で、「CodeBuildKubectLrole」を選択します。

  7. [ビルドプロジェクトの作成]ボタンをクリックします

  8. ビルドを開始するには、「スタートビルド」ボタンを作成します

必要なオブジェクトがEKSクラスタで作成されていることを確認します

これを簡単なコマンドで確認できます。

$ kubectl get all --all-namespaces
 _
5
shariqmaws