Kubernetesauthentication问题拉ECR图像
Kubernetes的文档说支持使用AWS ECR,但它不适合我。 我的节点有一个EC2实例angular色与所有正确的权限关联,但是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."
导致failed to "StartContainer" for "debug1" with ErrImagePull: "Authentication is required."
细节
这些实例都具有相关的angular色,并且该angular色具有此策略:
{ "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\""
从这些日志中,我怀疑以下三件事之一:
- 您尚未通过
--cloud-provider=aws
arg。 - kubelet启动时,没有正确的IAM权限。 如果是这样的话,kubelet守护进程的一个简单的反弹应该为你工作。
- 你在k8s版本<1.2。 虽然,这个似乎不太可能,给出你的问题的date。
通常,如果您更改InstanceProfile上的权限,它们将立即生效。 但是,对于需要权限已经设置的Kubelet,必须有某种设置阶段。 我完全反弹了我的CloudFormation堆栈,以便使用新的权限启动,并做了伎俩。 我现在可以使用ECR图像,没有问题。
我想你也需要为ecr图像configuration图像拉锁。 您可以参阅下面的链接了解详情。
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)检索你可以用来validation你的Docker客户端到你的registry的docker login命令:
aws ecr get-login –region us-east-1
2)运行上一步返回的docker login命令。
3)Dockerlogin密码保存/root/.dockercfg
4)编码dockerconfiguration文件
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
- 是否可以将一个Docker镜像直接部署到AWS?
- 安装Python 3 Docker Ubuntu错误命令'x86_64-linux-gnu-gcc
- Amazon ECS“引用的群集处于非活动状态”
- AWS ECS是否支持每个容器的dynamic可伸缩性?
- 将Docker部署到AWS Elastic Beanstalk – 如何将端口转发到主机? (端口绑定)
- Elastic Beanstalk CLI,我如何使用RDS实例创build环境?
- 如何实现AMI复烤的一致性
- 弹性豆茎:没有bulddocker形象
- Docker容器似乎“inheritance”了主机ec2的实例configuration文件。 怎么样?