harbor搭建docker私有仓库 -配置https

miaodi
发布于 2020-10-18 / 2350 阅读
0

harbor搭建docker私有仓库 -配置https

1. 环境及参考

1.1 环境:

  • harbor server:
    • 系统:centos7
    • 内核版本:3.10.0-1127.13.1.el7.x86_64
    • 内网ip地址:192.168.8.200
    • 内网域名:harbor.bfmiaodi.top
  • harbor版本:1.9.4
  • Docker version 19.03.12, build 48a66213fe
  • docker-compose version 1.18.0, build 8dd22a9

1.2 其他:

harbor默认使用https,自签署证书的话每个客户端连接的时候都要做操作。域名是自己买的公网域名,内网里解析这个域名到harbor的地址,这样可以签署受信任的https证书。(各大厂商都有免费的ssl证书可以申请,每次一年有效期) 域名解析到ip地址使用的是路由器自带功能。(openwrt系统-接口-主机名) image.png 也可以使用named(bind)来自解析dns,个人不是很喜欢,家里电脑多,还需要改dns,路由器来的更实在。

1.3 相关参考

网络文章:

  • 主要参考这个: https://www.yuque.com/duduniao/docker/ohrxds#9Zpxx

官方参考文档:

  • 官网: https://goharbor.io/docs/2.0.0/install-config/download-installer/
  • https相关配置:https://goharbor.io/docs/2.0.0/install-config/configure-https/

2. 安装harbor

2.1 安装docker-ce及docker-compose

省略

2.2 下载harbor并解压

cd /opt
mkdir src certs release apps
cd /opt/src
wget https://github.com/goharbor/harbor/releases/download/v1.9.4/harbor-offline-installer-v1.9.4.tgz
mv harbor /opt/release/harbor-v1.9.4
ln -s /opt/release/harbor-v1.9.4 /opt/apps/harbor

2.3 编辑配置文件 harbor.yml

cd /opt/apps/harbor
vim harbor.yml

修改以下几个地方:

  • hostname 改为你的域名 如:harbor.bfmiaodi.top
  • https相关 先不配置 等先安装好harbor之后再配置
  • data_volume: /data/harbor
  • location: /data/harbor/logs
  • harbor_admin_password 管理员密码(账号为admin)
./install.sh

即可自动安装完成 安装完成后

docker ps

查看启动的harbor相关容器

访问内网域名或者ip登录web控制台

3. https配置

3.1 申请阿里云证书

网上教程基本都是自签证书,上传/拉取镜像还要加白名单,比较麻烦。 这里用的内网域名就是自己买的公网域名,可以直接申请受信任的证书,客户端不用做额外操作。 域名是在阿里云买的,直接申请的免费受信任证书,申请成功后下载nginx版本。 阿里云把免费证书申请藏得比较深,很不情愿让用户白白申请。这里说下路径: 控制台 -> ssl证书(应用安全)-> 购买证书 -> 单个域名 -> DV域名级SSL -> 免费版 到这里就可以直接点击购买了。 购买之后点申请,填写相关信息,提交申请,过几分钟一般自动就申请完成了。 申请成功后下载证书,选择nginx类型的。因为harbor使用了nginx代理。 将证书解压后拷贝到/opt/certs/目录下 编辑harbor.yml:

cd /opt/apps/harbor
vim harbor.yml

将https相关的配置都打开: certificate为pem文件的路径 private_key为key文件的路径

https:
#   # https port for harbor, default is 443
  port: 443
#   # The path of cert and key files for nginx
  certificate: /opt/certs/4640220_harbor.bfmiaodi.top.pem
  private_key: /opt/certs/4640220_harbor.bfmiaodi.top.key

重新启动harbor

4. 验证

4.1 新建仓库

登录web控制台, 新建两个项目 public的公开项目 private的私有项目 用于测试

上传镜像的方法,网页里已经给出 image.png

4.2 上传镜像

找一台安装docker的测试机器

[root@k-22 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
redis                   latest              235592615444        4 months ago        104MB
nginx                   latest              2622e6cca7eb        4 months ago        132MB
[root@k-22 ~]# docker tag nginx:latest harbor.bfmiaodi.top/public/nginx:latest
[root@k-22 ~]# docker push harbor.bfmiaodi.top/public/nginx:latest
The push refers to repository [harbor.bfmiaodi.top/public/nginx]
f978b9ed3f26: Layer already exists
9040af41bb66: Layer already exists
7c7d7f446182: Layer already exists
d4cf327d8ef5: Layer already exists
13cb14c2acd3: Layer already exists
errors:
denied: requested access to the resource is denied
unauthorized: authentication required

[root@k-22 ~]# docker login harbor.bfmiaodi.top
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@k-22 ~]# docker push harbor.bfmiaodi.top/public/nginx:latest
The push refers to repository [harbor.bfmiaodi.top/public/nginx]
f978b9ed3f26: Layer already exists
9040af41bb66: Layer already exists
7c7d7f446182: Layer already exists
d4cf327d8ef5: Layer already exists
13cb14c2acd3: Layer already exists
latest: digest: sha256:0efad4d09a419dc6d574c3c3baacb804a530acd61d5eba72cb1f14e1f5ac0c8f size: 1362
[root@k-22 ~]# docker logout harbor.bfmiaodi.top
Removing login credentials for harbor.bfmiaodi.top

私有仓库一样的,这里就不贴了。

4.3 拉取公开仓库

image.png

  1. 直接拉取公开仓库镜像--成功
  2. 上传公开仓库--失败(需要登录才能上传)

4.4 拉取私有仓库

image.png

  1. 直接拉取私有仓库镜像--失败
  2. 登录私有仓库
  3. 再次拉取私有仓库镜像--成功
  4. 查看已经拉取的镜像