Kubernetes部署Nexus3后配置Docker私有仓库

上一篇文章(https://www.jianshu.com/p/cc4817e014df)中,我们成功使用Kubernetes搭建了Nexus3,但是如果使用Nexus3中的docker私有仓库功能,我们还需要额外做一些操作,今天我们就来完善它

0x01. 创建Docker私有仓库

我们打开上一次我们部署好的Nexus3,以管理员身份登录之后进入仓库管理页面


Kubernetes部署Nexus3后配置Docker私有仓库_第1张图片
k8s-nexus-docker01.png

点开创建仓库页面后,我们在创库种类列表中选择docker(hosted),三种类型分别表示如下:

  • docker(proxy):对其他仓库进行代理,比如docker中央仓库
  • docker(hosted):本地存储docker镜像数据,即搭建一个和docker官方仓库一样的可以存储docker镜像的私服
  • docker(group):聚合仓库,其实就是通过配置将多个docker仓库引用合并成一个仓库对外开放


    Kubernetes部署Nexus3后配置Docker私有仓库_第2张图片
    k8s-nexus-docker02.png

在仓库信息配置页面中,请填写仓库名称,勾选HTTP并填写HTTP监听端口号、勾选对docker V1 API的支持,我这里填写的是8082端口号,实际中读者可以根据自己服务器的实际情况进行填写,一定要记住这里填写的端口号,我们稍后会用到。至于docker v1 的支持根据自己的需要,如果自己的docker客户端肯定是V2版本那么可以不勾选。


Kubernetes部署Nexus3后配置Docker私有仓库_第3张图片
k8s-nexus-docker03.png

本页面的其他选项默认可以不进行修改,直接点击创建仓库【Create repository】按钮即可


Kubernetes部署Nexus3后配置Docker私有仓库_第4张图片
k8s-nexus-docker04.png

0x02. 修改kubernetes的配置文件

修改后的配置文件(repo-nexus.yaml)内容如下:

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    app: repo-nexus
  name: repo-nexus
  namespace: repo-nexus
spec:
  replicas: 1
  selector:
    matchLabels:
      app: repo-nexus
  template:
    metadata:
      labels:
        app: repo-nexus
    spec:
      containers:
        - name: repo-nexus
          image: registry.docker-cn.com/sonatype/nexus3:latest
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 8081
            protocol: TCP
          - containerPort: 8082
            protocol: TCP
          volumeMounts:
          - name: repo-nexus-data
            mountPath: /nexus-data
      volumes:
        - name: repo-nexus-data
          persistentVolumeClaim:
            claimName: repo-nexus-pvc

---
# service
kind: Service
apiVersion: v1
metadata:
  labels:
    app: repo-nexus
  name: repo-nexus
  namespace: repo-nexus
spec:
  ports:
    - port: 8081
      targetPort: 8081
      name: repo-base
    - port: 8082
      targetPort: 8082
      name: repo-docker
  selector:
    app: repo-nexus

---
# ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: repo-nexus
  namespace: repo-nexus
spec:
  rules:
  - host: repo.lemonit.cn
    http:
      paths:
      - path: /
        backend:
          serviceName: repo-nexus
          servicePort: 8081
  - host: docker.repo.lemonit.cn
    http:
      paths:
      - path: /
        backend:
          serviceName: repo-nexus
          servicePort: 8082

本配置文件共做了如下修改:

  • Deployment中spec/template/spec/containers/ports字段增加了一组元素,配置containerPort为8082,这里的端口号对应刚才我们在创建仓库的页面中填写的HTTP监听的端口号,注意!!!一定要匹配!!!
  • Service中的spec/ports字段增加了一组元素,设置对外端口号port和容器targetPort,因为出现了多组端口,还需要为每组端口号增加name属性,否则应用配置的时候kubernetes会报错service invalid。这里为了方便记忆,把对外端口号port和容器端口号targetPort设置成了一样的8082
  • Ingress中spec/rules字段增加一组元素,配置一个新的监听,监听域名docker.repo.lemonit.cn,后端的serviceName同样为repo-nexus,端口号为刚刚service port:8082
    这三项修改完毕后,我们使用命令对配置进行生效操作:
kubectl apply -f repo-nexus.yaml

0x03. 后续配置

这一步主要是kubernetes之外的外部操作,根据自己的情况进行操作,主要分以下两步:

  1. 申请docker.repo.lemonit.cn域名和对应的SSL证书,建议配置SSL证书,否则Docker访问http的仓库的时候还需要进行配置操作。腾讯云可以免费申请SSL证书。
  2. 在外部的负载均衡中配置docker.repo.lemonit.cn的SSL证书,并将其代理转发到kubernetes中的ingress外部节点上

我的负载均衡因为配置到了8445端口号上,所以最后得到的完整地址为

docker.repo.lemonit.cn:8445

0x04. 测试

接下来,我们将从docker hub中pull下来的busybox镜像推送到我们的私有仓库进行测试,首先在装有docker的机器上从docker hub中pull镜像

docker pull busybox:latest

然后对pull下来的镜像进行tag标记

docker tag busybox:latest docker.repo.lemonit.cn:8445/busybox:latest

推送之前,我们还需要登录到docker仓库

docker login docker.repo.lemonit.cn:8445

执行命令之后会提示分别输入username和password,这里可以使用nexus的默认admin账号密码进行登录,也可以在Nexus3中单独建立一个只有docker仓库权限的账号进行登录,提示Login Succeeded说明登录成功。
接下来,我们将这个镜像推到私有仓库中

docker push docker.repo.lemonit.cn:8445/busybox:latest

控制台输出如下,推送成功

LemonITCNdeMacBook-Pro: ~ $ docker push docker.repo.lemonit.cn:8445/busybox:latest
The push refers to repository [docker.repo.lemonit.cn:8445/busybox]
8a788232037e: Pushed 
latest: digest: sha256:915f390a8912e16d4beb8689720a17348f3f6d1a7b659697df850ab625ea29d5 size: 527

在客户端推送完毕后,我们去Nexus中可以查看到我们刚刚成功推送的busybox镜像


Kubernetes部署Nexus3后配置Docker私有仓库_第5张图片
k8s-nexus-docker05.png

有不懂的朋友欢迎评论问我,或者加我微信,微信号: qbxx002

你可能感兴趣的:(Kubernetes部署Nexus3后配置Docker私有仓库)