若要將 TKG 服務 叢集與私人容器登錄整合,請參閱此主題。

私人容器登錄使用案例

容器登錄為 Kubernetes 部署提供重要功能,可做為儲存和共用容器映像的集中式存放庫。最常用的公用容器登錄是 Docker Hub。有許多私人容器登錄供應。VMware Harbor 主管 隨附的開放原始碼雲端原生私人容器登錄。

私人容器登錄整合

若要將私人登錄與 TKG 服務 叢集整合,可以使用一或多個自我簽署 CA 憑證設定叢集,以透過 HTTPS 提供私人登錄內容。若要執行此操作,請在叢集規格中哪入具有 trust 值的 additionalTrustedCAs 欄位。可以定義 TKGS 叢集應信任的任意數目的自我簽署 CA 憑證。此功能可讓您輕鬆定義憑證清單,並可更新需要輪替的這些憑證。

您可以在最初建立叢集時設定私人登錄憑證,也可以更新現有叢集並提供私人登錄憑證。若要編輯現有叢集並新增私人登錄憑證,請使用 kubectl edit 方法。請參閱為 Kubectl 設定文字編輯器

請注意,trust.additionalTrustedCAs 欄位的實作在用於佈建 TKGS 叢集的受支援 API 之間略有不同。如需詳細資訊,請參閱 v1alpha3 API 信任欄位v1beta1 API Trust 變數 資料表。

v1alpha3 API 範例

以下範例示範了如何藉由 CA 憑證將使用 v1alpha3 API 佈建的 TKG 服務 叢集與私人容器登錄整合。

使用 TanzuKubernetesCluster v1alpha3 APItrust.additionalTrustedCAs 欄位可包括一或多個名稱-資料對,每一對都可以包含私人登錄的 TLS 憑證。
表 1. v1alpha3 API 信任欄位
欄位 說明
trust 區段標記。不接受任何資料。
additionalTrustedCAs 區段標記。包括憑證陣列 (每個憑證都具有 namedata 欄位)。
name 使用者定義的 CA 憑證名稱。
data 採用雙 base64 編碼之 PEM 格式的 CA 證書 (ca.crt) 內容。
備註: v1alpha3 API 要求憑證內容採用單 base64 編碼。如果內容未採用單 base6 編碼,則無法處理產生的 PEM 檔案。
可以按照以下程序,使用 Harbor 登錄憑證將 Harbor 與 v1alpha3 API 叢集整合。
  1. 從 Harbor Web 介面的專案 > 存放庫畫面下載 Harbor登錄憑證

    CA 憑證檔案以 ca.crt 形式下載。

  2. 對 CA 憑證的內容進行單 base64 編碼。
  3. 在叢集規格中包含 trust.additionalTrustedCAs 欄位,並填入 namedata 值。
    #tkc-with-trusted-private-reg-cert.yaml
    apiVersion: run.tanzu.vmware.com/v1alpha3
    kind: TanzuKubernetesCluster
    metadata:
      name: tkc01
      namespace: tkgs-cluster-ns
    spec:
       topology:
         controlPlane:
           replicas: 3
           storageClass: tkgs-storage-policy
           vmClass: guaranteed-medium
           tkr:
             reference:
               name: v1.25.7---vmware.3-fips.1-tkg.1
         nodePools:
         - name: nodepool-01
           replicas: 3
           storageClass: tkgs-storage-policy
           vmClass: guaranteed-medium
           tkr:
             reference:
               name: v1.25.7---vmware.3-fips.1-tkg.1
       settings:
         storage:
           defaultClass: tkgs-storage-policy
         network:
           cni:
             name: antrea
           services:
             cidrBlocks: ["198.51.100.0/12"]
           pods:
             cidrBlocks: ["192.0.2.0/16"]
           serviceDomain: cluster.local
           trust:
             additionalTrustedCAs:
             - name: CompanyInternalCA-1
               data: LS0tLS1C...LS0tCg==
             - name: CompanyInternalCA-2
               data: MTLtMT1C...MT0tPg==
  4. 若要輪替憑證,請對叢集規格執行 kubectl edit 並更新 trust.additionalTrustedCAs.data 值,然後啟動輪流更新。

