本頁說明如何為 VMware 專用的 Google Distributed Cloud (僅限軟體) 設定現有的容器登錄伺服器。
本文適用於負責設定、監控及管理技術基礎架構的管理員、架構師和營運人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。
總覽
根據預設,在叢集建立或升級期間,Google Distributed Cloud 會使用元件存取服務帳戶,從 gcr.io/gke-on-prem-release
提取系統映像檔。您也可以選擇提供自己的容器登錄伺服器,這樣系統映像檔就會改為從您的私人登錄伺服器提取。
Google Distributed Cloud 不支援不安全的容器登錄檔。啟動容器登錄伺服器時,您必須提供憑證和金鑰。憑證可由公開憑證授權單位 (CA) 簽署,也可以自行簽署。
建立 Container Registry 伺服器
如要瞭解如何建立容器登錄伺服器,請參閱 Docker 說明文件中的「執行可從外部存取的登錄」。
設定登錄檔
如要使用私人容器登錄檔,可以透過 gkectl
指令列工具或 Terraform 進行。
gkectl
建立叢集前,請先將
privateRegistry
區段新增至管理員叢集設定檔。填寫這個部分時:
在建立或升級叢集前執行
gkectl prepare
指令時,該指令會從管理員叢集設定檔的bundlePath
欄位中指定的 tar 檔案擷取映像檔,並將映像檔推送至私人登錄伺服器。建立或升級叢集時,系統會從您的私人登錄檔伺服器提取系統映像檔。
如果您的網路使用 Proxy 伺服器,請填寫「
proxy
」部分。
Terraform
按照「建立管理員叢集」一文的 Terraform 分頁步驟,填寫管理員叢集設定檔。
在管理員叢集設定檔中新增下列項目:
private_registry_config { address = "ADDRESS" ca_cert = "CA_CERT" }
更改下列內容:
ADDRESS
:執行私人登錄檔的電腦 IP 位址或完整網域名稱 (FQDN)。CA_CERT
:私有登錄檔的 CA 憑證公開金鑰。
如果網路使用 Proxy 伺服器,請新增下列項目:
proxy { url: "PROXY_SERVER_ADDRESS" no_proxy: "BYPASS_LIST" }
更改下列內容:
PROXY_SERVER_ADDRESS
:Proxy 伺服器的 HTTP 位址。即使通訊埠編號與架構的預設通訊埠相同,也請一併加入。BYPASS_LIST
:以逗號分隔的 IP 位址、IP 位址範圍、主機名稱和網域名稱清單,這些項目不應透過 Proxy 伺服器傳輸。
範例:
url: "http://my-proxy.example.local:80" no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
當 Google Distributed Cloud 將要求傳送至這些位址、主機或網域時,要求會略過 Proxy 伺服器,直接傳送至目的地。
繼續執行「建立管理員叢集」一文的 Terraform 分頁步驟,驗證 Terraform 設定檔和方案,然後建立啟動程序叢集。
執行
gkectl register bootstrap
指令時,gkectl
會提示您輸入私有登錄檔的使用者名稱和密碼。
建立叢集時,系統會從私人登錄伺服器提取系統映像檔。
進階叢集和完整套裝組合的限制
Google Distributed Cloud 共有兩種套裝組合:完整版和一般版。如要判斷管理員工作站上的套件,請檢查管理員叢集設定檔中的 bundlePath
欄位。如果檔案名稱結尾為 -full
,表示管理員工作站上已有完整套件。如果檔案名稱不是以 -full
結尾,表示管理員工作站上是標準套件。
如果您使用 gkeadm
指令建立管理員工作站,該指令會建立管理員工作站 VM,並將完整套件放在 VM 上,然後設定管理員叢集設定檔中的 bundlePath
欄位。
如果啟用進階叢集,透過私人登錄檔使用完整套件時會受到下列限制:
1.31 版:私人登錄檔不支援完整套件。如要在進階叢集上使用私有登錄檔,請按照下列步驟操作:
- 下載一般大小的套件至管理工作站。
- 更新管理員叢集設定檔中
bundlePath
欄位的檔案名稱。
1.32 版:支援使用完整套件,但
gkectl prepare
指令會從gcr.io/gke-on-prem-release
(而非 tar 檔案) 提取映像檔。不過,這項指令會將映像檔推送至私人登錄檔,因此系統會在叢集建立或升級期間,從私人登錄檔提取系統映像檔。
一般叢集與進階叢集之間的差異
與標準叢集相比,進階叢集有幾項主要差異:
- 使用私人登錄檔時,映像檔會顯示從
gcr.io
提取,而非從私人登錄檔的主機名稱提取。即使圖片實際上是從私人登錄伺服器提取,這項變更仍是預期行為。 - 映像檔提取作業會使用連線至私有登錄檔的每部機器的
/etc/containerd/config.toml
檔案中的憑證,而不是叢集內的private-registry-creds
密鑰。 - 對於所有
gcr.io
映像檔,叢集會先嘗試從私人登錄檔提取。如果私人登錄檔中沒有該映像檔,系統會透過網際網路從gcr.io
提取。如要停止這項備援機制,請設定noProxy
,或使用防火牆規則封鎖gcr.io
流量。
如要確認圖片是否從正確來源提取,請參閱「確認圖片是否從登錄伺服器提取」。
確認映像檔是從登錄伺服器提取
驗證映像檔是否從登錄伺服器提取的方式,取決於是否啟用進階叢集。
如果未啟用進階叢集,請執行下列指令:
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
的檔案內容,步驟如下:- 登入節點並檢查
/etc/containerd/config.toml
檔案的內容。 檢查
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"] ...
如果登錄檔鏡像出現在
endpoint
欄位中,表示節點是從登錄檔鏡像而非 Artifact Registry 提取映像檔。
- 登入節點並檢查