Harbor 是開放原始碼容器登錄。可以將適用於 Harbor 登錄的 TKG 延伸部署為要部署到 Tanzu Kubernetes 叢集之容器映像的私人登錄存放區。
Harbor 延伸版本相依性
元件 | 最低版本 |
---|---|
vCenter Server | 7.0.2.00400 |
vSphere 命名空間 | 0.0.10-18245956 |
主管叢集 | v1.20.2+vmware.1-vsc0.0.10-18245956 |
Tanzu Kubernetes 版本 | v1.20.7+vmware.1-tkg.1.7fb9067 |
Harbor 延伸必要條件
- 佈建叢集。請參閱使用 TKGS v1alpha2 API 佈建 Tanzu Kubernetes 叢集的工作流程。
- 連線至叢集。請參閱以 vCenter Single Sign-On 使用者身分連線至 Tanzu Kubernetes 叢集。
- 下載 TKG 延伸 v1.3.1 服務包到執行 kubectl 命令的用戶端主機。
- 在目標叢集上安裝 TKG 延伸必要條件。
Harbor 延伸其他需求
- Harbor 延伸需要預設 PVC 儲存區類別。請參閱檢閱 TKG 延伸的持續性儲存區需求。
- Harbor 延伸需要 HTTP/S 入口。具體來說,Harbor 服務將透過 Contour 延伸中的 Envoy 服務公開。必要條件是部署 Contour 延伸。請參閱部署和管理適用於 Contour 入口的 TKG 延伸。
- 如果要針對 主管叢集 使用 NSX-T 網路,請建立類型為 LoadBalancer 的 Envoy 服務。
- 如果要針對 主管叢集 使用 vSphere vDS 網路,請建立類型為 LoadBalancer 或類型為 NodePort 的 Envoy 服務,具體取決於您的環境和需求。
- Harbor 延伸需要 DNS。安裝 Harbor 延伸後,您需要設定 DNS。
- 出於測試和驗證目的,請將 Harbor 和 Notary FQDN 新增至本機 /etc/hosts 檔案。以下指示說明了如何執行此操作。
- 在生產環境中,Harbor 要求本機 DNS 伺服器 (例如 BIND) 或公有雲 (例如 AWS Route53、Azure DNS 或 Google CloudDNS) 上具有 DNS 區域。設定 DNS 後,若要向 DNS 伺服器自動登錄 Harbor FQDN,請安裝外部 DNS 延伸。請參閱部署和管理適用於外部 DNS 服務探索的 TKG 延伸。
部署 Harbor 延伸
容器 | 資源類型 | 複本 | 說明 |
---|---|---|---|
harbor-core |
部署 | 1 | 適用於 Envoy 的管理和組態伺服器 |
harbor-database |
網繭 | 1 | Postgres 資料庫 |
harbor-jobservice |
部署 | 1 | Harbor 工作服務 |
harbor-notary-server |
部署 | 1 | Harbor Notary 服務 |
harbor-notary-signer |
部署 | 1 | Harbor Notary |
harbor-portal |
部署 | 1 | Harbor Web 介面 |
harbor-redis |
網繭 | 1 | Harbor Redis 執行個體 |
harbor-registry |
部署 | 2 | Harbor 容器登錄執行個體 |
harbor-trivy |
網繭 | 1 | Harbor 映像弱點掃描程式 |
- 確認您已完成各個延伸必要條件。請參閱Harbor 延伸必要條件和Harbor 延伸其他需求。
- 將目錄變更為 Harbor 延伸。
cd /tkg-extensions-v1.3.1+vmware.1/extensions/registry/harbor
- 建立
tanzu-system-registry
命名空間以及 Harbor 服務帳戶和角色。kubectl apply -f namespace-role.yaml
- 建立 Harbor 資料值檔案。
cp harbor-data-values.yaml.example harbor-data-values.yaml
- 在
harbor-data-values.yaml
中指定必要的密碼和秘密金鑰。Harbor 登錄要求在資料表中列出並說明數個密碼和秘密金鑰。密碼或秘密金鑰 說明 harborAdminPassword
Harbor 管理員的初始密碼。 secretKey
用於加密的秘密金鑰。必須是包含 16 個字元的字串。 database.password
Postgres 資料庫的初始密碼。 core.secret
當核心伺服器與其他元件通訊時,將使用密碼。 core.xsrfKey
XSRF 金鑰。必須是包含 32 個字元的字串。 jobservice.secret
當工作服務與其他元件通訊時,將使用密碼。 registry.secret
密碼可用來保護用戶端和登錄儲存區後端的上傳狀態。 harbor-data-values.yaml
檔案,請執行下列命令:bash generate-passwords.sh harbor-data-values.yaml
成功後,您應該會看到下列訊息:Successfully generated random passwords and secrets in harbor-data-values.yaml
開啟
harbor-data-values.yaml
檔案,並驗證強制密碼和秘密金鑰。 - 如有必要,請在
harbor-data-values.yaml
中指定其他 Harbor 組態值。通常更新的值可能包括下列內容:組態欄位 說明 hostname
預設 Harbor 主機名稱為
core.harbor.domain
。如有必要,請變更此值以符合您的需求。
port.https
預設值為
443
。如果要針對 主管叢集 使用 NSX-T 網路,並因此使用類型為 LoadBalancer 的 Envoy 入口服務,請將此設定保留為預設
443
。如果要針對 主管叢集 使用 vDS 網路,並因此使用類型為 NodePort 的 Envoy 入口服務,請將此值設定為與 Envoy 節點連接埠相符。
clair.enabled
為了支援 Trivy,Clair 映像掃描程式已棄用。兩者皆在組態檔中啟用。
透過將 Clair 的值設定為
false
來停用 Clair。persistence.persistentVolumeClaim. <component>.accessMode
此設定有數個執行個體。
預設值為
ReadWriteOnce
。ReadWriteMany
已排定為在即將推出的版本中受到支援。imageChartStorage.type
預設值為
filesystem
。請根據需要進行變更,並設定所使用的儲存區。
proxy
如果需要,請為 Harbor 設定 Proxy。如果已設定 Proxy,則需要預設 noProxy
值。 - 使用資料值建立密碼。
kubectl create secret generic harbor-data-values --from-file=values.yaml=harbor-data-values.yaml -n tanzu-system-registry
secret/harbor-data-values
是在tanzu-system-registry
命名空間中建立的。透過執行下列命令進行驗證:kubectl get secrets -n tanzu-system-registry
- 部署 Harbor 延伸。
kubectl apply -f harbor-extension.yaml
成功後,您應該會看到
app.kappctrl.k14s.io/harbor created
。 - 檢查 Harbor 應用程式的狀態。
kubectl get app harbor -n tanzu-system-registry
成功後,狀態會從Reconciling
變更為Reconcile succeeded
。NAME DESCRIPTION SINCE-DEPLOY AGE harbor Reconciling 96s 98s
NAME DESCRIPTION SINCE-DEPLOY AGE harbor Reconcile succeeded 39s 2m29s
如果狀態為Reconcile failed
,請參閱疑難排解 Harbor 登錄部署。 - 檢視有關 Harbor 延伸的詳細資訊。
kubectl get app harbor -n tanzu-system-registry -o yaml
- 檢視 Harbor 部署物件的狀態。
kubectl get deployments -n tanzu-system-registry
成功後,您應該會看到下列部署:
NAME READY UP-TO-DATE AVAILABLE AGE harbor-core 1/1 1 1 5m16s harbor-jobservice 1/1 1 1 5m16s harbor-notary-server 1/1 1 1 5m16s harbor-notary-signer 1/1 1 1 5m16s harbor-portal 1/1 1 1 5m16s harbor-registry 1/1 1 1 5m16s
- 檢視 Harbor 網繭的狀態:
kubectl get pods -n tanzu-system-registry
NAME READY STATUS RESTARTS AGE harbor-core-9cbf4b79d-gxvgx 1/1 Running 0 7m11s harbor-database-0 1/1 Running 0 7m11s harbor-jobservice-6b656ccb95-lm47d 1/1 Running 0 7m11s harbor-notary-server-8494c684db-gm7jf 1/1 Running 0 7m11s harbor-notary-signer-6f96b549d4-dzcnm 1/1 Running 0 7m11s harbor-portal-5b8f4ddbd-qdnp2 1/1 Running 0 7m11s harbor-redis-0 1/1 Running 0 7m11s harbor-registry-688894c58d-72txm 2/2 Running 0 7m11s harbor-trivy-0 1/1 Running 0 7m11s
- 如有必要,請對 Harbor 安裝進行疑難排解。請參閱疑難排解 Harbor 登錄部署。
使用類型為 LoadBalancer 的 Envoy 服務為 Harbor 設定 DNS (NSX-T 網路)
- 取得類型為 LoadBalancer 的 Envoy 服務的
External-IP
位址。kubectl get service envoy -n tanzu-system-ingress
您應該會看到傳回的External-IP
位址,例如:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE envoy LoadBalancer 10.99.25.220 10.195.141.17 80:30437/TCP,443:30589/TCP 3h27m
或者,也可以使用下列命令取得External-IP
位址。kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
- 若要驗證 Harbor 延伸的安裝,請使用對應至負載平衡器的
External-IP
位址的 Harbor 和 Notary FQDN 來更新本機/etc/hosts
檔案,例如:127.0.0.1 localhost 127.0.1.1 ubuntu # TKGS Harbor with Envoy Load Balancer IP 10.195.141.17 core.harbor.domain 10.195.141.17 core.notary.harbor.domain
- 若要驗證 Harbor 延伸的安裝,請登入 Harbor。請參閱登入 Harbor Web 介面。
- 在 DNS 伺服器上建立兩個 CNAME 記錄,以將 Envoy 服務負載平衡器
External-IP
位址對應至 Harbor FQDN 和 Notary FQDN。 - 安裝外部 DNS 延伸。請參閱部署和管理適用於外部 DNS 服務探索的 TKG 延伸。
使用類型為 NodePort 的 Envoy 服務為 Harbor 設定 DNS (vDS 網路)
harbor-data-values.yaml
檔案中指定正確的
port.https
值。
- 將內容切換至佈建叢集所在的 vSphere 命名空間。
kubectl config use-context VSPHERE-NAMESPACE
- 列出叢集中的節點。
kubectl get virtualmachines
您應該會看到叢集節點,例如:NAME POWERSTATE AGE tkgs-cluster-X-control-plane-6dgln poweredOn 6h7m tkgs-cluster-X-control-plane-j6hq6 poweredOn 6h10m tkgs-cluster-X-control-plane-xc25f poweredOn 6h14m tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm poweredOn 6h12m tkgs-cluster-X-workers-9twdr-59bc54dc97-pjptr poweredOn 6h12m tkgs-cluster-X-workers-9twdr-59bc54dc97-t45mn poweredOn 6h12m
- 使用下列命令選擇其中一個 worker 節點並加以說明。
kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- 找到虛擬機器的 IP 位址,例如
Vm Ip: 10.115.22.43
。 - 若要驗證 Harbor 延伸的安裝,請使用對應至 worker 節點 IP 位址的 Harbor 和 Notary FQDN 來更新本機
/etc/hosts
檔案,例如:127.0.0.1 localhost 127.0.1.1 ubuntu # TKGS Harbor with Envoy NodePort 10.115.22.43 core.harbor.domain 10.115.22.43 core.notary.harbor.domain
- 若要驗證 Harbor 延伸的安裝,請登入 Harbor。請參閱登入 Harbor Web 介面。
- 在 DNS 伺服器上建立兩個 CNAME 記錄,以將 worker 節點 IP 位址對應至 Harbor FQDN 和 Notary FQDN。
- 安裝外部 DNS 延伸。請參閱部署和管理適用於外部 DNS 服務探索的 TKG 延伸。
登入 Harbor Web 介面
- 存取位於 https://core.harbor.domain 的 Harbor 登錄 Web 介面或您使用的主機名稱。
- 透過使用者名稱 admin 以及您在
harbor-data-values.yaml
檔案中產生的密碼登入 Harbor。 - 確認您可以存取 Harbor 使用者介面。
- 取得 Harbor CA 憑證。
在 Harbor 介面中,選取新專案。
,或建立按一下登錄憑證,然後下載 Harbor CA 憑證 (ca.crt)。
- 將 Harbor CA 憑證新增至 Docker 用戶端的信任存放區,以便能夠將容器映像推送至 Harbor 登錄以及從中提取容器映像。請參閱使用內嵌式 Harbor 登錄 憑證設定 Docker 用戶端。
- 如需有關使用 Harbor 的詳細資料,請參閱 Harbor 說明文件。
疑難排解 Harbor 登錄部署
如果部署或協調失敗,請執行 kubectl get pods -n tanzu-system-registry
以檢視網繭狀態。harbor
網繭的狀態應為 Running
。如果網繭狀態為 ImagePullBackOff
或 ImageCrashLoopBackOff
,則無法提取容器映像。檢查資料值和延伸 YAML 檔案中的登錄 URL,並確保其正確無誤。
name-XXXX
是
kubectl get pods -A
執行所在的唯一網繭名稱:
kubectl logs pod/harbor-XXXXX -c harbor -n tanzu-system-registry
更新 Harbor 延伸
更新部署到 Tanzu Kubernetes 叢集的 Contour 延伸。
- 從密碼取得 Harbor 資料值。
kubectl get secret harbor-data-values -n tanzu-system-registry -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > harbor-data-values.yaml
- 更新
harbor-data-values.yaml
中的 Harbor 資料值。 - 更新 Harbor 資料值密碼。
kubectl create secret generic harbor-data-values --from-file=values.yaml=harbor-data-values.yaml -n tanzu-system-registry -o yaml --dry-run | kubectl replace -f-
將使用新的資料值來協調 Harbor 延伸。備註: 依預設,kapp-controller 將每 5 分鐘同步一次應用程式。更新應在 5 分鐘內生效。如果您想讓更新立即生效,請變更harbor-extension.yaml
中的syncPeriod
為較小值,然後使用kubectl apply -f harbor-extension.yaml
來套用 Contour 延伸。 - 檢查該延伸的狀態。
kubectl get app harbor -n tanzu-system-registry
更新 Contour 之後,Contour 應用程式狀態應變更為
Reconcile Succeeded
。 - 檢視詳細狀態和疑難排解。
kubectl get app harbor -n tanzu-system-registry -o yaml
刪除 Harbor 延伸
從 Tanzu Kubernetes 叢集刪除 Harbor 延伸。
- 將目錄變更為 Harbor 延伸檔案的下載位置。
cd /extensions/registry/harbor/
- 刪除 Harbor 應用程式。
kubectl delete app harbor -n tanzu-system-registry
預期的結果:app.kappctrl.k14s.io "harbor" deleted
- 確認 Harbor 應用程式是否已刪除。
kubectl get app Harbor -n tanzu-system-registry
預期的結果:應用程式為Not Found
。apps.kappctrl.k14s.io "harbor" not found
- 刪除登錄命名空間。
僅在您確認 Harbor 延伸及應用程式已完全刪除後,才能安全地刪除命名空間和角色物件。
kubectl delete -f namespace-role.yaml
預期的結果:刪除部署了 Harbor 的命名空間以及相關聯的角色型存取控制物件。namespace "tanzu-system-registry" deleted serviceaccount "harbor-extension-sa" deleted role.rbac.authorization.k8s.io "harbor-extension-role" deleted rolebinding.rbac.authorization.k8s.io "harbor-extension-rolebinding" deleted clusterrole.rbac.authorization.k8s.io "harbor-extension-cluster-role" deleted clusterrolebinding.rbac.authorization.k8s.io "harbor-extension-cluster-rolebinding" deleted
升級 Harbor 延伸
- 取得 Harbor configmap。
kubectl get configmap harbor -n tanzu-system-harbor -o 'go-template={{ index .data "harbor.yaml" }}' > harbor-configmap.yaml
- 刪除現有的 Harbor 部署。請參閱刪除 Harbor 延伸。
- 部署 Harbor 延伸。請參閱部署 Harbor 延伸。