文章目录
- 配置Harbor镜像仓库HTTPS Secure Registry
-
- 前言
- 生成证书
-
- 生成CA证书
- 生成证书签名请求(CSR)
- 生成Harbor证书(Harbor hostname为IP)
- CA证书文件列表
- 复制证书到指定位置
- 配置Harbor
- 通过浏览器访问Harbor
- 配置Docker
- 参考文档
-
配置Harbor镜像仓库HTTPS Secure Registry
前言
在之前的文章我们介绍了如何搭建Harbor镜像仓库 HTTP Insecure Registry,这篇文章我们再来介绍如何为Harbor镜像仓库配置HTTPS。
生成证书
生成CA证书
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 3650 -out ca.crt \
-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=example/OU=example/CN=example"
subj参数说明如下:
字段 | 字段含义 | 示例 |
---|---|---|
/C= | Country 国家 | CN |
/ST= | State or Province 省 | Guangdong |
/L= | Location or City 城市 | Guangzhou |
/O= | Organization 组织或企业 | |
/OU= | Organization Unit 部门 | |
/CN= | Common Name 域名或IP |
生成证书签名请求(CSR)
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout harbor.key \
-out harbor.csr \
-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=example/OU=example/CN=example"
生成Harbor证书(Harbor hostname为IP)
创建一个配置文件来指定IP地址:
vim extfile.cnf
subjectAltName = IP:192.168.37.170
生成Harbor证书:
openssl x509 -req -days 3650 \
-in harbor.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-extfile extfile.cnf \
-out harbor.crt
CA证书文件列表
文件名 | 说明 |
---|---|
ca.crt | CA证书公钥 |
ca.key | CA证书密钥(不能公布和泄露) |
harbor.crt | Harbor证书公钥 |
harbor.key | Harbor证书密钥(不能公布和泄露) |
复制证书到指定位置
sudo cp *.crt *.key /etc/ssl/certs
配置Harbor
编辑
harbor.cfg
文件:
ui_url_protocol = https
ssl_cert = /etc/ssl/certs/harbor.crt
ssl_cert_key = /data/cert/harbor.key
重新配置Harbor:
docker-compose down -v
./prepare
docker-compose up -d
通过浏览器访问Harbor
在浏览器中打开https://<harbor_hostname>来访问Harbor。
在Firefox浏览器中可以添加Security Exception来忽略HTTPS错误警告。
Chrome浏览器可以尝试通过导入CA证书的方式来忽略HTTPS错误警告。
注意:Chrome浏览器可能有导入CA证书后仍然无法访问的问题。
配置Docker
如果之前在
/etc/docker/daemon.json
中定义了
insecure-registries
,则需要移除
insecure-registries
,并运行以下命令重新加载和重启Docker:
systemctl daemon-reload
systemctl restart docker
尝试运行
docker login <harbor_hostname>
来访问Harbor,因为未配置证书会遇到"x509 certificate signed by unknown authority"的错误。
请参考下面的文章来配置Docker的证书:
- Harbor docker login x509 certificate signed by unknown authority
配置好后,尝试
docker login
、
docker pull
和
docker push
命令是否工作正常。
除了在Harbor的机器上配置Docker外,其它机器的Docker想要访问Harbor也要参考上面的文章来配置证书。
参考文档
- https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
- https://blog.inkubate.io/how-to-use-harbor-private-registry-with-kubernetes/
- https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https
- https://www.shellhacks.com/create-csr-openssl-without-prompt-non-interactive/