官方文档: Secret | Kubernetes
ImagePullSecrets的设置是kubernetes机制的另一亮点,习惯于直接使用Docker Pull来拉取公共镜像,但非所有容器镜像都是公开的。此外,并不是所有的镜像仓库都允许匿名拉取,也就是说需要身份认证;
kubernetes有一个secret记录类型,可用于配置镜像登陆凭证,secret的一个特定的类型:kubernetes.io/dockercfg 或者 kubernetes.io/dockerconfigjson。与所有kubernetes记录一样,Secrets通过名称被其他资源引用。此处是通过ImagePullSecrets来引用Secret的。
创建Secrets资源
# Docker Config 创建 Secret
kubectl create secret docker-registry \
harbor-secret \
--docker-server=harbor.codemiracle.com \
--docker-username=admin \
--docker-password=Harbor12345
kubectl create secret docker-registry <secret名字> \
--docker-server=<镜像仓库服务器> \
--docker-username=<用户名> \
--docker-password=<密码> \
--docker-email=<邮箱地址>
# 使用 kubernetes.io/dockerconfigjson 类型的 Secret 来通过镜像仓库的身份验证
服务器上我们 docker login 一个镜像仓库,会生成一个文件:~/.docker/config.json>
kubectl create secret generic <secret名字> \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson
kubectl create secret generic harbor-secret \
--from-file=.dockerconfigjson=~/.docker/config.json \
--type=kubernetes.io/dockerconfigjson
查看secrets资源
kubectl get secrets
引入imagePullSecrets
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: harbor-secret
注意:secret需要各自添加下namespace,只针对各自的命名空间生效
apiVersion: v1
kind: Secret
metadata:
name: harbor-secret
namespace: public
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson
参考资料:
1.https://kubernetes.io/zh-cn/docs/concepts/containers/images/
2.https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials