使用 Harbor 2.6+ 搭建 私有的Docker Registry

Docker 官方的 Registry, Registry 2 的限制比较多,如果不设置证书,不能启用用户名验证。

改用 Harbor 搭建了一个 Docker Registry 仓库服务,中间遇到不少问题,总结一下,以备后续参考。

我搭建的服务域名用的是 hub.ihopeit.com, 端口是 1443 端口,没有使用 443 的默认 SSL 端口。 然后证书是使用自己签发的 SSL 证书,没有使用正式的 SSL 证书。

官方安装文档:

Harbor docs | Download the Harbor Installer

1).下载到压缩包之后,按照官方文档配置harbor.yml,

2). 参考官方文档,使用自己签发的 SSL 证书,

3). install.sh 之前先运行 ./prepare。

4).安装的时候,把 clair, chart registry 也安装上:

./install.sh --with-notary --with-clair --with-chartmuseum 

扫描二维码关注公众号,回复: 14591660 查看本文章

这样 docker 容器的安全扫描工具和 helm charts registry 也都可以用了。

注意:2.6.0 之后的 Harbo 用的是 clair, 而不是trivy 作为安全扫描工具,官方文档有误。

搭建完之后,用 admin 登录后台,创建 user 账号,创建 project。要创建 project 才能 push image。project 相当于 docker hub上的用户命名空间。

FAQ 1. 自己创建的 SSL 证书,从客户端访问,会遇到这个错误:

Get "https://hub.ihopeit.com:1443/v2/": x509: certificate signed by unknown authority

把域名加入到 insecure-registries 里面即可。

  "insecure-registries": ["harbor.test.com","registry.cn-shenzhen.aliyuncs.com"], # Docker如果需要从非正式证书的SSL源管理镜像,这里加上 insecure registries 的配置。

FAQ 2. 如果遇到 /harbor_cust_cert: No such file or directory 的问题,

1. 检查证书是否有拷贝到 YAML 文件中配置的 data_volume 指定的挂载的 /data 目录。

2.是否有运行 config 脚本。

harbor.yml 配置:

data_volume: /data/

FAQ 3. 按照官方文档执行安装脚本, 出现错误提示说需要设置 hostname, 实际上已经设置过了。

sudo ./install.sh --with-notary --with-trivy --with-chartmuseum

Note: Please set hostname and other necessary attributes in harbor.yml first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients.

这个问题是因为 2.6.0 之后的 Harbo 用的是 clair, 而不是trivy 作为安全扫描工具,官方文档有误.

FAQ 4. 如果遇到 harbor-jobservice 服务有这个错误, 检查服务里面是否配置有代理:

Failed on load rest config err:Get "http://core:8080/api/internal/configurations": dial tcp 172.22.0.8:8080: connect: connection refused

$docker exec -it harbor-jobservice  /bin/bash

$echo $http_proxy $https_proxy

把这些地址全部追加到下面2个文件的 noProxy/NO_PROXY 配置中:

127.0.0.1,localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair,chartmuseum,notary-server

vim ~/.docker/config.json

vim /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下 NO_PROXY 的内容配置:

[Service]

Environment=“HTTP_PROXY=192.168.1.19:1234"

Environment="HTTPS_PROXY=192.168.1.19:1234"

Environment="NO_PROXY=.example.com,hub.ihopeit.com,127.0.0.1,localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair,chartmuseum,notary-server"

如果不需要代理,直接去掉里面的 HTTP_PROXY, HTTPS_PROXY 也是可以的。 

重启 docker, 使得配置生效:

sudo systemctl daemon-reload

sudo systemctl restart docker

检查代理配置是否生效:

systemctl show --property=Environment docker > a.txt

cat a.txt

搭建完成 Harbor 之后, 用 admin 账号登录后台,创建 user 账号,并且设置为管理员,然后创建 project。要创建 project 才能 push image。project 相当于 docker hub上的用户命名空间。

使用创建的用户登录镜像仓库:

docker login hub.ihopeit.com:1443

之后 push docker 镜像到仓库中, 可以看到项目中的镜像仓库:

docker tag stilleshan/linux-command:latest hub.ihopeit.com:1443/ihopeit/linux-command:latest

docker push hub.ihopeit.com:1443/ihopeit/linux-command:latest

登录到镜像仓库: https://hub.ihopeit.com:1443

猜你喜欢

转载自blog.csdn.net/davidullua/article/details/127201833