設定私人容器登錄檔

本頁說明如何為 VMware 專用的 Google Distributed Cloud (僅限軟體) 設定現有容器登錄伺服器。

本文適用於負責設定、監控及管理技術基礎架構的管理員、架構師和作業人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

總覽

根據預設,在叢集建立或升級期間,Google Distributed Cloud 會使用元件存取服務帳戶,從 gcr.io/gke-on-prem-release 提取系統映像檔。您也可以選擇提供自己的容器登錄伺服器,這樣系統映像檔就會改為從您的私人登錄伺服器提取。

Google Distributed Cloud 不支援不安全的容器登錄檔。啟動容器登錄伺服器時,您必須提供憑證和金鑰。憑證可由公開憑證授權單位 (CA) 簽署,也可以自行簽署。

建立容器登錄伺服器

如要瞭解如何建立容器登錄伺服器,請參閱 Docker 說明文件中的「執行可從外部存取的登錄」。

設定登錄檔

如要使用私人容器登錄檔,可以透過 gkectl 指令列工具或 Terraform 進行。

gkectl

建立叢集前,請將 privateRegistry 區段新增至管理員叢集設定檔。

填寫這個部分時:

  • 在建立或升級叢集之前執行 gkectl prepare 指令時,該指令會從管理員叢集設定檔的 bundlePath 欄位中指定的 tar 檔案擷取映像檔,並將映像檔推送至您的私有登錄伺服器。

  • 建立或升級叢集時,系統會從私有登錄伺服器擷取系統映像檔。

Terraform

  1. 按照「建立管理員叢集」一文的 Terraform 分頁步驟操作,填寫管理員叢集設定檔。

  2. 在管理員叢集設定檔中新增下列項目:

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    更改下列內容:

    • "ADDRESS":執行私人登錄檔的機器的 IP 位址或 FQDN (完整網域名稱)。

    • "CA_CERT":私有登錄檔的 CA 憑證公開金鑰。

  3. 繼續按照「建立管理員叢集」的 Terraform 分頁步驟操作,驗證 Terraform 設定檔和方案,然後建立啟動程序叢集。

  4. 執行 gkectl register bootstrap 指令時,gkectl 會提示您輸入私有登錄檔的使用者名稱和密碼。

建立叢集時,系統會從您的私有登錄伺服器提取系統映像檔。

進階叢集和完整套件的限制

Google Distributed Cloud 組合包有兩種:完整版和一般版。如要判斷管理員工作站上的套件,請檢查管理員叢集設定檔中的 bundlePath 欄位。如果檔案名稱結尾為 -full,表示完整套件位於管理員工作站。如果檔案名稱不是以 -full 結尾,表示管理員工作站上是標準套件。

如果您使用 gkeadm 指令建立管理員工作站,該指令會建立管理員工作站 VM,並將完整套件放在 VM 上,然後設定管理員叢集設定檔中的 bundlePath 欄位。

如果啟用進階叢集,透過私人登錄檔使用完整套件時會受到下列限制:

  • 1.31 版:私人登錄檔不支援完整套件。如要在進階叢集上使用私有登錄檔,請按照下列步驟操作:

    1. 下載一般大小的套裝組合至管理工作站。
    2. 更新管理員叢集設定檔中 bundlePath 欄位的檔案名稱。
  • 1.32 版:支援使用完整套件,但 gkectl prepare 指令會從 gcr.io/gke-on-prem-release (而非 tar 檔案) 提取映像檔。不過,這項指令會將映像檔推送至私人登錄檔,因此在建立或升級叢集時,系統映像檔會從私人登錄檔提取。

確認映像檔是從登錄伺服器提取

驗證映像檔是否從登錄伺服器提取的方式,取決於是否已啟用進階叢集。

  • 如果未啟用進階叢集,請執行下列指令:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
        --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}"
    

    ADMIN_CLUSTER_KUBECONFIG 替換為管理員叢集的 kubeconfig 檔案路徑。

    這項指令的輸出內容會顯示叢集中的所有映像檔。您可以確認所有 Google Distributed Cloud 映像檔都來自您自己的登錄伺服器。

  • 如果已啟用進階叢集,請按照下列步驟操作:

    如要判斷 containerd 是否從本機登錄檔提取映像檔,請按照下列步驟檢查名為 config.toml 的檔案內容:

    1. 登入節點並檢查 /etc/containerd/config.toml 檔案的內容。
    2. 檢查 config.toml 檔案的 plugins."io.containerd.grpc.v1.cri".registry.mirrors 欄位,看看您的登錄伺服器是否列在 endpoint 欄位中。

      以下摘錄自範例 config.toml 檔案。

      version = 2
      root = "/var/lib/containerd"
      state = "/run/containerd"
      ...
      [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls]
      ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt'
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
      endpoint = ["http://privateregistry.io", "http://privateregistry2.io"]
      ...
      
    3. 如果註冊資料庫鏡像顯示在 endpoint 欄位中,表示節點是從註冊資料庫鏡像提取映像檔,而不是從 Artifact Registry 提取。