使用HTTPS访问Docker私有镜像仓库Harbor的配置方法

由于Harbor未附带任何证书,因此默认情况下使用HTTP来提供注册表请求。 但是,强烈建议为任何生产环境启用安全性。 Harbor有一个Nginx实例作为所有服务的反向代理,所以可以使用prepare脚本配置Nginx以启用https。
考虑到Docker服务访问Registry已经是默认使用https方式,我们并不希望因为使用Harbor作为镜像仓库,而去修改docker的启动参数。

获得证书

假定你的Docker私有仓库的hostname是reg.yourdomain.com,并且其DNS记录指向您正在运行Harbor的主机。 您首先应该从CA获得证书。 证书通常包含a.crt文件和a.key文件,例如yourdomain.com.crt和yourdomain.com.key。
在测试或开发环境中,您可以选择使用自签名证书而不是CA中的证书。
通过以下命令生成一个自签的证书:

创建你自己的CA证书

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

创建一个证书请求

如果您使用reg.yourdomain.com等FQDN连接registry主机,则必须使用reg.yourdomain.com作为证书的CN(通用名称)。 否则,如果是使用IP地址连接您的registry主机,CN可以是任意字符串,例如您的名字等:

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

生成证书

如果您使用reg.yourdomain.com等FQDN连接registry主机,请运行此命令以生成registry主机的证书:

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

如果您使用IP,例如172.16.10.102来连接registry主机,则可以改为运行以下命令:

echo subjectAltName = IP:172.16.10.102 > extfile.cnf
  openssl x509 -req -days 365 -in 172.16.10.102.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out 172.16.10.102.crt

查看下都生成了哪些文件

# ls
172.16.10.102.crt  172.16.10.102.csr  172.16.10.102.key  ca.crt  ca.key  ca.srl  extfile.cnf

安装和配置

在获取了yourdomain.com.crt和yourdomain.com.key文件后,可以将它们放入/root/cert/等目录中:

  cp yourdomain.com.crt /etc/harbor/ssl
  cp yourdomain.com.key /etc/harbor/ssl

因为我们这个例子中使用的是ip,所以应该执行下面命令:

  cp 172.16.10.102.crt /etc/harbor/ssl
  cp 172.16.10.102.key /etc/harbor/ssl

接下来,编辑文件harbor.cfg,更新hostname和protocol,并更新属性ssl_cert和ssl_cert_key:

  #set hostname
  hostname = 172.16.10.102
  #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 = /etc/harbor/ssl/172.16.10.102.crt
  ssl_cert_key = /etc/harbor/ssl/172.16.10.102.key

为Harbor生成配置文件:

./prepare

如果Harbor已在运行,请停止并删除现有实例。 您的镜像数据会保留在文件系统中。

docker-compose down  

最后,重启Harbor服务:

docker-compose up -d

必须将上述步骤中生成的ca.crt复制到/etc/docker/certs.d/reg.yourdomain.com(或您的registry主机IP),如果该目录不存在,请创建它。 如果您将nginx端口443映射到另一个端口,那么您应该创建目录/etc/docker/certs.d/reg.yourdomain.com:port(或您的registry主机IP:port)。

cp ca.crt /etc/docker/certs.d/172.16.10.102/

如果您已将nginx 443端口映射到另一个端口,则需要将端口添加到登录,如下所示:

docker login 172.16.10.102:[PORT]

为Harbor设置HTTPS后,您可以通过以下步骤进行验证:

  • 打开浏览器并输入地址:https://172.16.10.102。 它应该显示Harbor的用户界面。
  • 在运行Docker守护进程的计算机上,请确保选项“-insecure-registry”不存在。
  • Harbor服务的初始登录账号为admin/Harbor12345

运行下面docker命令来验证设置

# docker login 172.16.10.102
Username: admin
Password:
Login Succeeded
[root@kube-node2 harbor]#
# docker tag busybox:latest 172.16.10.102/test-corp/busybox:v1.0
# docker push 172.16.10.102/test-corp/busybox:v1.0
The push refers to repository [172.16.10.102/test-corp/busybox]
f9d9e4e6e2f0: Pushed
v1.0: digest: sha256:5e8e0509e829bb8f990249135a36e81a3ecbe94294e7a185cc14616e5fad96bd size: 527

在浏览器页面中查看下项目仓库:
Harbor项目仓库

故障排除

1、您可以从证书颁发者那里获得中间证书intermediate certificate。 在这种情况下,您应该将中间证书与您自己的证书合并以创建证书包。 您可以通过以下命令实现此目的:

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

2、在某些运行docker守护程序的系统上,您可能需要配置操作系统级别信任该证书。
在Ubuntu上,这可以通过以下命令完成:

cp youdomain.com.crt /usr/local/share/ca-certificates/reg.yourdomain.com.crt
update-ca-certificates

在红帽系统上,则执行以下命令:

cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt
update-ca-trust

猜你喜欢

转载自blog.csdn.net/watermelonbig/article/details/82667497
今日推荐