設定多個可靠資料來源的同步處理功能

本頁說明如何建立 RootSync 和 RepoSync 物件,設定多個根目錄和命名空間範圍的單一事實來源

有了根層級的可靠資料來源,您就能同步處理叢集範圍命名空間範圍的設定。根層級的單一事實來源可使用管理員層級的憑證,在應用程式命名空間中強制執行政策,並覆寫與您在設定中宣告的狀態不同的本機變更。中央管理員通常會管理可靠的根源資料。

命名空間範圍內的單一事實來源為選用項目,可包含同步至叢集間特定命名空間的命名空間範圍設定。您可以將命名空間範圍的單一事實來源設定和控制權,委派給非管理員使用者。雖然 Config Sync 會自動偵測可靠來源的變更,但您可以在命名空間範圍的可靠來源中新增許可控制 Webhook,進一步偵測漂移。如要瞭解具體做法,請參閱「避免設定偏移」。

事前準備

  • 建立或確保您有權存取非結構化的可靠資料來源,該來源可包含 Config Sync 同步處理的設定。Config Sync 支援 Git 存放區、Helm 資訊套件和 OCI 映像檔做為可靠來源。命名空間範圍內的單一事實來源必須使用非結構化格式。
  • 建立叢集,或確認您有權存取叢集,且該叢集位於 Google Kubernetes Engine (GKE) Enterprise 版支援的平台和版本,並符合 Config Sync 的需求

建立 RoleBinding

您必須建立 RoleBinding,才能將權限授予本指南中建立的 RepoSync。如要建立 RoleBinding,請完成下列步驟:

  1. 在根來源中,宣告 RoleBinding 設定,授予 SERVICE_ACCOUNT_NAME 服務帳戶管理命名空間中物件的權限。當 RepoSync 設定同步至叢集時,Config Sync 會自動建立 SERVICE_ACCOUNT_NAME 服務帳戶。

    RoleBinding 可以參照同一個命名空間中的 Role。或者,RoleBinding 可以參照 ClusterRole,並將該 ClusterRole 繫結至 RoleBinding 的命名空間。您應遵循最低權限原則,將精細的權限授予使用者定義的 Role,同時定義 ClusterRole 或使用使用者面向的角色,並在不同命名空間的多個 RoleBindings 中參照相同的 ClusterRole

    預設 ClusterRole

    儲存參照預設 ClusterRoleRoleBinding 資訊清單,例如 adminedit,並命名為 FILENAME

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: CLUSTERROLE_NAME
      apiGroup: rbac.authorization.k8s.io
    

    更改下列內容:

    • FILENAME:RoleBinding 資訊清單的名稱。
    • NAMESPACE:新增命名空間名稱。
    • SERVICE_ACCOUNT_NAME:新增對帳員服務帳戶的名稱。如果 RepoSync 名稱為 repo-syncSERVICE_ACCOUNT_NAME 則為 ns-reconciler-NAMESPACE。否則為 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH。舉例來說,如果 RepoSync 名稱為 prod,則 SERVICE_ACCOUNT_NAME 會是 ns-reconciler-NAMESPACE-prod-4。整數 4 會用做 prod,其中包含 4 個字元。
    • CLUSTERROLE_NAME:新增預設 ClusterRole 的名稱。

    使用者定義的角色

    您可以將權限清單授予 RepoSync 物件管理的每項資源,藉此宣告 ClusterRoleRole。這樣一來,您就能設定精細的權限。詳情請參閱「參照資源」。

    舉例來說,下列 ClusterRoleRole 會授予管理 DeploymentServiceAccount 物件的權限:

    # ROOT_REPO/namespaces/NAMESPACE/sync-role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ROLE_KIND
    metadata:
      namespace: NAMESPACE # only set this field for a 'Role'
      name: RECONCILER_ROLE
    rules:
    # Update 'apiGroups' and 'resources' to reference actual resources managed by 'RepoSync'.
    - apiGroups: ["apps"]
      resources: ["deployments"]
      verbs: ["*"]
    - apiGroups: [""]
      resources: ["serviceaccounts"]
      verbs: ["*"]
    

    將參照 ClusterRoleRoleRoleBinding 資訊清單儲存為 FILENAME

    # ROOT_REPO/namespaces/NAMESPACE/FILENAME.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ROLE_KIND
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    更改下列內容:

    • FILENAME:RoleBinding 資訊清單的名稱。
    • ROLE_KIND:設為 ClusterRoleRole
    • NAMESPACE:新增命名空間名稱。
    • SERVICE_ACCOUNT_NAME:新增對帳員服務帳戶的名稱。如果 RepoSync 名稱為 repo-syncSERVICE_ACCOUNT_NAME 則為 ns-reconciler-NAMESPACE。否則為 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH。舉例來說,如果 RepoSync 名稱為 prod,則 SERVICE_ACCOUNT_NAME 會是 ns-reconciler-NAMESPACE-prod-4。整數 4 會用做 prod,其中包含 4 個字元。
    • RECONCILER_ROLE:新增 ClusterRoleRole 的名稱。
  2. 套用 RoleBinding:

    kubectl apply -f FILENAME
    

