Harbor:v05.0 部署(HTTPS)

Harbor 默认 HTTP 请求注册服务器,并不分发任何证书。使得其配置相对简单。然而,强烈建议在生产环境中加强安全性。Harbor 有一个 Nginx 实例为全部服务提供反向代理,你能够在 Nginx 配置中启用 HTTPS 。node

获取证书

假定你的仓库的 hostnamereg.yourdomain.com,而且其 DNS 记录指向主机正在运行的 Harbor。首先,你须要获取一个 CA 证书。证书一般包含一个 .crt 文件和 .key 文件,例如, yourdomain.com.crtyourdomain.com.keynginx

在测试或开发环境中,你可能会选择使用自签名证书,而不是购买 CA 证书。下面的命令会生成自签名证书:docker

1) 生成自签名 CA 证书:浏览器

openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout ca.key \
  -x509 -days 365 -out ca.crt

2) 生成证书签名请求:安全

若是使用 FQDN (彻底限定域名) 如 reg.yourdomain.com 做为你的注册服务器链接,那你必须使用 reg.yourdomain.com 做为 CN (Common Name)。另外,若是使用 IP 地址做为你的注册服务器链接,CN 能够是你的名字等等:bash

openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \
  -out yourdomain.com.csr

3) 生成注册服务器证书:服务器

假定你使用相似 reg.yourdomain.com 这样的 FQND 做为注册服务器链接,运行下面的命令为你的注册服务器生成证书:app

openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt

假定你使用 IP , 如 192.168.1.101 做为注册服务器链接,你能够运行如下命令:dom

echo subjectAltName = IP:192.168.1.101 > extfile.cnf

openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com
.crt

配置和安装

在取得 yourdomain.com.crtyourdomain.com.key 文件后,你能够将它们放置在如 /root/cert/ 目录下:测试

cp yourdomain.com.crt /root/cert/
cp yourdomain.com.key /root/cert/

接下来,编辑 harbor/make/harbor.cfg, 更新 hostnameprotocolssl_certssl_cert_key 属性:

#set hostname
hostname = reg.yourdomain.com
#set ui_url_protocol
ui_url_protocol = https
......
#The path of cert and key files for nginx, they are applied only the protocol is set to https
ssl_cert = /root/cert/yourdomain.com.crt
ssl_cert_key = /root/cert/yourdomain.com.key

为 Harbor 生成配置文件:

# 工做目录 harbor/make
./prepare

若是 Harbor 已经在运行,则中止并删除实例。你的镜像数据将保留在文件系统中。

# 工做目录 harbor/make
# 在运行 compose 前, 需将 docker-compose.tpl 文件重命名为 docker-compose.yaml
mv docker-compose.tpl docker-compose.yaml
docker-compose down

最后,重启 Harbor:

docker-compose up -d

在为 Harbor 配置 HTTPS 完成后,你能够经过如下步骤对它进行验证:

  1. 打开浏览器,并输入地址:https://reg.yourdomain.com。应该会显示 Harbor 的界面。

  2. 在装有 Docker daemon 的机器上,确保 Docker engine 配置文件中没有配置 "-insecure-registry",而且,你必须将已生成的 ca.crt 文件放入 /etc/docker/certs.d/yourdomain.com(或 / etc/docker/certs.d/your registry host IP) 目录下,若是这个目录不存在,则建立它。
    若是你将 nginx 的 443 端口映射到其余端口上了,你须要建立目录的为 /etc/docker/certs.d/yourdomain.com:port(/etc/docker/certs.d/your registry host IP:port)。而后,运行以下命令验证是否安装成功。

docker login reg.yourdomain.com

若是你将 nginx 443 端口映射到其余端口上,则须要在登陆时添加端口号,如:

docker login reg.yourdomain.com:port

疑难解答

1. 你多是经过证书发行商获取中间证书。在这种状况下,你应该合并中间证书与自签证书,经过以下命令便可实现:

cat intermediate-certificate.pem >> yourdomain.com.crt

2. 在一些运行着 docker daemon 的系统中,你可能须要操做系统级别的信任证书。

  • 在 Ubuntu 上, 能够经过如下命令来完成:

cp youdomain.com.crt /usr/local/share/ca-certificates/reg.yourdomain.com.crt
update-ca-certificates
  • 在 Red Hat (CentOS etc) 上, 命令以下:

cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt
update-ca-trust
相关文章
相关标签/搜索