web-dev-qa-db-ja.com

Kubernetes / kops:EBSボリュームをインスタンスにアタッチ中にエラーが発生しました。この操作を実行する権限がありません。エラー403

KopsによってプロビジョニングされたAWSクラスターにEBSボリュームをマウントしてkubernetesのデプロイをテストしました。これはデプロイメントymlファイルです:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: helloworld-deployment-volume
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: helloworld
    spec:
      containers:
      - name: k8s-demo
        image: wardviaene/k8s-demo
        ports:
        - name: nodejs-port
          containerPort: 3000
        volumeMounts:
        - mountPath: /myvol
          name: myvolume
      volumes:
      - name: myvolume
        awsElasticBlockStore:
          volumeID: <volume_id>

kubectl create -f <path_to_this_yml>の後に、ポッドの説明に次のメッセージが表示されました。

Attach failed for volume "myvolume" : Error attaching EBS volume "XXX" to instance "YYY": "UnauthorizedOperation: You are not authorized to perform this operation. status code: 403

これは単なる許可の問題のようです。わかりました。ノードロールIAM-> Roles-> nodes.<my_domain>のポリシーを確認したところ、ボリュームの操作を許可するアクションがなく、ec2:DescribeInstancesしかないことがわかりました。デフォルトのアクション。そこで、AttachVolumeアクションとDetachVolumeアクションを追加しました。

    {
        "Sid": "kopsK8sEC2NodePerms",
        "Effect": "Allow",
        "Action": [
            "ec2:DescribeInstances",
            "ec2:AttachVolume",
            "ec2:DetachVolume"
        ],
        "Resource": [
            "*"
        ]
    },

そして、これは役に立ちませんでした。それでもエラーが発生します:

Attach failed for volume "myvolume" : Error attaching EBS volume "XXX" to instance "YYY": "UnauthorizedOperation: You are not authorized to perform this operation.

私は何かが足りないのですか?

9

私は解決策を見つけました。説明されています ここ

Kops 1.8.0-beta.1では、マスターノードでAWSボリュームに次のタグを付ける必要があります。

KubernetesCluster<clustername-here>

したがって、awscliを使用して、そのタグでEBSボリュームを作成する必要があります。

aws ec2 create-volume --size 10 --region eu-central-1 --availability-zone eu-central-1a --volume-type gp2 --tag-specifications 'ResourceType=volume,Tags=[{Key=KubernetesCluster,Value=<clustername-here>}]'

または、EC2-> Volumes-> Your volume-> Tagsで手動でタグ付けすることもできます

それでおしまい。

編集:

正しいクラスター名は、クラスターの一部であるEC2インスタンスタグ内にあります。キーは同じです:KubernetesCluster

23