限制

選擇偏好的設定方法

請選擇下列其中一種方法來設定來源:

在根可靠資料來源中控管來源

如要使用根來源控制來源,您需要 RoleBinding 授權存取權。如果沒有,請參閱「建立 RoleBinding」一節。

在可靠的根來源中控管根來源

Config Sync 支援從多個可靠資料來源進行同步處理。中央管理員可以使用根源資料來源管理所有其他來源。由於 RootSync 物件是由 Config Sync 管理,這個方法可防止對叢集中的 RootSync 設定進行任何本機變更。

如要使用這個方法,請完成下列工作:

  1. 將下列其中一個資訊清單儲存為 root-sync.yaml。請使用與設定來源類型對應的資訊清單版本。

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • ROOT_SYNC_NAME:新增 RootSync 物件的名稱。
    • ROOT_FORMAT:新增 unstructured 即可使用非結構化存放區,或新增 hierarchy 即可使用階層式存放區。這些值會區分大小寫。這是選填欄位,預設值為 hierarchy。建議您新增 unstructured,因為這個格式可讓您以最方便的方式整理設定。
    • ROOT_REPOSITORY:新增要當做根存放區的 Git 存放區網址。您可以輸入使用 HTTPS 或 SSH 通訊協定的網址。舉例來說,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 通訊協定。 這是必填欄位。
    • ROOT_REVISION:新增要同步處理的 Git 修訂版本 (標記或雜湊) 或分支。這是選填欄位,預設值為 HEAD。使用雜湊時,必須是完整雜湊,不得使用縮寫形式。
    • ROOT_BRANCH:新增要同步處理的存放區分支版本。這是選填欄位,預設值為 master。建議使用 revision 欄位指定分支名稱,方便管理。如果同時指定 revision 欄位和 branch 欄位,revision 的優先順序會高於 branch
    • ROOT_DIRECTORY:將 Git 存放區中的路徑新增至包含要同步處理設定的根目錄。這個欄位為選填,預設值為存放區的根目錄 (/)。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • ssh:使用安全殼層金鑰組
      • cookiefile:使用 cookiefile
      • token:使用權杖
      • gcpserviceaccount:使用 Google 服務帳戶存取 Cloud Source Repositories。
      • gcenode:使用 Google 服務帳戶存取 Cloud Source Repositories。只有在叢集未啟用 Workload Identity Federation for GKE 時,才選取這個選項。

      如要進一步瞭解這些驗證類型,請參閱授予 Config Sync 對 Git 的唯讀存取權

      這是必填欄位。

    • ROOT_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您必須將 Secret 的公開金鑰新增至 Git 供應商。這是選填欄位。

    • ROOT_NO_SSL_VERIFY:如要停用 SSL 憑證驗證,請將這個欄位設為 true。預設值為 false

    • ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Git 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    這個資訊清單會建立以 Git 為來源的 RootSync 物件。

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • ROOT_SYNC_NAME:新增 RootSync 物件的名稱。
    • ROOT_FORMAT:新增 unstructured 可使用非結構化存放區,新增 hierarchy 則可使用階層式存放區。這些值會區分大小寫。這是選填欄位,預設值為 hierarchy。建議您新增 unstructured,因為這個格式可讓您以最方便的方式整理設定。
    • ROOT_IMAGE:要用做根存放區的 OCI 映像檔網址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。根據預設,系統會從 latest 標記提取圖片,但您也可以改用 TAGDIGEST 提取圖片。 在 PACKAGE_NAME 中指定 TAGDIGEST
      • 如要透過 TAG 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如要透過 DIGEST 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY:在存放區中新增路徑,指向要同步處理的設定所在的根目錄。這個欄位為選填,預設值為存放區的根目錄 (/)。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • ROOT_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,OCI 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

    如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    這個資訊清單會建立 RootSync 物件,並使用 OCI 映像檔做為來源。

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • ROOT_SYNC_NAME:新增 RootSync 物件的名稱。
    • ROOT_FORMAT:新增 unstructured 可使用非結構化存放區,新增 hierarchy 則可使用階層式存放區。這些值會區分大小寫。這是選填欄位,預設值為 hierarchy。建議您新增 unstructured,因為這個格式可讓您以最方便的方式整理設定。
    • ROOT_HELM_REPOSITORY:要當做根存放區的 Helm 存放區網址。您可以使用 HTTPS 或 SSH 通訊協定輸入網址。舉例來說,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用的是 HTTPS 通訊協定。這是必填欄位。
    • HELM_CHART_NAME:新增 Helm 圖表名稱。這是必填欄位。
    • HELM_CHART_VERSION:圖表版本。 這是選填欄位。如未指定任何值,則會使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本名稱。 這是選填欄位。
    • HELM_RELEASE_NAMESPACE:發布版本的目標命名空間。這項作業只會為範本中含有 namespace: {{ .Release.Namespace }} 的資源設定命名空間。 這是選填欄位。如未指定任何值,則會使用預設命名空間 config-management-system
    • HELM_INCLUDE_CRDS:如要讓 Helm 範本也產生 CustomResourceDefinition,請設為 true。這個欄位為選填。如未指定任何值,預設值為 false,且不會產生 CRD。
    • VALUE:要使用的值,而非隨附於 Helm Chart 的預設值。這個欄位的格式與 Helm 圖表的 values.yaml 檔案相同。這是選填欄位。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • token:使用使用者名稱和密碼存取私人 Helm 存放區。
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • ROOT_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:如果 tokenROOT_AUTH_TYPE,請新增密鑰名稱。這是選填欄位。

    • ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

    如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    這個資訊清單會建立以 Helm 為來源的 RootSync 物件。

  2. 修訂根層級的可靠資料來源:

     git add .
     git commit -m 'Setting up a new root source of truth.'
     git push
    
  3. 如要設定多個根來源,請重複上述步驟。 您也可以將多個 RootSync 物件的設定儲存在由另一個 RootSync 物件同步處理的根可靠來源中,以 GitOps 方式集中管理多個 RootSync 物件。

