Kubernetes|Kubernetes 访问 docker 仓库失败 no basic auth credentials
一般我们push 镜像 获取pull镜像,需要docker login ,用账号密码登录仓库,同理Kubernetes 部署pod,拉取镜像也需要登录。
首先需要创建一个带有docker 仓库账号密码信息的secret,在部署的yml或json文件中,带上这个secret即可。
在pod上指定ImagePullSecrets
注意: Google Kubernetes Engine,GCE及其他自动创建node的云平台上,推荐使用本方法。
Kubernetes支持在pod中指定仓库密钥。
使用Docker Config创建Secret
运行以下命令,将大写字母代替为合适的值
$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
secret "myregistrykey" created.
如果需要接入多个仓库,可以为每个仓库创建一个secret。 当为pod拉取镜像时,kubelet会将
imagePullSecrets
合入一个独立虚拟的.docker/config.json
。Pod只能引用和它相同namespace的ImagePullSecrets, 所以需要为每一个namespace做配置
通过kubectl创建secret 由于某种原因在一个
.docker/config.json
中需要多个项或者需要非上述命令给出的secret,可以create a secret using json or yaml。请保证:
- 设置data项的名称为
.dockerconfigjson
- 使用base64对docker文件编码,并将字符准确黏贴到
data[".dockerconfigjson"]
里
cat .docker/config.json| base64
- 设置
type
为kubernetes.io/dockerconfigjson
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson
如果收到错误消息
error: no objects passed to create
,可能是 base64 编码后的字符串非法。 如果收到错误消息类似Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...
, 说明数据已经解码成功,但是不满足.docker/config.json
文件的语法。在pod中引用imagePullSecrets
现在,在创建pod时,可以在pod定义中增加
imagePullSecrets
小节来引用secretapiVersion: v1
kind: Pod
metadata:
name: foo
namespace: awesomeapps
spec:
containers:
- name: foo
image: janedoe/awesomeapp:v1
imagePullSecrets:
- name: myregistrykey
对每一个使用私有仓库的pod,都需要做以上操作。
【Kubernetes|Kubernetes 访问 docker 仓库失败 no basic auth credentials】也可以在serviceAccount 资源中设置imagePullSecrets自动设置
imagePullSecrets
imagePullSecrets
可以和每个node上的.docker/config.json
一起使用,他们将共同生效。本方法在Google Kubernetes Engine 也能正常工作。推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- Android7.0|Android7.0 第三方应用无法访问私有库
- federation--kubernetes集群联邦的实现
- docker镜像探索----dive工具
- 打开Anaconda|打开Anaconda Navigator 时报错 error 5 拒绝访问
- 如何在Kubernetes|如何在Kubernetes 里添加自定义的 API 对象(一)
- Nginx进阶(1)——nginx本地代理配置访问node服务
- 02|02|简单使用Docker命令
- Docker-Dockerfile
- Docker|Docker exec 出现 "fork/exec /proc/self/exe: no such file or directory" 问题