k8s中使用私有仓库harbor拉取镜像

2018-06-27 6430点热度 1人点赞 0条评论

官方文档

Pull an Image from a Private Registry

前置条件

  1. 已经安装完成kubernetes集群
  2. 已经安装完成harbor
  3. 在harbor中创建完成项目,用户,把用户添加到项目的成员当中,成员具有pull镜像的权限

登录到harbor

根据配置的harbor域名,登录到harbor当中,如:

docker login xf.com

输入用户名和密码,即可登录成功。登录完成之后会在config.json文件中保存授权令牌。通过以下命令查看config.json

cat ~/.docker/config.json

文件内容如下:

{
        "auths": {
                "xf.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镜像仓库域名,如xf.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被分配到了哪个节点上,看节点上是否已经成功下载了所需要的镜像。

王显锋

激情工作,快乐生活!

文章评论