在根層級的單一事實來源中控管命名空間範圍內的物件

命名空間範圍內的真實來源可由根層級的真實來源管理。由於命名空間範圍來源是由 Config Sync 管理,這個方法可防止對命名空間範圍來源定義進行任何本機變更。

如要使用這個方法,請完成下列工作:

  1. 在根目錄的可靠資料來源中,宣告 namespace 設定:

    # ROOT_SOURCE/namespaces/NAMESPACE/namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: NAMESPACE
    

    NAMESPACE 替換為命名空間的名稱。

  2. 在根層級的可靠資料來源中,於相同命名空間建立下列其中一個 RepoSync 物件。請使用與設定來源類型相應的資訊清單:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_REPOSITORY:新增要用做命名空間存放區的 Git 存放區網址。您可以輸入使用 HTTPS 或 SSH 通訊協定的網址。舉例來說, https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 通訊協定。如果未輸入通訊協定,系統會將網址視為 HTTPS 網址。這是必填欄位。
    • NAMESPACE_REVISION:新增要同步處理的 Git 修訂版本 (標記或雜湊) 或分支。這是選填欄位,預設值為 HEAD。使用雜湊時,必須是完整雜湊,不得使用縮寫形式。
    • NAMESPACE_BRANCH:新增要同步處理的存放區分支版本。這是選填欄位,預設值為 master。建議使用 revision 欄位指定分支名稱,方便管理。如果同時指定 revision 欄位和 branch 欄位,revision 的優先順序會高於 branch
    • NAMESPACE_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • ssh:使用安全殼層金鑰組
      • cookiefile:使用 cookiefile
      • token:使用權杖
      • gcpserviceaccount:使用 Google 服務帳戶存取 Cloud Source Repositories 中的存放區。
      • gcenode:使用 Google 服務帳戶存取 Cloud Source Repositories 中的存放區。只有在叢集未啟用 Workload Identity Federation for GKE 時,才選取這個選項。

        如要進一步瞭解這些驗證類型,請參閱授予 Config Sync 對 Git 的唯讀存取權

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為NAMESPACE_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:新增您要授予 Secret 的名稱。 這是選填欄位。

    • NAMESPACE_NO_SSL_VERIFY:如要停用 SSL 憑證驗證,請將這個欄位設為 true。預設值為 false

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Git 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如需欄位說明,以及可新增至 spec 欄位的完整欄位清單,請參閱「RepoSync 欄位」。

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_IMAGE:做為命名空間來源的 OCI 映像檔網址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。 根據預設,系統會從 latest 標記提取圖片,但您也可以改用 TAGDIGEST 提取圖片。 在 PACKAGE_NAME 中指定 TAGDIGEST

      • 如要透過 TAG 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如要透過 DIGEST 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY:在來源中新增路徑,前往含有要同步設定的根目錄。這個欄位為選填,預設值為來源的根目錄 (/)。

    • NAMESPACE_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,OCI 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_REPOSITORY:要當做根存放區的 Helm 存放區網址。您可以使用 HTTPS 或 SSH 通訊協定輸入網址。舉例來說,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 通訊協定。這是必填欄位。
    • HELM_CHART_NAME:新增 Helm 圖表名稱。這是必填欄位。
    • HELM_CHART_VERSION:圖表版本。 這是選填欄位。如未指定任何值,則會使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本名稱。 這是選填欄位。
    • HELM_RELEASE_NAMESPACE:發布版本的目標命名空間。這項作業只會為範本中含有 namespace: {{ .Release.Namespace }} 的資源設定命名空間。 這是選填欄位。如未指定任何值,則會使用預設命名空間 config-management-system
    • HELM_INCLUDE_CRDS:如要讓 Helm 範本也產生 CustomResourceDefinition,請設為 true。這個欄位為選填。如未指定任何值,預設值為 false,且不會產生 CRD。
    • VALUE:要使用的值,而非隨附於 Helm Chart 的預設值。這個欄位的格式與 Helm 圖表的 values.yaml 檔案相同。這是選填欄位。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • token:使用使用者名稱和密碼存取私人 Helm 存放區。
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:如果 tokenROOT_AUTH_TYPE,請新增密鑰名稱。這是選填欄位。

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

  3. 如果您使用 gcpserviceaccount 做為驗證類型,且未啟用 GKE 的 Workload Identity Federation,則必須在每個命名空間的 Kubernetes 服務帳戶與 Google 服務帳戶之間,建立 IAM 政策繫結。如需建立這項繫結的操作說明,請參閱「授予 Git 存取權」。

  4. 修訂根層級的可靠資料來源:

     git add .
     git commit -m 'Setting up a new namespace-scoped source of truth.'
     git push
    
  5. 視需要根據偏好的驗證方式建立 Secret。如果您使用 none 做為驗證類型,可以略過這個步驟。

    密鑰必須符合下列規定:

    • 在與 RepoSync 相同的命名空間中建立 Secret。
    • 密鑰名稱必須與您在 repo-sync.yaml 中定義的 spec.git.secretRef 名稱相符。
    • 您必須將 Secret 的公開金鑰新增至 Git 供應商。
  6. 如要驗證設定,請在命名空間來源的其中一個物件上使用 kubectl get。例如:

    kubectl get rolebindings -n NAMESPACE
    
  7. 如要設定多個命名空間範圍來源,請重複上述步驟。

