部署示范
Harbor的部署
配置
- 服务器:腾讯云
- Linux版本:
Linux VM-4-12-centos 3.10.0-1160.90.1.el7.x86_64
- Docker:
Docker version 24.0.5, build ced0996
- Docker-Comose:
docker-compose version 1.24.1, build 4667896b
下载Harbor离线安装包
解压后的目录如下
harbor |
OpenSSL自签证书
为了保证Harbor的安全性,我们需要为Harbor配置一个SSL证书以保证安全,防止黑客篡改
使用可信证书颁发机构(CA)签发的证书,要么1年需要换一次,要么3个月需要续签名一次。可是我们的Harbor启动后,除非有安全漏洞,否则启动后,可能几年都不会做一次变更。这个时候,怎么办呢?
我们使用OpenSSL自签名证书,不过浏览器不信任这种证书,用户在首次访问时会收到安全警告
创建目录
存放生成的证书
mkdir /root/cert |
生成CA证书
生成CA密钥
openssl genrsa -out ca.key 4096 |
genrsa
:表示要生成一个 RSA 密钥对。-out ca.key
:指定生成的私钥将保存在名为ca.key
的文件中。4096
:表示生成的 RSA 私钥使用 4096 位的密钥长度。
生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \ |
-
-x509
:表示生成自签名的 X.509 格式证书。 -
-new
:表示生成一个新的证书请求。 -
-nodes
:表示生成的私钥不加密。 -
-sha512
:表示使用 SHA-512 算法进行签名。 -
-days 3650
:表示证书的有效期为 3650 天(大约 10 年)。 -
-subj "/C=CN/ST=Chongqing/L=Chongqing/O=Redrock/OU=Personal/CN=harbor.yiiong.top"
:设置证书的 Subject 字段信息,包括国家(C=CN)、省份(ST=Chongqing)、城市(L=Chongqing)、组织(O=Redrock)、组织单位(OU=Personal)和通用名称(CN=harbor.yiiong.top)。 -
-key ca.key
:指定使用之前生成的ca.key
文件作为证书的私钥。 -
-out ca.crt
:指定生成的证书将保存在名为ca.crt
的文件中。.crt (Certificate):
.crt
文件是数字证书文件的扩展名,用于存储证书的内容。证书通常用于建立安全连接,并验证服务器(或客户端)的身份和信任
生成Server证书
生成 Server 证书私钥
# 生成密钥 |
生成Server证书签名请求(CSR)
openssl req -sha512 -new \ |
-
-out server.csr
:指定生成的证书签名请求将保存在名为server.csr
的文件中。.csr (Certificate Signing Request):
.csr
文件用于向证书颁发机构(CA)提交请求,申请签发数字证书。
生成 x509 v3 证书扩展文件
cat > v3.ext <<-EOF |
v3.ext
可以被用于在签署证书时指定证书的一些属性和要求,比如证书的用途、适用主题名称等。通常用于构建自签名证书或配置 CA 签发证书时的扩展属性。
使用 CA 证书签发 Server 证书
openssl x509 -req -sha512 -days 3650 \ |
-extfile v3.ext
:指定了存储证书扩展信息的文件v3.ext
。-CA ca.crt
:指定了 CA 证书文件ca.crt
,用于签署服务器证书。-CAkey ca.key
:指定用于签署证书的 CA 私钥文件ca.key
。-CAcreateserial
:表示自动生成一个序列号文件,用于签署的证书。-in server.csr
:表示输入待签署的服务器证书签名请求文件server.csr
。-out server.crt
:表示输出签署的服务器证书文件为server.crt
。
一共有如下这些
[root@VM-4-12-centos harbor]# cd /root/cert |
为 Harbor 和 Docker 配置证书
将 server 证书和密钥复制到 Harbor 主机上的 /data/cert 目录中
mkdir -p /data/cert |
转换 server.crt 为 server.cert
.crt 和 .cert 本质上没有区别,并且通常可以互换使用。为什么还要把.crt转为.cert呢?因为Docker 客户端默认将文件名 .cert
视为客户端证书.
openssl x509 -inform PEM -in server.crt -out server.cert |
将 server 证书,密钥和 CA 证书复制到 Harbor 主机上的 Docker 证书目录中
mkdir -p /etc/docker/certs.d/harbor.yiiong.top:8443 |
查看 Docker 证书目录文件
[root@VM-4-12-centos harbor.yiiong.top:8443]# ll |
重启Docker
systemctl restart docker |
初始化Harbor
将模板复制一份
cp harbor.yml.tmpl harbor.yml |
在harbor.yml
中修改如下的参数
- hostname:Harbor的访问地址,最好写ip
- https/port:对外暴露8443端口,记得放行8443端口
- https/certificate: 使用宿主机的SSL证书文件。也就是.crt的位置
- https/certificate: 使用宿主机的SSL证书文件,是.key的位置
安装
./install.sh |
访问
https访问,并且加上8443端口号
登录
在/etc/docker/daemon.json
中加入Harbor仓库地址以允许 Docker 客户端连接到该不安全的注册表而不进行证书验证。
{ |
更改配置的操作
使用 prepare 脚本生成 HTTPS 配置
./prepare |
删除原有 Harbor 容器
docker-compose down -v |
重新启动 Harbor
docker-compose up -d |
问题与解决
1.出现
root@master2:~# docker login https://harbor.yiiong.top:8443 |
原因: /etc/docker/daemon.json
中没有更新 Harbor 注册表的证书配置,我们只需要把Harbor地址添加到 Docker 的不安全注册表列表中,允许 Docker 客户端连接到该不安全的注册表而不进行证书验证。
1.出现Error response from daemon: failed to create task for container: failed to initialize logging driver: dial tcp [::1]:1514: connect: connection refused
取消rsyslog.conf文件第19,20行注释,并将514改为1514
vim /etc/rsyslog.conf |
# 重启rsyslog |
2.出现Error response from daemon: driver failed programming external connectivity on endpoint nginx (191f6b9a13a1d60e6f9656c7f8030be35bcd96395c524f8fc4af5c83e2b45f26): Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use
修改harbor.yml
中的http/port为没有占用的端口即可,然后记得放行端口