按照下列指示,在使用適用於 vSphere 7.x 的 TKr 佈建的 TKG 叢集上安裝 Harbor。
必要條件
請參閱在適用於 vSphere 7.x 的 TKr 上安裝標準套件的工作流程。
Harbor 需要 HTTP/S 入口。Harbor 服務將透過 Contour 套件中的 Envoy 服務公開。必要條件是部署 Contour 套件。請參閱
在適用於 vSphere 7.x 的 TKr 上安裝 Contour。
- 如果要針對 主管 使用 NSX 網路,請建立類型為 LoadBalancer 的 Envoy 服務。
- 如果要針對 主管 使用 vSphere vDS 網路,請建立類型為 LoadBalancer 或 NodePort 的 Envoy 服務,具體取決於您的環境和需求。
在生產環境中,Harbor 要求本機 DNS 伺服器 (例如 BIND) 或公有雲 (例如 AWS Route53 或 Azure DNS) 上具有 DNS 區域。設定 DNS 後,若要向 DNS 伺服器自動登錄 Harbor FQDN,請安裝 ExternalDNS 延伸。請參閱在適用於 vSphere 7.x 的 TKr 上安裝 ExternalDNS。
安裝 Harbor
若要使用標準套件安裝 Harbor 登錄,請完成下列步驟。
- 列出存放庫中可用的 Harbor 版本。
kubectl get packages -n tkg-system | grep harbor
- 建立
harbor.yaml
規格。apiVersion: v1 kind: ServiceAccount metadata: name: harbor-sa namespace: tkg-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: habor-role-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: harbor-sa namespace: tkg-system --- apiVersion: packaging.carvel.dev/v1alpha1 kind: PackageInstall metadata: name: harbor namespace: tkg-system spec: serviceAccountName: harbor-sa packageRef: refName: harbor.tanzu.vmware.com versionSelection: constraints: 2.7.1+vmware.1-tkg.1 #PKG-VERSION values: - secretRef: name: harbor-data-values --- apiVersion: v1 kind: Secret metadata: name: harbor-data-values namespace: harbor-registry stringData: values.yml: | namespace: tanzu-system-registry hostname: <ENTER-HARBOR-FQDN> port: https: 443 logLevel: info tlsCertificate: tls.crt: "" tls.key: "" ca.crt: tlsCertificateSecretName: enableContourHttpProxy: true harborAdminPassword: <ENTER-STRONG-PASSWORD-HERE> secretKey: <ENTER-SECRET-KEY> database: password: <ENTER-STRONG-PASSWORD-HERE> shmSizeLimit: maxIdleConns: maxOpenConns: exporter: cacheDuration: core: replicas: 1 secret: <ENTER-SECRET> xsrfKey: <ENTER-XSRF-KEY-WHICH-IS-AN-ALPHANUMERIC-STRING-WITH-32-CHARS> jobservice: replicas: 1 secret: <ENTER-SECRET> registry: replicas: 1 secret: <ENTER-SECRET> trivy: enabled: true replicas: 1 gitHubToken: "" skipUpdate: false persistence: persistentVolumeClaim: registry: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 50Gi jobservice: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 10Gi database: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 10Gi redis: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 10Gi trivy: existingClaim: "" storageClass: "<ENTER-STORAGE-CLASS>" subPath: "" accessMode: ReadWriteOnce size: 10Gi proxy: httpProxy: httpsProxy: noProxy: 127.0.0.1,localhost,.local,.internal pspNames: vmware-system-restricted network: ipFamilies: ["IPv4", "IPv6"]
- 使用適用於您環境的適當值自訂
harbor.yaml
規格中的harbor-data-values
密碼,包括主機名稱、密碼、密鑰和儲存區類別。如需相關指引,請參閱 Harbor 套件參考。
- 安裝 Harbor。
kubectl apply -f harbor.yaml
- 確認 Harbor 安裝。
kubectl get all -n harbor-registry
使用 Envoy LoadBalancer 為 Harbor 設定 DNS (NSX 網路)
如果透過 LoadBalancer 公開必要 Envoy 服務,請取得負載平衡器的外部 IP 位址,並為 Harbor FQDN 建立 DNS 記錄。
- 取得類型為 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 #TKG Harbor with Envoy Load Balancer IP 10.195.141.17 core.harbor.domain 10.195.141.17 core.notary.harbor.domain
- 若要驗證 Harbor 延伸的安裝,請登入 Harbor。
- 在 DNS 伺服器上建立兩個 CNAME 記錄,以將 Envoy 服務負載平衡器
External-IP
位址對應至 Harbor FQDN 和 Notary FQDN。 - 安裝外部 DNS 延伸。
使用 Envoy NodePort 為 Harbor 設定 DNS (vDS 網路)
如果透過 NodePort 公開必要 Envoy 服務,請取得 worker 節點的虛擬機器 IP 位址,並為 Harbor FQDN 建立 DNS 記錄。
備註: 若要使用 NodePort,必須在
harbor-data-values.yaml
檔案中指定正確的
port.https
值。
- 將內容切換至佈建叢集所在的 vSphere 命名空間。
kubectl config use-context VSPHERE-NAMESPACE
- 列出叢集中的節點。
kubectl get virtualmachines
- 使用下列命令選擇其中一個 worker 節點並加以說明。
kubectl describe virtualmachines tkg2-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 #TKG Harbor with Envoy NodePort 10.115.22.43 core.harbor.domain 10.115.22.43 core.notary.harbor.domain
- 若要驗證 Harbor 延伸的安裝,請登入 Harbor。
- 在 DNS 伺服器上建立兩個 CNAME 記錄,以將 worker 節點 IP 位址對應至 Harbor FQDN 和 Notary FQDN。
- 安裝外部 DNS 延伸。
登入 Harbor Web 介面
安裝並設定 Harbor 後,請進行登入並開始使用。
- 存取位於
https://core.harbor.domain
的 Harbor 登錄 Web 介面或您使用的主機名稱。 - 透過使用者名稱 admin 以及您在
harbor-data-values.yaml
檔案中產生的密碼登入 Harbor。 - 確認您可以存取 Harbor 使用者介面。
- 取得 Harbor CA 憑證。
在 Harbor 介面中,選取新專案。
,或建立按一下登錄憑證,然後下載 Harbor CA 憑證 (ca.crt)。
- 將 Harbor CA 憑證新增至 Docker 用戶端的信任存放區,以便能夠將容器映像推送至 Harbor 登錄以及從中提取容器映像。請參閱對 TKG 服務 叢集使用私人登錄。
- 如需有關使用 Harbor 的詳細資料,請參閱 Harbor 說明文件。