在命名空間範圍來源中控管命名空間範圍來源

Config Sync 支援從每個命名空間的多個命名空間範圍內可靠來源進行同步。命名空間範圍內的真實來源可在同一命名空間的命名空間範圍內真實來源中管理。

如要使用這個方法,請完成下列工作:

  1. 在命名空間範圍的可靠來源中,於同一個命名空間建立下列其中一個 RepoSync 物件。請使用與設定來源類型相應的資訊清單:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_REPOSITORY:新增要用做命名空間存放區的 Git 存放區網址。您可以輸入使用 HTTPS 或 SSH 通訊協定的網址。舉例來說, https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 通訊協定。如果未輸入通訊協定,系統會將網址視為 HTTPS 網址。這是必填欄位。
    • NAMESPACE_REVISION:新增要同步處理的 Git 修訂版本 (標記或雜湊) 或分支。這是選填欄位,預設值為 HEAD。使用雜湊時,必須是完整雜湊,不得使用縮寫形式。
    • NAMESPACE_BRANCH:新增要同步處理的存放區分支版本。這是選填欄位,預設值為 master。建議使用 revision 欄位指定分支名稱,方便管理。如果同時指定 revision 欄位和 branch 欄位,revision 的優先順序會高於 branch
    • NAMESPACE_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • ssh:使用安全殼層金鑰組
      • cookiefile:使用 cookiefile
      • token:使用權杖
      • gcpserviceaccount:使用 Google 服務帳戶存取 Cloud Source Repositories 中的存放區。
      • gcenode:使用 Google 服務帳戶存取 Cloud Source Repositories 中的存放區。只有在叢集未啟用 Workload Identity Federation for GKE 時,才選取這個選項。

        如要進一步瞭解這些驗證類型,請參閱授予 Config Sync 對 Git 的唯讀存取權

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為NAMESPACE_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:新增您要授予 Secret 的名稱。 這是選填欄位。

    • NAMESPACE_NO_SSL_VERIFY:如要停用 SSL 憑證驗證,請將這個欄位設為 true。預設值為 false

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Git 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如需欄位說明,以及可新增至 spec 欄位的完整欄位清單,請參閱「RepoSync 欄位」。

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_IMAGE:做為命名空間來源的 OCI 映像檔網址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。 根據預設,系統會從 latest 標記提取圖片,但您也可以改用 TAGDIGEST 提取圖片。 在 PACKAGE_NAME 中指定 TAGDIGEST

      • 如要透過 TAG 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如要透過 DIGEST 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY:在來源中新增路徑,前往含有要同步設定的根目錄。這個欄位為選填,預設值為來源的根目錄 (/)。

    • NAMESPACE_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,OCI 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_REPOSITORY:要當做根存放區的 Helm 存放區網址。您可以使用 HTTPS 或 SSH 通訊協定輸入網址。舉例來說,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 通訊協定。這是必填欄位。
    • HELM_CHART_NAME:新增 Helm 圖表名稱。這是必填欄位。
    • HELM_CHART_VERSION:圖表版本。 這是選填欄位。如未指定任何值,則會使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本名稱。 這是選填欄位。
    • HELM_RELEASE_NAMESPACE:發布版本的目標命名空間。這項作業只會為範本中含有 namespace: {{ .Release.Namespace }} 的資源設定命名空間。 這是選填欄位。如未指定任何值,則會使用預設命名空間 config-management-system
    • HELM_INCLUDE_CRDS:如要讓 Helm 範本也產生 CustomResourceDefinition,請設為 true。這個欄位為選填。如未指定任何值,預設值為 false,且不會產生 CRD。
    • VALUE:要使用的值,而非隨附於 Helm Chart 的預設值。這個欄位的格式與 Helm 圖表的 values.yaml 檔案相同。這是選填欄位。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • token:使用使用者名稱和密碼存取私人 Helm 存放區。
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:如果 tokenROOT_AUTH_TYPE,請新增密鑰名稱。這是選填欄位。

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

  2. 如果您使用 gcpserviceaccount 做為驗證類型,且未啟用 GKE 的 Workload Identity Federation,則必須在每個命名空間的 Kubernetes 服務帳戶與 Google 服務帳戶之間,建立 IAM 政策繫結。如需建立這項繫結的操作說明,請參閱「授予 Git 存取權」。

  3. 修訂根層級的可靠資料來源:

     git add .
     git commit -m 'Setting up a new namespace-scoped source of truth.'
     git push
    
  4. 視需要根據偏好的驗證方式建立 Secret。如果您使用 none 做為驗證類型,可以略過這個步驟。

    密鑰必須符合下列規定:

    • 在與 RepoSync 相同的命名空間中建立 Secret。
    • 密鑰名稱必須與您在 repo-sync.yaml 中定義的 spec.git.secretRef 名稱相符。
    • 您必須將 Secret 的公開金鑰新增至 Git 供應商。
  5. 如要驗證設定,請在命名空間範圍的單一可靠來源中,對其中一個物件使用 kubectl get。例如:

    kubectl get rolebindings -n NAMESPACE
    
  6. 如需設定多個命名空間範圍來源,請重複上述步驟。

