Harbor 簡介
Harbor是VMware公司開源的企業(yè)級(jí)DockerRegistry項(xiàng)目获黔,其目標(biāo)是幫助用戶迅速搭建一個(gè)企業(yè)級(jí)的Dockerregistry服務(wù)。
它以Docker公司開源的registry為基礎(chǔ)熟妓,提供了管理UI聋伦,基于角色的訪問控制(Role Based Access Control),AD/LDAP集成、以及審計(jì)日志(Auditlogging) 等企業(yè)用戶需求的功能球昨,同時(shí)還原生支持中文。
架構(gòu)及組件
image
- 主要組件包括proxy眨攘,他是一個(gè)nginx前端代理主慰,主要是分發(fā)前端頁面ui訪問和鏡像上傳和下載流量,上圖通過深藍(lán)色線標(biāo)志鲫售;
- ui提供了一個(gè)web管理頁面河哑,當(dāng)然還包括了一個(gè)前端頁面和后端API,底層使用mysql數(shù)據(jù)庫龟虎;
- registry是鏡像倉庫,負(fù)責(zé)存儲(chǔ)鏡像文件沙庐,當(dāng)鏡像上傳完畢后通過hook通知ui創(chuàng)建repositry鲤妥,上圖通過紅色線標(biāo)志佳吞,當(dāng)然registry的token認(rèn)證也是通過ui組件完成;
- adminserver是系統(tǒng)的配置管理中心附帶檢查存儲(chǔ)用量棉安,ui個(gè)jobservice啟動(dòng)時(shí)候需要加載adminserver的配置底扳,通過灰色線標(biāo)志;
- jobservice是負(fù)責(zé)鏡像復(fù)制工作的贡耽,他和registry通信衷模,從一個(gè)registry pull鏡像然后push到另一個(gè)registry,并記錄job_log蒲赂,上圖通過紫色線標(biāo)志阱冶;log是日志匯總組件,通過docker的log-dirver把日志匯總到一起滥嘴,通過藍(lán)色線條標(biāo)志木蹬。
依賴 & 部署
- 底座環(huán)境: K8s/K3s
- 軟件依賴: Helm3 & Git
- 存儲(chǔ)依賴: Rook Ceph
# 配置 helm 源
helm repo add harbor https://helm.goharbor.io
helm repo update
helm pull harbor/harbor
tar xf harbor-x.x.x.tgz
- 配置 PV & PVC
云原生的存儲(chǔ)類可以有多種選擇,nfs 或者 ceph 等多種類型的存儲(chǔ)若皱,本文選擇 rook 已經(jīng)在集群中配置好的存儲(chǔ)類進(jìn)行服務(wù)訪問镊叁,查看本地可用的 sc :
kubectl get sc
image
image
- 部署檢查
# 0 部署
helm install harbor harbor
# 1 查看 pv & pvc
kubectl get pv -A | grep harbor
kubectl get pvc -A | grep harbor
# 2 查看 pod
kubectl get pod -A | grep harbor
# 3 查看 svc
kubectl get svc -A | grep harbor
# 4 查看 ingress
kubectl get ingress -A | grep harbor
image
- Ingress 配置
備注:helm 部署 harbor 以后,默認(rèn)的 Ingress 是不可用的走触,需要結(jié)合實(shí)際情況進(jìn)行配置晦譬,比如需要考慮到的問題有 Ingress-nginx 還是 treafik 的控制器控制的服務(wù)訪問,正如我的集群環(huán)境使用到的正是基于 K3s 集群的 treafik 負(fù)載均衡器互广,所以配置方式如下:
kubectl get ingress -n default harbor-harbor-ingress -oyaml > harbor-core-ingress.yaml
kubectl get ingress -n default harbor-harbor-ingress-notary -oyaml > harbor-harbor-notary-ingress.yaml
編輯 ingress 的負(fù)載映射如下:
image
kubectl apply -f harbor-core-ingress.yaml
kubectl apply -f harbor-harbor-notary-ingress.yaml
image
強(qiáng)調(diào)說明: 刪除無用信息敛腌,增加控制器字段,不要名稱沖突即可兜辞。
- 瀏覽器訪問
配置訪問主機(jī)hosts:
image
image
image
插件 & 使用
- docker添加harbor證書
對(duì)于需要使用harbor倉庫的節(jié)點(diǎn)迎瞧,都要添加harbor證書:
kubectl get secrets harbor-harbor-ingress -o jsonpath="{.data.ca\.crt}" | base64 --decode
image
在邊緣節(jié)點(diǎn)添加證書,進(jìn)行登錄驗(yàn)證:
# 添加證書驗(yàn)證路徑
mkdir -p /etc/docker/certs.d/core.harbor.domain
# 追加上文證書到證書文件中
vi /etc/docker/certs.d/core.harbor.domain/ca.crt
# 追加域名到 /etc/hosts
vi /etc/hosts
image
[root@vm3290 tmp]# docker login core.harbor.domain -u admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
- push插件
[root@vm3290 tmp]# helm plugin install https://github.com/chartmuseum/helm-push
Downloading and installing helm-push v0.9.0 ...
https://github.com/chartmuseum/helm-push/releases/download/v0.9.0/helm-push_0.9.0_linux_amd64.tar.gz
Installed plugin: push
[root@vm3290 tmp]# helm plugin ls
W0215 05:21:14.927672 4760 loader.go:223] Config not found: /etc/rancher/k3s/k3s.yaml
NAME VERSION DESCRIPTION
push 0.9.0 Push chart package to ChartMuseum
image
拓展閱讀
- harbor 進(jìn)行 helm 管理:
$helm plugin install https://github.com/chartmuseum/helm-push
$helm repo add mylibrary http://core.harbor.domain/chartrepo/library --ca-file /etc/docker/certs.d/core.harbor.domain/ca.crt
$helm repo list
NAME URL
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
local http://127.0.0.1:8879/charts
mylibrary http://xxxx/chartrepo/library
bitnami https://charts.bitnami.com
image
- harbor 上傳 charts (helm3 不一定可行逸吵,需要結(jié)合不同的 helm 版本進(jìn)行分析):
helm fetch stable/redis-ha #下載charts
helm push redis-ha-2.0.1.tgz mylibrary #上傳到私有倉庫