Kubernetes认证问题拉动ECR图像

时间:2016-04-18 19:12:25

标签: amazon-web-services docker kubernetes

Apache Tomcat表示支持使用AWS ECR,但它不适用于我。我的节点具有与所有正确权限相关联的EC2实例角色,但protected override void Render(HtmlTextWriter writer) { this.RenderContents(writer); } 会导致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."

kubelet日志看起来像:

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

3 个答案:

答案 0 :(得分:2)

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

  • 您尚未通过kubelet上的CopySubresourceRegion arg。
  • 当你的kubelet启动时,没有正确的IAM权限。如果是这种情况,kubelet守护程序的简单反弹应该适合你。
  • 您使用的是k8s版本< 1.2。虽然,考虑到你的问题日期,这个似乎不太可能。

答案 1 :(得分:1)

我认为你还需要为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)检索可用于向注册表验证Docker客户端的docker login命令:

aws ecr get-login --region us-east-1

2)运行上一步返回的docker login命令。

3)Docker登录密码已保存/root/.dockercfg

4)编码docker配置文件

    echo $(cat /root/.dockercfg) | base64 -w 0

5)根据旧格式将结果复制并粘贴到秘密YAML:

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

6)使用此aws-key秘密访问图像

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

答案 2 :(得分:0)

通常,如果您更改InstanceProfile的权限,它们会立即生效。但是,Kubelet必须有某种设置阶段,需要已经设置权限。我完全退回了我的CloudFormation堆栈,以便使用新的权限启动并启动。我现在可以毫无问题地使用ECR图像了。