透過 Kubernetes API 控制單一事實來源

採用這種方法時,中央管理員會將其他 RootSync 物件的聲明委派給其他管理員。如果是 RepoSync 物件,中央管理員只會在根源頭宣告命名空間,並將 RepoSync 物件的宣告委派給應用程式運算子。

控管多個根層級的單一資料來源

其他管理員可以完成下列工作,控管事實的根源:

  1. 將下列其中一個資訊清單儲存為 root-sync.yaml。請使用與設定來源類型對應的資訊清單版本。

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • ROOT_SYNC_NAME:新增 RootSync 物件的名稱。
    • ROOT_FORMAT:新增 unstructured 即可使用非結構化存放區,或新增 hierarchy 即可使用階層式存放區。這些值會區分大小寫。這是選填欄位,預設值為 hierarchy。建議您新增 unstructured,因為這個格式可讓您以最方便的方式整理設定。
    • ROOT_REPOSITORY:新增要當做根存放區的 Git 存放區網址。您可以輸入使用 HTTPS 或 SSH 通訊協定的網址。舉例來說,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 通訊協定。 這是必填欄位。
    • ROOT_REVISION:新增要同步處理的 Git 修訂版本 (標記或雜湊) 或分支。這是選填欄位,預設值為 HEAD。使用雜湊時,必須是完整雜湊,不得使用縮寫形式。
    • ROOT_BRANCH:新增要同步處理的存放區分支版本。這是選填欄位,預設值為 master。建議使用 revision 欄位指定分支名稱,方便管理。如果同時指定 revision 欄位和 branch 欄位,revision 的優先順序會高於 branch
    • ROOT_DIRECTORY:將 Git 存放區中的路徑新增至包含要同步處理設定的根目錄。這個欄位為選填,預設值為存放區的根目錄 (/)。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • ssh:使用安全殼層金鑰組
      • cookiefile:使用 cookiefile
      • token:使用權杖
      • gcpserviceaccount:使用 Google 服務帳戶存取 Cloud Source Repositories。
      • gcenode:使用 Google 服務帳戶存取 Cloud Source Repositories。只有在叢集未啟用 Workload Identity Federation for GKE 時,才選取這個選項。

      如要進一步瞭解這些驗證類型,請參閱授予 Config Sync 對 Git 的唯讀存取權

      這是必填欄位。

    • ROOT_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您必須將 Secret 的公開金鑰新增至 Git 供應商。這是選填欄位。

    • ROOT_NO_SSL_VERIFY:如要停用 SSL 憑證驗證,請將這個欄位設為 true。預設值為 false

    • ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Git 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    這個資訊清單會建立以 Git 為來源的 RootSync 物件。

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • ROOT_SYNC_NAME:新增 RootSync 物件的名稱。
    • ROOT_FORMAT:新增 unstructured 可使用非結構化存放區,新增 hierarchy 則可使用階層式存放區。這些值會區分大小寫。這是選填欄位,預設值為 hierarchy。建議您新增 unstructured,因為這個格式可讓您以最方便的方式整理設定。
    • ROOT_IMAGE:要用做根存放區的 OCI 映像檔網址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。根據預設,系統會從 latest 標記提取圖片,但您也可以改用 TAGDIGEST 提取圖片。 在 PACKAGE_NAME 中指定 TAGDIGEST
      • 如要透過 TAG 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如要透過 DIGEST 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY:在存放區中新增路徑,指向要同步處理的設定所在的根目錄。這個欄位為選填,預設值為存放區的根目錄 (/)。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • ROOT_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,OCI 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

    如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    這個資訊清單會建立 RootSync 物件,並使用 OCI 映像檔做為來源。

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • ROOT_SYNC_NAME:新增 RootSync 物件的名稱。
    • ROOT_FORMAT:新增 unstructured 可使用非結構化存放區,新增 hierarchy 則可使用階層式存放區。這些值會區分大小寫。這是選填欄位,預設值為 hierarchy。建議您新增 unstructured,因為這個格式可讓您以最方便的方式整理設定。
    • ROOT_HELM_REPOSITORY:要當做根存放區的 Helm 存放區網址。您可以使用 HTTPS 或 SSH 通訊協定輸入網址。舉例來說,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用的是 HTTPS 通訊協定。這是必填欄位。
    • HELM_CHART_NAME:新增 Helm 圖表名稱。這是必填欄位。
    • HELM_CHART_VERSION:圖表版本。 這是選填欄位。如未指定任何值,則會使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本名稱。 這是選填欄位。
    • HELM_RELEASE_NAMESPACE:發布版本的目標命名空間。這項作業只會為範本中含有 namespace: {{ .Release.Namespace }} 的資源設定命名空間。 這是選填欄位。如未指定任何值,則會使用預設命名空間 config-management-system
    • HELM_INCLUDE_CRDS:如要讓 Helm 範本也產生 CustomResourceDefinition,請設為 true。這個欄位為選填。如未指定任何值,預設值為 false,且不會產生 CRD。
    • VALUE:要使用的值,而非隨附於 Helm Chart 的預設值。這個欄位的格式與 Helm 圖表的 values.yaml 檔案相同。這是選填欄位。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • token:使用使用者名稱和密碼存取私人 Helm 存放區。
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • ROOT_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:如果 tokenROOT_AUTH_TYPE,請新增密鑰名稱。這是選填欄位。

    • ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

    如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    這個資訊清單會建立以 Helm 為來源的 RootSync 物件。

  2. 套用變更:

    kubectl apply -f root-sync.yaml
    
  3. 如需設定多個根層級的可靠資料來源,請重複上述步驟。

