您可以設定 Google Distributed Cloud 叢集,讓工作站節點使用私人登錄檔。節點層級的私人登錄檔適用於工作負載,可讓您進一步控管映像檔提取作業和相關安全性。如本文所述設定叢集時,Google Distributed Cloud 會相應更新 containerd 設定。叢集設定完成後,符合資格節點上的所有 Pod 都可以使用登錄檔,不必在 Pod 規格中指定 imagePullSecrets
。
您可以在叢集生命週期內隨時啟用或停用這項功能。
下表列出各版本這項功能的推出階段:
- 1.30 以上版本:正式發布
- 1.29:預先發布版
必要條件
1.30 以上版本
如要使用這項正式發布的 GA 功能,叢集必須符合下列需求:
- 叢集版本必須為 1.30 以上。
- 節點集區版本必須為 1.29 以上 (1.30 叢集可有 1.28 版的節點集區,但這項功能僅適用於 1.29 以上版本的節點集區)。
這項功能適用於使用者叢集,以及具有工作站節點集區的自我管理 (混合和獨立) 叢集,如下表所示:
部署模式 支援的叢集類型 部署管理員和使用者叢集 管理員叢集
使用者群組 1
使用者叢集 2
部署混合式叢集 混合叢集
使用者群組 1
使用者叢集 2
獨立叢集部署 獨立叢集
1.29
如要使用這項預先發布功能,叢集必須符合下列條件:
- 叢集版本必須為 1.29。
- 節點集區版本必須為 1.29 (並非所有節點集區都必須為 1.29 版,但這項功能只適用於 1.29 版的節點集區)。
- 叢集必須具有
preview.baremetal.cluster.gke.io/private-registry: "enable"
預先發布版功能註解。 這項功能適用於使用者叢集,以及具有工作站節點集區的自我管理 (混合式和獨立式) 叢集,如下表所示:
部署模式 支援的叢集類型 部署管理員和使用者叢集 管理員叢集
使用者群組 1
使用者叢集 2
部署混合式叢集 混合叢集
使用者群組 1
使用者叢集 2
獨立叢集部署 獨立叢集
設定私人登錄檔的自我管理叢集
如要將獨立或混合式叢集設定為使用節點層級的私人登錄檔,請按照下列步驟操作:
編輯叢集設定檔,在憑證部分新增
privateRegistries
區塊:--- gcrKeyPath: baremetal/gcr.json sshPrivateKeyPath: .ssh/id_rsa ... privateRegistries: - host: REGISTRY_HOST caCertPath: CA_CERT_PATH pullCredentialConfigPath: CREDENTIALS_FILE_PATH ... --- apiVersion: v1 kind: Namespace metadata: name: cluster-hybrid-basic --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: hybrid-basic namespace: cluster-hybrid-basic annotations: preview.baremetal.cluster.gke.io/private-registry: "enable" # Version 1.29 clusters only ... spec: type: hybrid ...
更改下列內容:
REGISTRY_HOST
:私有登錄檔的網域名稱或 IP 位址,以及通訊埠。例如:10.200.0.2:5007
。CA_CERT_PATH
:CA 憑證檔案 (伺服器根 CA) 的路徑。例如:/root/cert.pem
。如果私人登錄檔不需要私密 TLS 憑證,則可以省略這個欄位。CREDENTIALS_FILE_PATH
:Docker 設定檔的路徑,config.json
(例如$HOME/.docker/config.json
)。如要驗證 Docker,以便存取私有登錄檔,config.json
必須包含檔案auths
區段中,以 base64 編碼的憑證版本。請按照 Artifact Registry 說明文件中的「服務帳戶金鑰」操作說明,正確填寫auths
區段。如要保護機密資料,如果 Docker 設定檔含有憑證,可以使用chown
和chmod
限制存取權。如果私有登錄檔伺服器不需要憑證進行驗證,則可以省略
pullCredentialConfigPath
欄位。
將變更套用至叢集:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
更改下列內容:
CLUSTER_NAME
:要更新的叢集名稱。CLUSTER_KUBECONFIG
:自行管理的 (混合式或獨立) 叢集 kubeconfig 檔案路徑。
設定私人登錄檔適用的使用者叢集
如果是使用者叢集,私人登錄設定會指定在使用者叢集資源規格中,該規格位於管理員叢集。此外,您還需要將私有登錄檔憑證儲存在 Secret 中,該 Secret 也位於管理員叢集中:
為登錄檔憑證建立
kubernetes.io/dockerconfigjson
類型的 Kubernetes 密鑰:如要將 Secret 範圍限定在特定命名空間,請在下列指令中加入
--namespace
標記,指定命名空間名稱。如果 Secret 與叢集不在同一個命名空間,請新增baremetal.cluster.gke.io/mark-source: "true"
註解,如本步驟結尾的範例所示。kubectl create secret docker-registry CREDS_SECRET_NAME \ --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \ --kubeconfig=ADMIN_KUBECONFIG
更改下列內容:
CREDS_SECRET_NAME
:密鑰的名稱。CREDENTIALS_FILE_PATH
:Docker 設定檔的路徑,config.json
(例如$HOME/.docker/config.json
)。如要驗證 Docker,以便存取私有登錄檔,config.json
必須包含檔案auths
區段中,以 base64 編碼的憑證版本。請按照 Artifact Registry 說明文件中的「服務帳戶金鑰」操作說明,正確填寫auths
區段。如要保護機密資料,如果 Docker 設定檔含有憑證,可以使用chown
和chmod
限制存取權。如果私有登錄檔伺服器不需要憑證進行驗證,則可以省略
pullCredentialConfigPath
欄位。
您的 Secret 應類似下列範例:
apiVersion: v1 data: .dockerconfigjson: ewoJImF1dGhzIjogewoJ...clpYSXdNak14IgoJCX0KCX0KfQ== kind: Secret metadata: creationTimestamp: "2024-04-28T22:06:06Z" name: private-registry-secret namespace: default resourceVersion: "5055821" ... annotations: ... baremetal.cluster.gke.io/mark-source: "true" type: kubernetes.io/dockerconfigjson
如果適用,請將登錄檔的 CA 憑證儲存在 Secret 中。
密鑰類似於下列內容:
apiVersion: v1 kind: Secret metadata: annotations: baremetal.cluster.gke.io/mark-source: "true" name: ca-9dd74fd308bac6df562c7a7b220590b5 namespace: some-namespace type: Opaque data: ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXFTZ0F3SUJBZ0lVQi 3UGxjUzVFVk8vS0xuYjZiMHRhRFVleXJvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZqRUxNQWtHQ ... QnpPTkxTRFZJVk5LMm9YV1JvNEpJY0ZoNFZ4MWRMRHpqMldEaHhrUEljWEhLdGR3dk5iS2tocU LUVORCBDRVJUSUZJQ0FURS0tLS0tCg== ```
編輯使用者叢集設定檔,啟用及設定私有登錄檔:
僅適用於 1.29 版叢集,請新增「預先發布版」功能註解
preview.baremetal.cluster.gke.io/private-registry: "enable"
,啟用這項功能。如果是 1.30 以上版本的叢集,系統預設會啟用私人登錄檔功能。apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic namespace: cluster-user-basic resourceVersion: "766027" annotations: ... preview.baremetal.cluster.gke.io/private-registry: "enable" ...
在使用者叢集設定檔的
nodeConfig
區段中,新增privateRegistries
區塊:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic ... spec: bypassPreflightCheck: false ... nodeConfig: containerRuntime: containerd podDensity: maxPodsPerNode: 250 privateRegistries: - caCertSecretRef: name: CA_CERT_SECRET_NAME namespace: CA_CERT_SECRET_NAMESPACE host: REGISTRY_HOST pullCredentialSecretRef: name: CREDS_SECRET_NAME namespace: CREDS_SECRET_NAMESPACE
更改下列內容:
CA_CERT_SECRET_NAME
:您建立的 Secret 名稱,用於儲存 CA 憑證。如果您沒有建立這個密鑰,請移除caCertSecretRef
區塊。CA_CERT_SECRET_NAMESPACE
:CA 憑證 Secret 的命名空間名稱 (如有建立)。REGISTRY_HOST
:私有登錄檔的網域名稱或 IP 位址和通訊埠。例如:10.200.0.2:5007
。CREDS_SECRET_NAME
:登錄檔憑證的kubernetes.io/dockerconfigjson
型別 Secret 名稱。CREDS_SECRET_NAMESPACE
:登錄憑證的 Secret 命名空間名稱。
將變更套用至叢集:
bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
更改下列內容:
USER_CLUSTER_NAME
:要更新的叢集名稱。ADMIN_KUBECONFIG
:管理員叢集 kubeconfig 檔案的路徑。