設定節點以便驗證私人登錄項

您可以設定 Google Distributed Cloud 叢集,讓工作站節點使用私人登錄檔。節點層級的私人登錄檔適用於工作負載,可讓您進一步控管映像檔提取作業和相關安全性。如本文所述設定叢集時,Google Distributed Cloud 會相應更新 containerd 設定。叢集設定完成後,符合資格節點上的所有 Pod 都可以使用登錄檔,不必在 Pod 規格中指定 imagePullSecrets

您可以在叢集生命週期內隨時啟用或停用這項功能。

下表列出各版本這項功能的推出階段:

必要條件

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

    獨立叢集部署

    獨立叢集

設定私人登錄檔的自我管理叢集

如要將獨立或混合式叢集設定為使用節點層級的私人登錄檔,請按照下列步驟操作:

  1. 編輯叢集設定檔,在憑證部分新增 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 設定檔含有憑證,可以使用 chownchmod 限制存取權。

      如果私有登錄檔伺服器不需要憑證進行驗證,則可以省略 pullCredentialConfigPath 欄位。

  2. 將變更套用至叢集:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
    

    更改下列內容:

    • CLUSTER_NAME:要更新的叢集名稱。

    • CLUSTER_KUBECONFIG:自行管理的 (混合式或獨立) 叢集 kubeconfig 檔案路徑。

設定私人登錄檔適用的使用者叢集

如果是使用者叢集,私人登錄設定會指定在使用者叢集資源規格中,該規格位於管理員叢集。此外,您還需要將私有登錄檔憑證儲存在 Secret 中,該 Secret 也位於管理員叢集中:

  1. 為登錄檔憑證建立 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 設定檔含有憑證,可以使用 chownchmod 限制存取權。

      如果私有登錄檔伺服器不需要憑證進行驗證,則可以省略 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
    
  2. 如果適用,請將登錄檔的 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==
      ```
    
  3. 編輯使用者叢集設定檔,啟用及設定私有登錄檔:

    1. 僅適用於 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"
      ...
      
    2. 在使用者叢集設定檔的 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 命名空間名稱。

  4. 將變更套用至叢集:

    bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    更改下列內容:

    • USER_CLUSTER_NAME:要更新的叢集名稱。

    • ADMIN_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。