4. Harbor http 域名部署
4.1 清理杂质
$ docker-compose down [+] Running 10/10 ⠿ Container harbor-jobservice Removed 10.5s ⠿ Container registryctl Removed 10.5s ⠿ Container nginx Removed 0.5s ⠿ Container harbor-portal Removed 0.4s ⠿ Container harbor-core Removed 10.5s ⠿ Container redis Removed 1.0s ⠿ Container harbor-db Removed 0.9s ⠿ Container registry Removed 11.1s ⠿ Container harbor-log Removed 10.7s ⠿ Network harbor_harbor Removed $ rm -rf /data/* $ rm -rf common
浏览器界面清理缓存
4.2 修改配置
a. harbor.yaml配置文件只修改了hostname参数
hostname: ghost.harbor.com
b.
$ echo "192.168.211.70 ghost.harbor.com" >> /etc/hosts $ nslookup ghost.harbor.com Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: ghost.harbor.com Address: 192.168.211.70
c.
docker配置文件/etc/docker/daemon.json 参数insecure-registries 由192.168.211.70修改为ghost.harbor.com
$ cat /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ], "insecure-registries": [ "ghost.harbor.com" ] }
并重启docker
systemctl daemon-reload && systemctl restart docker
4.3 harbor安装
$ ./prepare $ ./install.sh $ docker ps $ docker-compose ps
4.3 测试结果
4.3.1 仓库登陆
$ docker login ghost.harbor.com 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
4.3.2 界面登陆
本机windows配置
C:\Windows\System32\drivers\etc\hosts 192.168.211.70 ghost.harbor.com
用户名/密码:admin/Harbor12345
登陆成功
4.3.3 镜像推送
$ docker tag busybox:latest ghost.harbor.com/library/busybox:latest $ docker push ghost.harbor.com/library/busybox:latest The push refers to repository [ghost.harbor.com/library/busybox] cfd97936a580: Pushed latest: digest: sha256:febcf61cd6e1ac9628f6ac14fa40836d16f3c6ddef3b303ff0321606e55ddd0b size: 527
Harbor http域名访问的部署结束。
5. Harbor https ip访问部署
默认情况下,Harbor 不附带证书。可以在没有安全性的情况下部署 Harbor,以便您可以通过 HTTP 连接到它。但是,仅在没有连接到外部 Internet 的气隙测试或开发环境中才可接受使用 HTTP。在公有环境中使用 HTTP 会使您面临中间人攻击。在生产环境中,始终使用 HTTPS。如果您启用 Content Trust with Notary 以正确签署所有图像,则必须使用 HTTPS。
要配置 HTTPS,您必须创建 SSL 证书。您可以使用受信任的第三方 CA 签署的证书,也可以使用自签名证书。本节介绍如何使用 OpenSSL创建 CA,以及如何使用您的 CA 签署服务器证书和客户端证书。您可以使用其他 CA 提供商,例如 Let’s Encrypt。
以下过程假设您的 Harbor 注册表的主机名是192.168.211.70,并且其 DNS 记录指向您运行 Harbor 的主机。
5.1 清理杂质
$ docker-compose down [+] Running 10/10 ⠿ Container harbor-jobservice Removed 10.5s ⠿ Container registryctl Removed 10.5s ⠿ Container nginx Removed 0.5s ⠿ Container harbor-portal Removed 0.4s ⠿ Container harbor-core Removed 10.5s ⠿ Container redis Removed 1.0s ⠿ Container harbor-db Removed 0.9s ⠿ Container registry Removed 11.1s ⠿ Container harbor-log Removed 10.7s ⠿ Network harbor_harbor Removed $ rm -rf /data/* $ rm -rf common
5.2 修改配置
5.2.1 harbor.yaml
harbor.yaml配置文件修改hostname参数并配置了https相关参数
$ cat harbor.yml|grep -v '#' | grep -v '^$' hostname: 192.168.211.70 http: port: 80 https: port: 443 certificate: /data/cert/192.168.211.70.crt private_key: /data/cert/192.168.211.70.key harbor_admin_password: Harbor12345 database: password: root123 max_idle_conns: 100 max_open_conns: 900 data_volume: /data trivy: ignore_unfixed: false skip_update: false insecure: false jobservice: max_job_workers: 10 notification: webhook_job_max_retry: 10 chart: absolute_url: disabled log: level: info local: rotate_count: 50 rotate_size: 200M location: /var/log/harbor _version: 2.3.0 proxy: http_proxy: https_proxy: no_proxy: components: - core - jobservice - trivy
5.2.2 /etc/docker/daemon.json
docker配置文件/etc/docker/daemon.json 参数insecure-registries 要把它去掉。
$ cat /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] }
并重启docker
systemctl daemon-reload && systemctl restart docker
5.2.3 生成证书颁发机构证书
在生产环境中,您应该从 CA 获取证书。在测试或开发环境中,您可以生成自己的 CA。要生成 CA 证书,请运行以下命令。
生成 CA 证书私钥
$ openssl genrsa -out ca.key 4096 Generating RSA private key, 4096 bit long modulus (2 primes) ..............++++ .................................++++ e is 65537 (0x010001)
生成 CA 证书
调整-subj选项中的值以反映您的组织。如果使用 FQDN 连接 Harbor 主机,则必须将其指定为公用名 ( CN) 属性。
openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.211.70" \ -key ca.key \ -out ca.crt
5.2.4 生成服务器证书
证书通常包含一个.crt文件和一个.key文件,例如,192.168.211.70.crt和192.168.211.70.key.
生成私钥
openssl genrsa -out 192.168.211.70.key 4096
生成证书签名请求 (CSR)
调整-subj选项中的值以反映您的组织。如果使用 FQDN 连接 Harbor 主机,则必须将其指定为公用名 ( CN) 属性并在密钥和 CSR 文件名中使用它。
openssl req -sha512 -new \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.211.70" \ -key 192.168.211.70.key \ -out 192.168.211.70.csr
生成 x509 v3 扩展文件
无论您是使用 FQDN 还是 IP 地址连接到您的 Harbor 主机,您都必须创建此文件,以便为您的 Harbor 主机生成符合主题备用名称 (SAN) 和 x509 v3 的证书扩展要求。替换DNS条目以反映您的域。
使用该extfile.cnf文件为您的 Harbor 主机生成证书
将192.168.211.70CRS 和 CRT 文件名中的 替换为 Harbor 主机名
echo subjectAltName = IP:192.168.211.70 > extfile.cnf
openssl x509 -req -sha512 -days 3650 \ -extfile extfile.cnf \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in 192.168.211.70.csr \ -out 192.168.211.70.crt
5.2.5 向 Harbor 和 Docker 提供证书
生成后ca.crt,192.168.211.70.crt和192.168.211.70.key文件,必须将它们提供给Harbor and Docker,和重新配置harbor使用它们。
a. 将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中
mkdir /data/cert cp 192.168.211.70.crt /data/cert/ cp 192.168.211.70.key /data/cert/
b. 转换192.168.211.70.crt为192.168.211.70.cert,供 Docker 使用
Docker 守护进程将.crt文件解释为 CA 证书,将.cert文件解释为客户端证书。
openssl x509 -inform PEM -in 192.168.211.70.crt -out 192.168.211.70.cert
c. 将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。您必须首先创建适当的文件夹。
mkdir -p /etc/docker/certs.d/192.168.211.70/ cp 192.168.211.70.cert /etc/docker/certs.d/192.168.211.70/ cp 192.168.211.70.key /etc/docker/certs.d/192.168.211.70/ cp ca.crt /etc/docker/certs.d/192.168.211.70/
如果您将默认nginx端口 443映射到其他端口,请创建文件夹/etc/docker/certs.d/192.168.211.70:port或/etc/docker/certs.d/harbor_IP:port。
d. 重启docker
systemctl daemon-reload && systemctl restart docker
5.2.6 操作系统级别信任证书
e. 当 Docker 守护程序在某些操作系统上运行时,您可能需要在操作系统级别信任证书。
例如,运行以下命令
ubuntu
$ cp 192.168.211.70.crt /usr/local/share/ca-certificates/192.168.211.70.crt $ update-ca-certificates Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done.
Red Hat (CentOS etc):
$ cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crt $ update-ca-trust
5.3 部署或重新配置 Harbor
如果您尚未部署 Harbor,请参阅 配置 Harbor YML 文件以获取有关如何通过在 中指定hostname和https属性来配置 Harbor 以使用证书的信息harbor.yml。
如果您已经使用 HTTP 部署了 Harbor 并希望将其重新配置为使用 HTTPS,请执行以下步骤。a. 运行prepare脚本以启用 HTTPS
./prepare
b. 如果 Harbor 正在运行,请停止并删除现有实例
您的图像数据保留在文件系统中,因此不会丢失任何数据。
docker-compose down -v
c. 重启
docker-compose up -d