控管命名空間範圍內的真實來源

中央管理員工作

中央管理員會完成下列工作:

  1. 在根目錄的單一事實來源中,為命名空間範圍來源宣告 namespace 設定。

    # ROOT_REPO/namespaces/NAMESPACE/namespace.yaml
     apiVersion: v1
     kind: Namespace
     metadata:
       name: NAMESPACE
    

    NAMESPACE 替換為命名空間的名稱。

  2. 在根層級的單一事實來源中,宣告 RoleBinding,授予應用程式運算子權限。使用 RBAC 權限提升防護機制,確保應用程式運算子日後無法套用角色繫結,取得此角色繫結未授予的權限。

    如要宣告 RoleBinding,請建立下列資訊清單:

    # ROOT_REPO/namespaces/NAMESPACE/operator-rolebinding.yaml
     kind: RoleBinding
     # Add RBAC escalation prevention
     apiVersion: rbac.authorization.k8s.io/v1
     metadata:
       name: operator
       namespace: NAMESPACE
     subjects:
     - kind: User
       name: USERNAME
       apiGroup: rbac.authorization.k8s.io
     roleRef:
       kind: ClusterRole
       name: OPERATOR_ROLE
       apiGroup: rbac.authorization.k8s.io
    

    更改下列內容:

    • NAMESPACE:在根層級的單一事實來源中,新增您建立的命名空間。
    • USERNAME:新增應用程式運算子的使用者名稱。
    • OPERATOR_ROLE:身為中央管理員,您可以設定 OPERATOR_ROLE,強制規定可從命名空間範圍來源同步處理的設定類型。你可以選擇下列任一角色:

      • 預設 ClusterRole:

        • admin
        • edit

        詳情請參閱「使用者角色」。

      • 在根源頭中宣告的使用者定義 ClusterRole 或 Role。這個角色可提供精細的權限。

  3. 修訂根層級的可靠資料來源:

     git add .
     git commit -m 'Setting up new namespace-scoped source of truth.'
     git push
    

應用程式營運者工作

