Amazon web services Kubernetes/kops:将EBS卷附加到实例时出错。您无权执行此操作。错误403

Amazon web services Kubernetes/kops:将EBS卷附加到实例时出错。您无权执行此操作。错误403,amazon-web-services,amazon-ec2,kubernetes,kubectl,kops,Amazon Web Services,Amazon Ec2,Kubernetes,Kubectl,Kops,我在kops提供的AWS集群上测试了kubernetes部署和EBS卷装载。这是部署yml文件: apiVersion: extensions/v1beta1 kind: Deployment metadata: name: helloworld-deployment-volume spec: replicas: 1 template: metadata: labels: app: helloworld spec: contai

我在kops提供的AWS集群上测试了kubernetes部署和EBS卷装载。这是部署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>
看起来这只是一个权限问题。好的,我检查了节点角色
IAM
->
角色
->
节点的策略。
发现在没有允许操作卷的操作的情况下,默认情况下只有
ec2:descripbeinstances
操作。因此,我添加了
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.

我遗漏了什么吗?

我找到了解决办法。它被描述了

在kops 1.8.0-beta.1中,主节点要求您使用以下内容标记AWS卷:

KubernetesCluster

因此,有必要使用
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>}]'
aws ec2创建卷--大小10--区域eu-central-1--可用区eu-central-1a--卷类型gp2--标记规范'ResourceType=volume,标记=[{Key=KubernetesCluster,值=}]'
或者您可以在
EC2
->
卷中手动标记它
->
您的卷
->
标记

就这样

编辑:


正确的集群名称可以在EC2实例标记中找到,EC2实例标记是集群的一部分。键相同:
KubernetesCluster

Thx用于解决方案。但我有新的错误。无法为pod“XXX”装载卷:等待卷为pod“XXX”/“XXX”附加/装载的超时已过期。未连接/未安装卷的列表=[my volume]。你经历过同样的错误吗?很有趣。不,我没有遇到过这样的问题,我甚至不知道它与什么有关。我找到了解决办法。问题是由xfs FS引起的。此错误与kubernetes问题有关。
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>}]'