Harbor 离线安装与启用 HTTPS
Harbor 离线安装与启用 HTTPS
在 Linux 上离线装 Harbor v2.3.4,再把默认的 http 改成 https。私有镜像仓库放内网,离线包装法和证书配置都按实际跑过的来。
环境与配置
系统 CentOS / Rocky Linux,root 或 sudo 权限,依赖 Docker、docker-compose、Python。
| 最低配置 | 推荐配置 | |
|---|---|---|
| CPU | 2C | 4C |
| RAM | 4G | 8G |
| Disk | 40GB | 160GB |
离线安装步骤
确认 Python、Docker、docker-compose 都已就绪。下载 Harbor 离线包并解压到 /usr/local/harbor/:
sudo wget https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz
sudo tar -zxvf harbor-offline-installer-v2.3.4.tgz
拷贝配置模板:
cd harbor && cp harbor.yml.tmpl harbor.yml
改 harbor.yml。hostname 用域名或 IP,不要用 localhost / 127.0.0.1。初始密码改掉默认值:
# 访问 harbor 的域名或 ip
hostname: <harbor-host>
# http 浏览器访问端口
http:
port: 80
# 推荐启用 https,不用就注释下面 3 行
https:
port: 443
certificate: /data/cert/harbor.your-domain.com.crt
private_key: /data/cert/harbor.your-domain.com.key
# Harbor 初始密码(账户默认 admin)
harbor_admin_password: <HARBOR_PASSWORD>
跑 install.sh 前,建议注释掉脚本里的 docker-compose up -d(约第 99 行),避免装完立即启动。
加载配置(在 harbor 目录下执行),这步会导入镜像并生成 docker-compose.yml:
sudo ./prepare
安装并启动:
sudo ./install.sh
# 确保 docker 已启动
sudo docker-compose up -d
访问 http://IP,用 admin 和上面设的密码登录。
启用 HTTPS
Harbor 默认 http,但 Docker 客户端默认走 https。要么在每台客户端配 insecure-registries,要么把 Harbor 改成 https。下面是 https 的配法。
创建 CA 证书
在 /data/cert/ 下操作:
# CA 私钥
sudo openssl genrsa -out ca.key 4096
# CA 证书,CN 填 Harbor 域名或 IP
sudo openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/CN=harbor.example.com" -key ca.key -out ca.crt
创建服务器证书
sudo openssl genrsa -out server.key 4096
sudo openssl req -new -sha512 -subj "/CN=harbor.example.com" -key server.key -out server.csr
用 v3.ext 签发主机证书
在 /data/cert/ 建 v3.ext。IP 访问的话:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:<harbor-host>
域名访问的话把 subjectAltName 改成 @alt_names 并加 [alt_names] 段列 DNS 名。
签发:
sudo openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
把证书提供给 Docker
Docker 守护进程把 .crt 当 CA 证书、.cert 当客户端证书,所以要把 server.crt 转成 server.cert:
sudo openssl x509 -inform PEM -in server.crt -out server.cert
建 Docker 证书目录,把三个文件拷进去:
sudo mkdir -p /etc/docker/certs.d/<harbor-host>/
sudo cp server.cert /etc/docker/certs.d/<harbor-host>/
sudo cp server.key /etc/docker/certs.d/<harbor-host>/
sudo cp ca.crt /etc/docker/certs.d/<harbor-host>/
改 harbor.yml 并重启
https:
port: 443
certificate: /data/cert/server.crt
private_key: /data/cert/server.key
cd /usr/local/harbor/
sudo ./prepare
sudo docker-compose down -v
sudo docker-compose up -d
本机验证(docker 和 harbor 同机):
sudo docker login <harbor-host>
远程客户端访问
把服务端证书拷到每台客户机的 /etc/docker/certs.d/<harbor 域名或 ip>/:
sudo mkdir /etc/docker/certs.d/<harbor-host>/
# <user> 是 Harbor 所在服务器的系统登录账户
sudo scp <user>@<harbor-host>:/data/cert/* /etc/docker/certs.d/<harbor-host>/
重启客户机 docker 并测试登录:
sudo systemctl restart docker
sudo docker login <harbor-host>