應用程式運算子可以完成下列工作,控管命名空間範圍的來源:

  1. 宣告 RoleBinding 設定,授予自動佈建的SERVICE_ACCOUNT_NAME服務帳戶管理命名空間中物件的權限。當 RepoSync 設定檔同步至叢集時,Config Sync 會自動建立 SERVICE_ACCOUNT_NAME 服務帳戶。

    如要宣告 RoleBinding,請建立下列資訊清單:

    # sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    更改下列內容:

    • NAMESPACE:在根層級的單一事實來源中,新增您建立的命名空間。
    • SERVICE_ACCOUNT_NAME:新增對帳員服務帳戶的名稱。如果 RepoSync 名稱為 repo-sync,則 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE。否則為 ns-reconciler-NAMESPACE-REPO_SYNC_NAME
    • RECONCILER_ROLE:應用程式運算子可以設定 RECONCILER_ROLE,強制規定可從命名空間範圍來源同步哪些類型的設定。您只能進一步限制中央管理員授予的權限。因此,這個角色不得比中央管理員在上一節中宣告的 OPERATOR_ROLE 更寬鬆。
  2. 套用 RoleBinding 設定:

    kubectl apply -f sync-rolebinding.yaml
    
  3. 視需要根據偏好的驗證方式建立 Secret。如果您使用 none 做為驗證類型,可以略過這個步驟。

    Secret 必須符合下列規定:

    • 在與 RepoSync 相同的命名空間中建立 Secret。
    • 密鑰名稱必須與您在 root-sync.yaml 中定義的 spec.git.secretRef 名稱相符。
    • 您必須將 Secret 的公開金鑰新增至 Git 供應商。
  4. 宣告 RepoSync 設定:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_REPOSITORY:新增要用做命名空間存放區的 Git 存放區網址。您可以輸入使用 HTTPS 或 SSH 通訊協定的網址。舉例來說, https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 通訊協定。如果未輸入通訊協定,系統會將網址視為 HTTPS 網址。這是必填欄位。
    • NAMESPACE_REVISION:新增要同步處理的 Git 修訂版本 (標記或雜湊) 或分支。這是選填欄位,預設值為 HEAD。使用雜湊時,必須是完整雜湊,不得使用縮寫形式。
    • NAMESPACE_BRANCH:新增要同步處理的存放區分支版本。這是選填欄位,預設值為 master。建議使用 revision 欄位指定分支名稱,方便管理。如果同時指定 revision 欄位和 branch 欄位,revision 的優先順序會高於 branch
    • NAMESPACE_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • ssh:使用安全殼層金鑰組
      • cookiefile:使用 cookiefile
      • token:使用權杖
      • gcpserviceaccount:使用 Google 服務帳戶存取 Cloud Source Repositories 中的存放區。
      • gcenode:使用 Google 服務帳戶存取 Cloud Source Repositories 中的存放區。只有在叢集未啟用 Workload Identity Federation for GKE 時,才選取這個選項。

        如要進一步瞭解這些驗證類型,請參閱授予 Config Sync 對 Git 的唯讀存取權

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為NAMESPACE_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:新增您要授予 Secret 的名稱。 這是選填欄位。

    • NAMESPACE_NO_SSL_VERIFY:如要停用 SSL 憑證驗證,請將這個欄位設為 true。預設值為 false

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Git 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如需欄位說明,以及可新增至 spec 欄位的完整欄位清單,請參閱「RepoSync 欄位」。

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_IMAGE:做為命名空間來源的 OCI 映像檔網址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。 根據預設,系統會從 latest 標記提取圖片,但您也可以改用 TAGDIGEST 提取圖片。 在 PACKAGE_NAME 中指定 TAGDIGEST

      • 如要透過 TAG 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如要透過 DIGEST 提取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY:在來源中新增路徑,前往含有要同步設定的根目錄。這個欄位為選填,預設值為來源的根目錄 (/)。

    • NAMESPACE_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,OCI 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    更改下列內容:

    • REPO_SYNC_NAME:加入 RepoSync 物件的名稱。命名空間中的名稱不得重複。
    • NAMESPACE:新增命名空間名稱。
    • NAMESPACE_REPOSITORY:要當做根存放區的 Helm 存放區網址。您可以使用 HTTPS 或 SSH 通訊協定輸入網址。舉例來說,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 通訊協定。這是必填欄位。
    • HELM_CHART_NAME:新增 Helm 圖表名稱。這是必填欄位。
    • HELM_CHART_VERSION:圖表版本。 這是選填欄位。如未指定任何值,則會使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本名稱。 這是選填欄位。
    • HELM_RELEASE_NAMESPACE:發布版本的目標命名空間。這項作業只會為範本中含有 namespace: {{ .Release.Namespace }} 的資源設定命名空間。 這是選填欄位。如未指定任何值,則會使用預設命名空間 config-management-system
    • HELM_INCLUDE_CRDS:如要讓 Helm 範本也產生 CustomResourceDefinition,請設為 true。這個欄位為選填。如未指定任何值,預設值為 false,且不會產生 CRD。
    • VALUE:要使用的值,而非隨附於 Helm Chart 的預設值。這個欄位的格式與 Helm 圖表的 values.yaml 檔案相同。這是選填欄位。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • token:使用使用者名稱和密碼存取私人 Helm 存放區。
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取圖片。

      這是必填欄位。

    • NAMESPACE_EMAIL:如果您新增 gcpserviceaccount 做為ROOT_AUTH_TYPE,請新增 Google 服務帳戶電子郵件地址。例如:acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:如果 tokenROOT_AUTH_TYPE,請新增密鑰名稱。這是選填欄位。

    • NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為 cert 的金鑰底下的 CA 憑證。這是選填欄位。

      如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位

    如要瞭解欄位,以及可新增至 spec 欄位的完整欄位清單,請參閱「RootSync 欄位」。

  5. 套用 RepoSync 設定:

    kubectl apply -f repo-sync.yaml
    
  6. 如要驗證設定,請在命名空間範圍來源的其中一個物件上使用 kubectl get。例如:

    kubectl get rolebindings -n NAMESPACE
    
  7. 如要設定多個命名空間範圍的單一事實來源,可以重複上述步驟。

