官方文档
Pull an Image from a Private Registry
前置条件
已经安装完成kubernetes集群
已经安装完成harbor
在harbor中创建完成项目,用户,把用户添加到项目的成员当中,成员具有pull镜像的权限
登录到harbor
根据配置的harbor域名,登录到harbor当中,如:
docker login reg.com
输入用户名和密码,即可登录成功。登录完成之后会在config.json文件中保存授权令牌。通过以下命令查看config.json
cat ~/.docker/config.json
文件内容如下:
{
"auths": {
"reg.com": {
"auth": "d2FuZ3hpYW5mZW5xxlhpYW5mZW5nOTk="
}
}
}
在k8s集群中创建一个Secret,包含harbor授权令牌
当从私有仓库harbor中pull镜像的时候,k8s集群使用类型为docker-registry的Secret进行认证。
现在创建一个Secret,名称为regcred:
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
your-registry-server 私有docker镜像仓库域名,如reg.com
your-name is your Docker username.
your-pword is your Docker password.
your-email is your Docker email.
看一下Secret regcred的详细信息
使用如下命令查看regcred的详细信息
kubectl get secret regcred --output=yaml
输出类似如下:
apiVersion: v1
data:
.dockerconfigjson: eyJhdXRocyI6eyJha...PVGs9In19fQ==
kind: Secret
metadata:
creationTimestamp: 2018-06-27T02:43:53Z
name: regcred
namespace: default
resourceVersion: "3399680"
selfLink: /api/v1/namespaces/default/secrets/regcred
uid: ee450abc-79b3-11e8-b5d7-286ed488c89e
type: kubernetes.io/dockerconfigjson
其中.dockerconfigjson的值包含了登录harbor的用户名和密码等信息,通过以下命令进行查看:
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d
用Secret创建一个Pod
创建文件private-reg-pod.yaml,使用Secret regcred
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: xf.com/4a/nginx
imagePullSecrets:
- name: regcred
要从私有仓库pull镜像,k8s需要认证信息,imagePullSecrets这个配置信息指明了k8s需要从名称为regcred的Secret中获取认证信息。然后使用如下命令创建Pod
kubectl create -f private-reg-pod.yaml
kubectl get pod private-reg
需要查看Pod被分配到了哪个节点上,看节点上是否已经成功下载了所需要的镜像。