v1beta1 API 範例

以下範例說明了如何藉由 CA 憑證將使用 v1beta1 API 佈建的 TKG 服務 叢集與私人容器登錄整合。

若要將私人容器登錄與使用 叢集 v1beta1 API 佈建的 TKGS 叢集整合,請使用 trust 變數並填入包含私人登錄憑證的 Kubernetes 密碼。
表 2. v1beta1 API Trust 變數
欄位 說明
trust 區段標記。不接受任何資料。
additionalTrustedCAs 區段標記。包括憑證陣列 (每個憑證都具有 name)。
name Kubernetes 密碼中 data 對應欄位的使用者定義名稱 ,該密碼包含採用雙 base64 編碼之 PEM 格式的 CA 憑證。
備註: v1beta1 API 要求憑證內容採用雙 base64 編碼。如果內容未採用雙 base6 編碼,則無法處理產生的 PEM 檔案。
可以按照以下程序,使用 Harbor 登錄憑證將 Harbor 與 v1beta1 API 叢集整合。
  1. 從 Harbor Web 介面的專案 > 存放庫畫面下載 Harbor登錄憑證

    CA 憑證檔案以 ca.crt 形式下載。

  2. 對 CA 憑證的內容進行雙 base64 編碼。
  3. 使用以下內容建立 Kubernetes 密碼定義 YAML 檔案。
    #additional-ca-1.yaml
    apiVersion: v1
    data:
      additional-ca-1: TFMwdExTMUNSGlSzZ3Jaa...VVNVWkpRMEMwdExTMHRDZz09
    kind: Secret
    metadata:
      name: cluster01-user-trusted-ca-secret
      namespace: tkgs-cluster-ns
    type: Opaque
    其中:
    • 密碼 data 對應的值是使用者定義的字串,為 CA 憑證的名稱 (在本範例中為 additional-ca-1),其值為雙 base64 編碼的憑證。
    • metadata 區段中,將密碼命名為 CLUSTER-NAME-user-trusted-ca-secret,其中 CLUSTER-NAME 是叢集的名稱。必須在叢集所在的同一 vSphere 命名空間 中建立此密碼。
  4. 以宣告方式建立 Kubernetes 密碼。
    kubectl apply -f additional-ca-1.yaml
  5. 驗證密碼建立。
    kubeclt get secret -n tkgs-cluster-ns cluster01-user-trusted-ca-secret
    NAME                                             TYPE     DATA   AGE
    cluster01-user-trusted-ca-secret                 Opaque   12     2d22h
    
  6. trust 變數包含在叢集規格中,用於參考密碼的資料對應的名稱 (在此範例中為 additional-ca-1)。
    #cluster-with-trusted-private-reg-cert.yaml
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      name: cluster01
      namespace: tkgs-cluster-ns
    spec:
      clusterNetwork:
        services:
          cidrBlocks: ["198.52.100.0/12"]
        pods:
          cidrBlocks: ["192.101.2.0/16"]
        serviceDomain: "cluster.local"
      topology:
        class: tanzukubernetescluster
        version: v1.26.5+vmware.2-fips.1-tkg.1
        controlPlane:
          replicas: 3
        workers:
          machineDeployments:
            - class: node-pool
              name: node-pool-01
              replicas: 3
        variables:
          - name: vmClass
            value: guaranteed-medium
          - name: storageClass
            value: tkgs-storage-profile
          - name: defaultStorageClass
            value: tkgs-storage-profile
          - name: trust
            value:
              additionalTrustedCAs:
              - name: additional-ca-1
  7. 若要輪替憑證,請建立新密鑰,並使用相應的值編輯叢集規格。這樣做將觸發對叢集進行輪流更新。
    備註: 系統不會監控對 CLUSTER-NAME-user-trusted-ca-secret 的變更。如果其 data 對應值發生變更,則這些變更不會反映在叢集中。您需要建立新密碼以及 nametrust.additionalTrustCAs 的資料對應。