K8s 从私有仓库拉取镜像

登录 docker 镜像仓库

使用命令行登录仓库

1
docker login

登录过程会创建或更新保存有授权令牌的 config.json 文件

1
2
3
4
5
6
7
8
9
cat ~/.docker/config.json

{
"auths": {
"https://index.docker.io/v1/": {
"auth": "c3R...zE2"
}
}
}

创建一个基于现有凭证的 Secret

命令行的形式

1
2
3
kubectl create secret generic regcred \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson

如果需要更多的设置(例如,为新 Secret 设置名字空间或标签), 则可以在存储 Secret 之前对它进行自定义。

注意的点:

1
2
3
4
5
6
7
8
9
# 示例:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson

检查 Secret regcred

用 yaml 格式去查看

1
kubectl get secret regcred --output=yaml

.dockerconfigjson 字段的值是 Docker 凭证的 base64 表示。

要了解 dockerconfigjson 字段中的内容,请将 Secret 数据转换为可读格式:

1
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

要了解 auth 字段中的内容,请将 base64 编码过的数据转换为可读格式:

1
echo "c3R...zE2" | base64 --decode

使用 Secret

示例:

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
# 添加 secrets
imagePullSecrets:
- name: regcred