2016-04-18 34 views
0

Kubernetes docs Kubernetes认证的问题说使用AWS ECR是支持的,但它不是为我工作。我的节点与所有正确的权限,但kubectl run debug1 -i --tty --restart=Never --image=672129611065.dkr.ecr.us-west-2.amazonaws.com/debug:v2结果failed to "StartContainer" for "debug1" with ErrImagePull: "Authentication is required."拉动ECR图像

详细

都有一个角色相关的情况下,相关的EC2实例的作用,这种作用有这个政策附:

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Effect": "Allow", 
     "Action": [ 
      "ecr:GetAuthorizationToken", 
      "ecr:BatchCheckLayerAvailability", 
      "ecr:GetDownloadUrlForLayer", 
      "ecr:GetRepositoryPolicy", 
      "ecr:DescribeRepositories", 
      "ecr:ListImages", 
      "ecr:BatchGetImage" 
     ], 
     "Resource": "*" 
    }] 
} 

和kubelet日志看起来像:

Apr 18 19:02:12 ip-10-0-170-46 kubelet[948]: I0418 19:02:12.004611  948 provider.go:91] Refreshing cache for provider: *credentialprovider.defaultDockerConfigProvider 
Apr 18 19:02:12 ip-10-0-170-46 kubelet[948]: E0418 19:02:12.112142  948 pod_workers.go:138] Error syncing pod b21c2ba6-0593-11e6-9ec1-065c82331f7b, skipping: failed to "StartContainer" for "debug1" with ErrImagePull: "Authentication is required." 
Apr 18 19:02:27 ip-10-0-170-46 kubelet[948]: E0418 19:02:27.006329  948 pod_workers.go:138] Error syncing pod b21c2ba6-0593-11e6-9ec1-065c82331f7b, skipping: failed to "StartContainer" for "debug1" with ImagePullBackOff: "Back-off pulling image \"672129611065.dkr.ecr.us-west-2.amazonaws.com/debug:v2\"" 

回答

0

Ge一般来说,如果您更改InstanceProfile的权限,它们会立即生效。但是,必须为Kubelet设置某种设置阶段,要求已设置权限。我完全退出了我的CloudFormation堆栈,以便启动新的权限并启动了这个功能。我现在可以毫无问题地使用ECR图像。

0

我想你还需要为ecr图像配置图像拉锁。详情请参阅下面的链接。

http://kubernetes.io/docs/user-guide/images/#specifying-imagepullsecrets-on-a-pod

http://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_GetStarted.html

https://github.com/kubernetes/kubernetes/issues/499

1)检索泊坞窗login命令,你可以用你的多克尔验证客户端注册表:

AWS ECR获得登录 - region us-east-1

2)运行docker login comman d在上一步中返回。

保存/root/.dockercfg

4)编码泊坞窗配置文件3)泊坞登陆秘密

​​

5)复制和粘贴结果基于旧格式的秘密YAML:

apiVersion: v1 
    kind: Secret 
    metadata: 
     name: aws-key 
     type: kubernetes.io/dockercfg 
    data: 
     .dockercfg: <YOUR_BASE64_JSON_HERE> 

6)使用该AWS-钥匙的秘密访问图像

apiVersion: v1 
    kind: Pod 
    metadata: 
     name: foo 
     namespace: awesomeapps 
    spec: 
     containers: 
     - name: foo 
      image: janedoe/awesomeapp:v1 
     imagePullSecrets: 
     - name: aws-key 
+4

的问题是,ECR凭据仅12小时工作,所以这种解决方案只会工作,直到证书过期。 –

2

从这些日志,我怀疑的三两件事之一:

  • 您没有通过对kubelet的--cloud-provider=aws ARG。
  • 当您的kubelet启动时,没有正确的IAM权限。如果是这种情况,kubelet守护进程的简单反弹应该适用于你。
  • 您正在使用的是k8s版本< 1.2。尽管如此,鉴于你的问题的日期,这似乎不太可能。
+0

是的,这是一种云提供商标志。我添加了该标志,然后还向ECR添加了权限给我分配给节点的角色,但它不起作用。正如我在下面的回答中指出的那样,我还必须反弹CloudFormation堆栈,因为Kubelet即使在使用新权限重新启动后也不会重新配置自身。它一定是在某个地方保存状态。 –