按照下列指示,在使用適用於 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。出於測試和驗證目的,請將 Harbor 和 Notary FQDN 新增至本機 /etc/hosts 檔案。以下指示說明了如何執行此操作。

在生產環境中,Harbor 要求本機 DNS 伺服器 (例如 BIND) 或公有雲 (例如 AWS Route53 或 Azure DNS) 上具有 DNS 區域。設定 DNS 後,若要向 DNS 伺服器自動登錄 Harbor FQDN,請安裝 ExternalDNS 延伸。請參閱在適用於 vSphere 7.x 的 TKr 上安裝 ExternalDNS

安裝 Harbor

若要使用標準套件安裝 Harbor 登錄,請完成下列步驟。

  1. 列出存放庫中可用的 Harbor 版本。
    kubectl get packages -n tkg-system | grep harbor
  2. 建立 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"]
  3. 使用適用於您環境的適當值自訂 harbor.yaml 規格中的 harbor-data-values 密碼,包括主機名稱、密碼、密鑰和儲存區類別。

    如需相關指引,請參閱 Harbor 套件參考

  4. 安裝 Harbor。
    kubectl apply -f harbor.yaml
  5. 確認 Harbor 安裝。
    kubectl get all -n harbor-registry

使用 Envoy LoadBalancer 為 Harbor 設定 DNS (NSX 網路)

如果透過 LoadBalancer 公開必要 Envoy 服務,請取得負載平衡器的外部 IP 位址,並為 Harbor FQDN 建立 DNS 記錄。
  1. 取得類型為 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]}'
  2. 若要驗證 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
    
  3. 若要驗證 Harbor 延伸的安裝,請登入 Harbor。
  4. 在 DNS 伺服器上建立兩個 CNAME 記錄,以將 Envoy 服務負載平衡器 External-IP 位址對應至 Harbor FQDN 和 Notary FQDN。
  5. 安裝外部 DNS 延伸。

使用 Envoy NodePort 為 Harbor 設定 DNS (vDS 網路)

如果透過 NodePort 公開必要 Envoy 服務,請取得 worker 節點的虛擬機器 IP 位址,並為 Harbor FQDN 建立 DNS 記錄。
備註: 若要使用 NodePort,必須在 harbor-data-values.yaml 檔案中指定正確的 port.https 值。
  1. 將內容切換至佈建叢集所在的 vSphere 命名空間
    kubectl config use-context VSPHERE-NAMESPACE
  2. 列出叢集中的節點。
    kubectl get virtualmachines
  3. 使用下列命令選擇其中一個 worker 節點並加以說明。
    kubectl describe virtualmachines tkg2-cluster-X-workers-9twdr-59bc54dc97-kt4cm
  4. 找到虛擬機器的 IP 位址,例如 Vm Ip: 10.115.22.43
  5. 若要驗證 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
    
  6. 若要驗證 Harbor 延伸的安裝,請登入 Harbor。
  7. 在 DNS 伺服器上建立兩個 CNAME 記錄,以將 worker 節點 IP 位址對應至 Harbor FQDN 和 Notary FQDN。
  8. 安裝外部 DNS 延伸。

登入 Harbor Web 介面

安裝並設定 Harbor 後,請進行登入並開始使用。
  1. 存取位於 https://core.harbor.domain 的 Harbor 登錄 Web 介面或您使用的主機名稱。

    Harbor 登錄 Web 介面。

  2. 透過使用者名稱 admin 以及您在 harbor-data-values.yaml 檔案中產生的密碼登入 Harbor。

    Harbor 登入頁面,帶有使用者名稱 admin 和產生的密碼。

  3. 確認您可以存取 Harbor 使用者介面。

    登入後,將顯示 Harbor 使用者介面的 [專案] 索引標籤。

  4. 取得 Harbor CA 憑證。

    在 Harbor 介面中,選取專案 > 程式庫,或建立新專案

    按一下登錄憑證,然後下載 Harbor CA 憑證 (ca.crt)。

  5. 將 Harbor CA 憑證新增至 Docker 用戶端的信任存放區,以便能夠將容器映像推送至 Harbor 登錄以及從中提取容器映像。請參閱對 TKG 服務 叢集使用私人登錄
  6. 如需有關使用 Harbor 的詳細資料,請參閱 Harbor 說明文件