k8s 部署的时候如何拉去私有镜像库的镜像?
简介
- 通常
deployment
/statefulset
中是这样的 - 这儿的
imagePullSecrets
就指定了拉取密钥1
2
3
4
5
6
7spec:
containers:
- name: xxx
image: registry.cn-shanghai.aliyuncs.com/xxx/xxxx:latest
imagePullPolicy: Always
imagePullSecrets:
- name: aliyun-docker
密钥如何生成?
- 创建一个
secret
:1
kubectl create secret docker-registry regsecret --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
- 在这里:
是你的私有仓库的FQDN. 是你的 Docker 用户名. 是你的 Docker 密码. 是你的 Docker 邮箱.
导出密钥
1 | kubectl get secret regsecret --output=yaml |
输出类似这样:
1
2
3
4
5
6
7
8
9apiVersion: v1
data:
.dockercfg: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
kind: Secret
metadata:
...
name: regsecret
...
type: kubernetes.io/dockercfg.dockercfg 的值是一个经过 base64 加密的数据。
把这串 base64 加密的数据复制到一个名为 secret64 的文件里.
重要: 确保你的 secret64 的文件内容没有任何换行。
想知道 .dockercfg 的内容是什么意思,只要将 secret 数据转换成可读格式即可:
1
base64 -d secret64
输出类似这样:
1
{"yourprivateregistry.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}
注意到 secret 数据其实包含了你的 config.json 文件里的验证口令。
tips
- 建议先通过
kubectl create secret
命令本地生成密钥,然后再通过kubectl get secret xxx --output=yaml
命令将其导出。