確認可靠資料來源的同步狀態

您可以使用 nomos status 指令檢查可靠資料來源的同步狀態:

nomos status

您會看到類似以下範例的輸出內容:

my_managed_cluster-1
  --------------------
  <root>   git@github.com:foo-corp/acme/admin@main
  SYNCED   f52a11e4
  --------------------
  bookstore  git@github.com:foo-corp/acme/bookstore@v1
  SYNCED     34d1a8c8

在這個範例輸出中,系統會為名為 bookstore 的命名空間設定命名空間範圍來源 (在本例中為 Git 存放區)。

驗證 RootSync 安裝作業

建立 RootSync 物件時,Config Sync 會建立前置字元為 root-reconciler 的協調器。Reconciler 是以 Deployment 形式部署的 Pod。可將資訊清單從可靠來源同步至叢集。

您可以檢查 root-reconciler Deployment 的狀態,確認 RootSync 物件是否正常運作:

kubectl get -n config-management-system deployment \
    -l configsync.gke.io/sync-name=ROOT_SYNC_NAME

ROOT_SYNC_NAME 替換為 RootSync 的名稱。

您會看到類似以下範例的輸出內容:

NAME              READY   UP-TO-DATE   AVAILABLE   AGE
root-reconciler   1/1     1            1           3h42m

如要進一步瞭解如何查看 RootSync 物件的狀態,請參閱「監控 RootSync 和 RepoSync 物件」。

驗證 RepoSync 安裝作業

建立 RepoSync 物件時,Config Sync 會建立具有 ns-reconciler-NAMESPACE 前置字元的協調器,其中 NAMESPACE 是您建立 RepoSync 物件的命名空間。

如要確認 RepoSync 物件是否正常運作,請檢查命名空間協調器 Deployment 的狀態:

kubectl get -n config-management-system deployment \
  -l configsync.gke.io/sync-name=REPO_SYNC_NAME \
  -l configsync.gke.io/sync-namespace=NAMESPACE

REPO_SYNC_NAME 替換為 RepoSync 名稱,並將 NAMESPACE 替換為您建立命名空間範圍內單一事實來源的命名空間。

如要進一步瞭解如何查看 RepoSync 物件的狀態,請參閱「探索 RootSync 和 RepoSync 物件」。

移除可靠資料來源

選取「中央控制方法」或「Kubernetes API 方法」分頁標籤,查看相關操作說明。

集中控管方式

如果您使用「在根資料來源中控管資料來源」方法,中央管理員可以按照下列兩個步驟移除資料來源:

  1. 決定要刪除還是保留透過 RootSync 和 RepoSync 物件管理的資源。

    • 如要刪除 RootSync 或 RepoSync 物件管理的所有資源,請將 RootSync 或 RepoSync 物件同步至空白來源。舉例來說,GitHub 存放區沒有任何設定。如果 RootSync 或 RepoSync 物件包含另一個 RootSync 或 RepoSync 物件,內部的 RootSync 或 RepoSync 必須先同步至空白的 Git 存放區。

    • 如果您已啟用 Webhook,且想保留資源,請針對已捨棄的資源停用漂移防護機制。如果尚未啟用 Webhook,則無需採取任何額外步驟來保留資源。

  2. 從真理來源中移除 RootSync 或 RepoSync 物件。

Kubernetes API 方法

如果您使用「透過 Kubernetes API 控制命名空間範圍的可靠來源」方法,應用程式運算子可以按照下列步驟移除命名空間範圍的可靠來源:

  1. 決定要刪除還是保留透過 RootSync 和 RepoSync 物件管理的資源。

    • 如要刪除 RootSync 或 RepoSync 物件管理的所有資源,請將 RootSync 或 RepoSync 物件同步至空白來源。舉例來說,GitHub 存放區沒有任何設定。如果 RootSync 或 RepoSync 物件包含另一個 RootSync 或 RepoSync 物件,內部的 RootSync 或 RepoSync 必須先同步至空白的 Git 存放區。

    • 如果已啟用 Webhook,且想保留資源,請針對已捨棄的資源停用防止漂移功能。如果尚未啟用 Webhook,則無需採取任何額外步驟來保留資源。

  2. 執行下列指令,刪除 RootSync 或 RepoSync 物件:

    kubectl delete -f FILE_NAME
    

    請將 FILE_NAME 替換為 RootSync 或 RepoSync 設定檔的名稱,例如:root-sync.yaml

後續步驟