Harbor v2.9.0版本變化及離線部署
版本變化
1.1 更新內容
- 安全中心管理員用戶現在可以訪問有價值的安全見解,其中包括掃描和未掃描的項目數量、危險項目和 CVE 的識別,以及使用多個組合條件對漏洞的高級搜索功能。
- GC 增強功能通過詳細的 GC 執行歷史記錄提高可見性,并啟用并行刪除以加快 GC 觸發器。
- 支持 OCI 分發規范 v1.1.0-rc2Harbor 現在支持 OCI Distribution Spec v1.1.0-rc2,并增加了對符號簽名和 Nydus 轉換作為引用的支持。
- 自定義橫幅消息管理員現在可以設置顯示在 Harbor 網頁頂部的自定義橫幅消息,其也是在生產環境比較實用的功能,在harbor的運維過程中,Harbor中存儲多個項目的鏡像,如果存儲空間滿時可向用戶發布清理鏡像的”通告“而不需要管理員來清理鏡像,以防止重要的鏡像被誤刪的情況。
功能使用如圖位置:
圖片
- 配額更新提供程序引入了一種利用 Redis 在推送鏡像時配額更新期間進行樂觀鎖定的新機制。有關啟用和使用此功能的說明,請參閱 https://github.com/goharbor/perf/wiki/Quota-Update 中的文檔。
- 移除Notary從版本 v2.9.0 開始,Harbor 不再在用戶界面或后端中包含 Notary。詳情請瀏覽至此頁面。
1.2 已知問題
如果使用版本低v20.10.10的Docker在線/離線安裝Harbor 2.9.0,則可能會遇到Harbor數據庫容器無法啟動的問題。此問題正在 (#19141) 進行跟蹤。有關此特定問題的更多詳細信息,請訪問此頁面(timescale/timescaledb-docker-ha#260)。
為避免此問題,建議在將 Harbor v20.10.10 與在線/離線安裝程序一起使用時,確保 Docker 版本等于或大于 2.9.0。
安裝部署(離線)
適用于多個版本,離線安裝的步驟基本沒什么變化。
2.1 主機初始化
① 關閉SELinux、swap
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 禁用Swap
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
$ swapoff -a
② 配置repo源
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ wget http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
$ yum clean all
③ 安裝docker-ce
- 下載rpm包并安裝
$ mkdir docker-ce
$ yum install -y docker-ce --downloadonly --downloaddir=./docker-ce/
$ yum install -y rpm/*.rpm
- 啟動docker
$ systemctl enable --now docker
- 修改docker配置 在insecure-registries參數后填寫Harbor的地址及端口
$ cat /etc/docker/daemon.json
{
"registry-mirrors": ["http://127.0.0.1:65001"],
"insecure-registries": ["192.168.2.19:443","134.194.15.150:1021"], "storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=systemd"] ,
"graph": "/dcos/data/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "500m"
}
}
- 重啟服務
$ systemctl daemon-reload && systemctl restart docker
④ 安裝docker-compose
docker-compose的版本在1.18.0+
$ wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64
$ mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
⑤ 配置內核參數
配置3個必要的內核參數,其他內核參數可自行添加。
$ modprobe br_netfilter #加載內核模塊(臨時)
$ cat > /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl -p
net.ipv4.ip_forward:開啟路由轉發(不配置該參數,當主機重啟后,服務狀態正常,卻無法訪問到服務器)
⑥ 安裝cfssl證書工具(可選)
https模式需要簽發證書,本處使用cfssl向Harbor簽發證書,
下載二進制可執行文件并放入到/usr/local/bin/下并給執行權限即完成。
$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssl_1.6.0_linux_amd64 -O /usr/local/bin/cfssl
$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssljson_1.6.0_linux_amd64 -O /usr/local/bin/cfssljson
$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssl-certinfo_1.6.0_linux_amd64 -O /usr/local/bin/cfssl-certinfo
$ chmod +x /usr/local/bin/cfssl*
cfssl version
Version: 1.6.0
Runtime: go1.18
2.2 簽發HTTPS證書(可選)
http模式可不需要進行本處操作,生產環境建議使用https模式來保障安全。
本處使用cfssl向Harbor簽發證書,詳細見文章: https://mp.weixin.qq.com/s/T9xug20FNU3zOodno5IwPA
① 生成證書頒發機構證書(CA)
自建CA證書頒發機構,使用剛才安裝好的cfssl工具為harbor制作頒發證書
- 生成并修改CA默認配置文件
$ mkdir -p /app/harbor/ssl/ #創建證書存放目錄
$ cfssl print-defaults config > /app/harbor/ssl/ca-config.json #生成默認配置文件
$ cat <<EOF > /app/harbor/ssl/ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"harbor": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
圖片
- 生成并修改默認csr請求文件
$ cfssl print-defaults csr > /app/harbor/ssl/ca-csr.json
$ cat <<EOF > /app/harbor/ssl/ca-csr.json
{
"CN": "harbor",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Beijing",
"L": "Beijing"
}
]
}
EOF
圖片
- 初始化CA證書
$ cfssl gencert -initca /app/harbor/ssl/ca-csr.json | cfssljson -bare /app/harbor/ssl/ca
$ ls /app/harbor/ssl/
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
可以看到,當前目錄下新生成了ca.csr、ca-key.pem、ca.pem這3個文件。ca-key.pem、ca.pem這兩個是CA相關的證書,通過這個CA來向Harbor頒發證書。
圖片
② CA給Harbor頒發證書
Harbor使用類似于申請表的一個請求文件向CA機構申請證書,CA機構則根據配置文件(證書策略)和請求文件(申請表)向Harbor頒發證書。
- 創建并修改Harbor證書請求文件
使用以下命令創建一個默認的請求文件,但默認的部分參數需要修改。
$ cfssl print-defaults csr > /app/harbor/ssl/harbor-csr.json
$ cat /app/harbor/ssl/harbor-csr.json
{
"CN": "harbor",
"hosts": [
"127.0.0.1",
"192.168.2.19",
"lidabai.harbor.cn"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing"
}
]
}
圖片
- CA向Harbor頒發證書
CA使用請求文件根據配置向Harbor頒發證書。
$ cfssl gencert -ca=/app/harbor/ssl/ca.pem \
-ca-key=/app/harbor/ssl/ca-key.pem \
-cnotallow=/app/harbor/ssl/ca-config.json \
-profile=harbor /app/harbor/ssl/harbor-csr.json | cfssljson -bare /app/harbor/ssl/harbor
$ ls /app/harbor/ssl/
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem harbor.csr harbor-csr.json harbor-key.pem harbor.pem
$ cp harbor.pem harbor-key.pem /app/harbor/ssl/
圖片
安裝
① 下載離線安裝包
$ export HARBOR_VERSION=2.9.0 #聲明變量,指定版本號
$ wget https://github.com/goharbor/harbor/releases/download/v$HARBOR_VERSION/harbor-offline-installer-v$HARBOR_VERSION.tgz
$ tar -zxvf harbor-offline-installer-v$HARBOR_VERSION.tg z -C /app/
harbor/harbor.v$HARBOR_VERSION.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl
② 導入鏡像
$ docker load -i harbor.v$HARBOR_VERSION.tar.gz
③ 修改配置文件
將配置模板復制為配置文件后修改配置參數
$ cp harbor.yml.tmpl harbor.yml
$ vim harbor.yml
hostname: lidabai.harbor.com
http:
port: 80
# 啟用https
https:
port: 443
certificate: /app/harbor/ssl/harbor.pem #Harbor的證書
private_key: /app/harbor/ssl/harbor-key.pem #Harbor的證書私鑰
metric:
enabled: true #開啟Harbor Metrics監控
port: 9090
path: /metric
其他配置參數根據需要進行修改。
④ 加載配置
在安裝目錄下執行./prepare加載各個組件的配置。
$ ./prepare
圖片
⑤ 安裝啟動Harbor
$ ./install.sh --with-trivy
圖片
圖片
出現:? ----Harbor has been installed and started successfully.則表示安裝成功
服務驗證
3.1 檢查服務及組件狀態
$ docker-compose ps
圖片
服務正常!
登錄Harbor UI
瀏覽器輸入https://192.168.2.19:443
圖片
圖片
圖片
圖片
登錄正常!
參考文獻
https://github.com/goharbor/harbor/releases