Harbor v2.9.0版本變化及離線部署
版本變化
1.1 更新內(nèi)容
- 安全中心管理員用戶現(xiàn)在可以訪問有價(jià)值的安全見解,其中包括掃描和未掃描的項(xiàng)目數(shù)量、危險(xiǎn)項(xiàng)目和 CVE 的識(shí)別,以及使用多個(gè)組合條件對(duì)漏洞的高級(jí)搜索功能。
- GC 增強(qiáng)功能通過詳細(xì)的 GC 執(zhí)行歷史記錄提高可見性,并啟用并行刪除以加快 GC 觸發(fā)器。
- 支持 OCI 分發(fā)規(guī)范 v1.1.0-rc2Harbor 現(xiàn)在支持 OCI Distribution Spec v1.1.0-rc2,并增加了對(duì)符號(hào)簽名和 Nydus 轉(zhuǎn)換作為引用的支持。
- 自定義橫幅消息管理員現(xiàn)在可以設(shè)置顯示在 Harbor 網(wǎng)頁頂部的自定義橫幅消息,其也是在生產(chǎn)環(huán)境比較實(shí)用的功能,在harbor的運(yùn)維過程中,Harbor中存儲(chǔ)多個(gè)項(xiàng)目的鏡像,如果存儲(chǔ)空間滿時(shí)可向用戶發(fā)布清理鏡像的”通告“而不需要管理員來清理鏡像,以防止重要的鏡像被誤刪的情況。
功能使用如圖位置:
圖片
- 配額更新提供程序引入了一種利用 Redis 在推送鏡像時(shí)配額更新期間進(jìn)行樂觀鎖定的新機(jī)制。有關(guān)啟用和使用此功能的說明,請參閱 https://github.com/goharbor/perf/wiki/Quota-Update 中的文檔。
- 移除Notary從版本 v2.9.0 開始,Harbor 不再在用戶界面或后端中包含 Notary。詳情請瀏覽至此頁面。
1.2 已知問題
如果使用版本低v20.10.10的Docker在線/離線安裝Harbor 2.9.0,則可能會(huì)遇到Harbor數(shù)據(jù)庫容器無法啟動(dòng)的問題。此問題正在 (#19141) 進(jìn)行跟蹤。有關(guān)此特定問題的更多詳細(xì)信息,請?jiān)L問此頁面(timescale/timescaledb-docker-ha#260)。
為避免此問題,建議在將 Harbor v20.10.10 與在線/離線安裝程序一起使用時(shí),確保 Docker 版本等于或大于 2.9.0。
安裝部署(離線)
適用于多個(gè)版本,離線安裝的步驟基本沒什么變化。
2.1 主機(jī)初始化
① 關(guān)閉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
- 啟動(dòng)docker
$ systemctl enable --now docker
- 修改docker配置 在insecure-registries參數(shù)后填寫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"
}
}
- 重啟服務(wù)
$ 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
⑤ 配置內(nèi)核參數(shù)
配置3個(gè)必要的內(nèi)核參數(shù),其他內(nèi)核參數(shù)可自行添加。
$ modprobe br_netfilter #加載內(nèi)核模塊(臨時(shí))
$ 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:開啟路由轉(zhuǎn)發(fā)(不配置該參數(shù),當(dāng)主機(jī)重啟后,服務(wù)狀態(tài)正常,卻無法訪問到服務(wù)器)
⑥ 安裝cfssl證書工具(可選)
https模式需要簽發(fā)證書,本處使用cfssl向Harbor簽發(fā)證書,
下載二進(jìn)制可執(zhí)行文件并放入到/usr/local/bin/下并給執(zhí)行權(quán)限即完成。
$ 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 簽發(fā)HTTPS證書(可選)
http模式可不需要進(jìn)行本處操作,生產(chǎn)環(huán)境建議使用https模式來保障安全。
本處使用cfssl向Harbor簽發(fā)證書,詳細(xì)見文章: https://mp.weixin.qq.com/s/T9xug20FNU3zOodno5IwPA
① 生成證書頒發(fā)機(jī)構(gòu)證書(CA)
自建CA證書頒發(fā)機(jī)構(gòu),使用剛才安裝好的cfssl工具為harbor制作頒發(fā)證書
- 生成并修改CA默認(rèn)配置文件
$ mkdir -p /app/harbor/ssl/ #創(chuàng)建證書存放目錄
$ cfssl print-defaults config > /app/harbor/ssl/ca-config.json #生成默認(rèn)配置文件
$ 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
圖片
- 生成并修改默認(rèn)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
可以看到,當(dāng)前目錄下新生成了ca.csr、ca-key.pem、ca.pem這3個(gè)文件。ca-key.pem、ca.pem這兩個(gè)是CA相關(guān)的證書,通過這個(gè)CA來向Harbor頒發(fā)證書。
圖片
② CA給Harbor頒發(fā)證書
Harbor使用類似于申請表的一個(gè)請求文件向CA機(jī)構(gòu)申請證書,CA機(jī)構(gòu)則根據(jù)配置文件(證書策略)和請求文件(申請表)向Harbor頒發(fā)證書。
- 創(chuàng)建并修改Harbor證書請求文件
使用以下命令創(chuàng)建一個(gè)默認(rèn)的請求文件,但默認(rèn)的部分參數(shù)需要修改。
$ 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頒發(fā)證書
CA使用請求文件根據(jù)配置向Harbor頒發(fā)證書。
$ 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 #聲明變量,指定版本號(hào)
$ 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
② 導(dǎo)入鏡像
$ docker load -i harbor.v$HARBOR_VERSION.tar.gz
③ 修改配置文件
將配置模板復(fù)制為配置文件后修改配置參數(shù)
$ 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監(jiān)控
port: 9090
path: /metric
其他配置參數(shù)根據(jù)需要進(jìn)行修改。
④ 加載配置
在安裝目錄下執(zhí)行./prepare加載各個(gè)組件的配置。
$ ./prepare
圖片
⑤ 安裝啟動(dòng)Harbor
$ ./install.sh --with-trivy
圖片
圖片
出現(xiàn):? ----Harbor has been installed and started successfully.則表示安裝成功
服務(wù)驗(yàn)證
3.1 檢查服務(wù)及組件狀態(tài)
$ docker-compose ps
圖片
服務(wù)正常!
登錄Harbor UI
瀏覽器輸入https://192.168.2.19:443
圖片
圖片
圖片
圖片
登錄正常!
參考文獻(xiàn)
https://github.com/goharbor/harbor/releases