本頁面說明如何建立 RootSync 和 RepoSync 物件,藉此設定多個根目錄和命名空間範圍的可靠資料來源。
有了根層級的可靠資料來源,您就能同步處理叢集範圍和命名空間範圍的設定。根層級的單一事實來源可使用管理員層級的憑證,在應用程式命名空間中強制執行政策,並覆寫與您在設定中宣告狀態不同的本機變更。中央管理員通常會控管可靠資料來源的根源。
命名空間範圍內的單一事實來源為選用項目,可包含同步至叢集間特定命名空間的命名空間範圍設定。您可以將命名空間範圍的單一事實來源設定和控制權,委派給非管理員使用者。雖然 Config Sync 會自動偵測可靠來源的變更,但您可以在命名空間範圍的可靠來源中新增許可控制 Webhook,進一步偵測漂移。如要瞭解具體做法,請參閱「避免設定偏移」。
事前準備
- 建立或確保您有權存取非結構化的可靠資料來源,該來源可包含 Config Sync 同步處理的設定。Config Sync 支援 Git 存放區、Helm 資訊套件和 OCI 映像檔做為可靠來源。命名空間範圍內的單一事實來源必須使用非結構化格式。
- 建立叢集,或確認您有權存取叢集,且叢集位於 Google Kubernetes Engine 支援的平台和版本,並符合 Config Sync 的需求。
建立 RoleBinding
您必須建立 RoleBinding,才能將權限授予本指南中建立的 RepoSync。如要建立 RoleBinding,請完成下列步驟:
在根來源中,宣告
RoleBinding設定,授予SERVICE_ACCOUNT_NAME服務帳戶管理命名空間中物件的權限。當 RepoSync 設定同步至叢集時,Config Sync 會自動建立SERVICE_ACCOUNT_NAME服務帳戶。RoleBinding可以參照同一個命名空間中的Role。或者,RoleBinding可以參照ClusterRole,並將該ClusterRole繫結至RoleBinding的命名空間。您應遵循最低權限原則,將精細的權限授予使用者定義的Role,同時定義ClusterRole或使用使用者面向的角色,並在不同命名空間的多個RoleBindings中參照相同的ClusterRole。預設 ClusterRole
儲存參照預設
ClusterRole的RoleBinding資訊清單,例如admin或edit,並命名為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-sync,SERVICE_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物件管理的每項資源,藉此宣告ClusterRole或Role。這樣一來,您就能設定精細的權限。詳情請參閱「參照資源」。舉例來說,下列
ClusterRole或Role會授予管理Deployment和ServiceAccount物件的權限:# 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: ["*"]將參照
ClusterRole或Role的RoleBinding資訊清單儲存為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:設為ClusterRole或Role。NAMESPACE:新增命名空間名稱。SERVICE_ACCOUNT_NAME:新增對帳員服務帳戶的名稱。如果 RepoSync 名稱為repo-sync,SERVICE_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:新增ClusterRole或Role的名稱。
套用 RoleBinding:
kubectl apply -f FILENAME
限制
NamespaceSelectors(包括指向選取器的註解) 只能在真值根源中運作。- 如果您使用 Google Cloud 控制台或 Google Cloud CLI 安裝 Config Sync,Config Sync 會自動建立名為
root-sync的 RootSync 物件。因此,您無法將任何 RootSync 物件命名為root-sync。
選擇偏好的設定方法
請選擇下列其中一種方法來設定來源:
控制可靠資料來源中的來源。 這個方法會將可靠資料來源的所有設定集中在另一個可靠資料來源中,讓中央管理員完全掌控設定。
使用 Kubernetes API 控制來源。 如要將單一事實來源的控制權委派給不同擁有者,請使用這個方法。
在根可靠資料來源中控管來源
如要使用根來源控制來源,您需要 RoleBinding 授權存取權。如果沒有,請參閱「建立 RoleBinding」一節。
在可靠資料來源中控管根源
Config Sync 支援從多個可靠來源同步處理資料。中央管理員可以使用根源資料來源管理所有其他來源。由於 RootSync 物件是由 Config Sync 管理,這個方法可防止對叢集中的 RootSync 設定進行任何本機變更。
如要使用這個方法,請完成下列工作:
將下列其中一個資訊清單儲存為
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:使用cookiefiletoken:使用權杖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 的公開金鑰新增至 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標記提取圖片,但你也可以改用TAG或DIGEST提取圖片。 在PACKAGE_NAME中指定TAG或DIGEST:- 如要依
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 欄位」。這個資訊清單會建立以 OCI 映像檔做為來源的
RootSync物件。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:如果token是ROOT_AUTH_TYPE,請新增 Secret 名稱。這是選填欄位。ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為cert的金鑰底下的 CA 憑證。這是選填欄位。
如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位」
如要瞭解欄位,以及可新增至
spec欄位的完整欄位清單,請參閱「RootSync 欄位」。這個資訊清單會建立以 Helm 為來源的
RootSync物件。修訂根目錄可靠資料來源的變更:
git add . git commit -m 'Setting up a new root source of truth.' git push如要設定多個根來源,請重複上述步驟。 您也可以將多個 RootSync 物件的設定儲存在由另一個 RootSync 物件同步處理的根可靠來源中,以 GitOps 方式集中管理多個 RootSync 物件。
在根層級的單一事實來源中控管命名空間範圍內的物件
命名空間範圍內的可靠資料來源可由根可靠資料來源管理。由於命名空間範圍來源是由 Config Sync 管理,這個方法可防止對命名空間範圍來源定義進行任何本機變更。
如要使用這個方法,請完成下列工作:
在根目錄的可靠資料來源中,宣告
namespace設定:# ROOT_SOURCE/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE將
NAMESPACE替換為命名空間的名稱。在根層級的可靠資料來源中,於相同命名空間建立下列其中一個
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:使用cookiefiletoken:使用權杖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標記提取圖片,但你也可以改用TAG或DIGEST提取圖片。 在PACKAGE_NAME中指定TAG或DIGEST:- 如要依
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:如果token是ROOT_AUTH_TYPE,請新增 Secret 名稱。這是選填欄位。NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為cert的金鑰底下的 CA 憑證。這是選填欄位。如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位」
如要瞭解欄位,以及可新增至
spec欄位的完整欄位清單,請參閱「RootSync 欄位」。如果您使用
gcpserviceaccount做為驗證類型,且未啟用 GKE 的 Workload Identity Federation,則必須在每個命名空間的 Kubernetes 服務帳戶與 Google 服務帳戶之間建立 IAM 政策繫結。如需建立這項繫結的操作說明,請參閱「授予 Git 存取權」。修訂根目錄可靠資料來源的變更:
git add . git commit -m 'Setting up a new namespace-scoped source of truth.' git push視需要根據偏好的驗證方式建立 Secret。如果您使用
none做為驗證類型,可以略過這個步驟。密鑰必須符合下列規定:
- 在與 RepoSync 相同的命名空間中建立 Secret。
- 密鑰名稱必須與您在
repo-sync.yaml中定義的spec.git.secretRef名稱相符。 - 您必須將 Secret 的公開金鑰新增至 Git 供應商。
如要驗證設定,請在命名空間來源的其中一個物件上使用
kubectl get。例如:kubectl get rolebindings -n NAMESPACE如要設定多個命名空間範圍來源,請重複上述步驟。
在命名空間範圍的來源中控管命名空間範圍的來源
Config Sync 支援從每個命名空間的多個命名空間範圍內可靠來源進行同步。命名空間範圍內的真實來源可在相同命名空間的命名空間範圍內真實來源中管理。
如要使用這個方法,請完成下列工作:
在命名空間範圍的可靠來源中,於同一個命名空間建立下列其中一個
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:使用cookiefiletoken:使用權杖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標記提取圖片,但你也可以改用TAG或DIGEST提取圖片。 在PACKAGE_NAME中指定TAG或DIGEST:- 如要依
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:如果token是ROOT_AUTH_TYPE,請新增 Secret 名稱。這是選填欄位。NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為cert的金鑰底下的 CA 憑證。這是選填欄位。如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位」
如要瞭解欄位,以及可新增至
spec欄位的完整欄位清單,請參閱「RootSync 欄位」。如果您使用
gcpserviceaccount做為驗證類型,且未啟用 GKE 的 Workload Identity Federation,則必須在每個命名空間的 Kubernetes 服務帳戶與 Google 服務帳戶之間建立 IAM 政策繫結。如需建立這項繫結的操作說明,請參閱「授予 Git 存取權」。修訂根目錄可靠資料來源的變更:
git add . git commit -m 'Setting up a new namespace-scoped source of truth.' git push視需要根據偏好的驗證方式建立 Secret。如果您使用
none做為驗證類型,可以略過這個步驟。密鑰必須符合下列規定:
- 在與 RepoSync 相同的命名空間中建立 Secret。
- 密鑰名稱必須與您在
repo-sync.yaml中定義的spec.git.secretRef名稱相符。 - 您必須將 Secret 的公開金鑰新增至 Git 供應商。
如要驗證設定,請在命名空間範圍的單一可靠來源中,對其中一個物件使用
kubectl get。例如:kubectl get rolebindings -n NAMESPACE如需設定多個命名空間範圍來源,請重複上述步驟。
透過 Kubernetes API 控制單一事實來源
採用這種方法時,中央管理員會將其他 RootSync 物件的聲明委派給其他管理員。如果是 RepoSync 物件,中央管理員只會在根源頭宣告命名空間,並將 RepoSync 物件的宣告作業委派給應用程式運算子。
控管多個根層級的可靠資料來源
其他管理員可以完成下列工作,控管事實的根源:
將下列其中一個資訊清單儲存為
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:使用cookiefiletoken:使用權杖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 的公開金鑰新增至 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標記提取圖片,但你也可以改用TAG或DIGEST提取圖片。 在PACKAGE_NAME中指定TAG或DIGEST:- 如要依
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 欄位」。這個資訊清單會建立以 OCI 映像檔做為來源的
RootSync物件。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:如果token是ROOT_AUTH_TYPE,請新增 Secret 名稱。這是選填欄位。ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為cert的金鑰底下的 CA 憑證。這是選填欄位。
如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位」
如要瞭解欄位,以及可新增至
spec欄位的完整欄位清單,請參閱「RootSync 欄位」。這個資訊清單會建立以 Helm 為來源的
RootSync物件。套用變更:
kubectl apply -f root-sync.yaml如要設定多個根層級的可靠資料來源,請重複上述步驟。
控管命名空間範圍內的真實來源
中央管理員工作
中央管理員會完成下列工作:
在根層級的可靠資料來源中,為命名空間範圍來源宣告
namespace設定。# ROOT_REPO/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE將
NAMESPACE替換為命名空間的名稱。在根層級的單一事實來源中,宣告
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:
adminedit
詳情請參閱「使用者角色」。
在根源頭中宣告的使用者定義 ClusterRole 或 Role。這個角色可提供精細的權限。
修訂根目錄可靠資料來源的變更:
git add . git commit -m 'Setting up new namespace-scoped source of truth.' git push
應用程式營運者工作
應用程式運算子可以完成下列工作,控管命名空間範圍的來源:
宣告
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_NAME為ns-reconciler-NAMESPACE。否則為ns-reconciler-NAMESPACE-REPO_SYNC_NAME。RECONCILER_ROLE:應用程式運算子可以設定RECONCILER_ROLE,強制規定可從命名空間範圍來源同步哪些類型的設定。您只能進一步限制中央管理員授予的權限。因此,這個角色的權限不得高於中央管理員在上一節中宣告的OPERATOR_ROLE。
套用 RoleBinding 設定:
kubectl apply -f sync-rolebinding.yaml視需要根據偏好的驗證方式建立 Secret。如果您使用
none做為驗證類型,可以略過這個步驟。Secret 必須符合下列規定:
- 在與 RepoSync 相同的命名空間中建立 Secret。
- 密鑰名稱必須與您在
root-sync.yaml中定義的spec.git.secretRef名稱相符。 - 您必須將 Secret 的公開金鑰新增至 Git 供應商。
宣告
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:使用cookiefiletoken:使用權杖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標記提取圖片,但你也可以改用TAG或DIGEST提取圖片。 在PACKAGE_NAME中指定TAG或DIGEST:- 如要依
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:如果token是ROOT_AUTH_TYPE,請新增 Secret 名稱。這是選填欄位。NAMESPACE_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,您的 Helm 提供者必須使用這個憑證授權單位 (CA) 核發的憑證。密鑰必須包含名為cert的金鑰底下的 CA 憑證。這是選填欄位。如要進一步瞭解如何設定 CA 憑證的 Secret 物件,請參閱「設定憑證授權單位」
如要瞭解欄位,以及可新增至
spec欄位的完整欄位清單,請參閱「RootSync 欄位」。套用
RepoSync設定:kubectl apply -f repo-sync.yaml如要驗證設定,請在命名空間範圍來源的其中一個物件上使用
kubectl get。例如:kubectl get rolebindings -n NAMESPACE如要設定多個命名空間範圍的單一事實來源,可以重複上述步驟。
確認可靠資料來源的同步狀態
您可以使用 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 方法」分頁標籤,查看相關操作說明。
集中控管方式
如果您使用「在根資料來源中控管資料來源」方法,中央管理員可以按照下列兩個步驟移除資料來源:
決定要刪除還是保留透過 RootSync 和 RepoSync 物件管理的資源。
如要刪除 RootSync 或 RepoSync 物件管理的所有資源,請將 RootSync 或 RepoSync 物件同步至空白來源。舉例來說,GitHub 存放區沒有任何設定。如果 RootSync 或 RepoSync 物件包含另一個 RootSync 或 RepoSync 物件,內部的 RootSync 或 RepoSync 必須先同步處理至空白的 Git 存放區。
如果您已啟用 Webhook,且想保留資源,請針對已捨棄的資源停用漂移防護機制。如果尚未啟用 Webhook,就不必採取任何額外步驟來保留資源。
從真理來源移除 RootSync 或 RepoSync 物件。
Kubernetes API 方法
如果您使用「透過 Kubernetes API 控制命名空間範圍的可靠來源」方法,應用程式運算子可以按照下列步驟移除命名空間範圍的可靠來源:
決定要刪除還是保留透過 RootSync 和 RepoSync 物件管理的資源。
如要刪除 RootSync 或 RepoSync 物件管理的所有資源,請將 RootSync 或 RepoSync 物件同步至空白來源。舉例來說,GitHub 存放區沒有任何設定。如果 RootSync 或 RepoSync 物件包含另一個 RootSync 或 RepoSync 物件,內部的 RootSync 或 RepoSync 必須先同步處理至空白的 Git 存放區。
如果已啟用 Webhook,且想保留資源,請針對已捨棄的資源停用差異防止功能。如果尚未啟用 Webhook,就不必採取任何額外步驟來保留資源。
執行下列指令,刪除 RootSync 或 RepoSync 物件:
kubectl delete -f FILE_NAME請將
FILE_NAME替換為 RootSync 或 RepoSync 設定檔的名稱,例如:root-sync.yaml。
後續步驟
- 瞭解如何防止命名空間範圍內的可靠來源發生設定漂移。
- 瞭解如何監控 RootSync 和 RepoSync 物件。
- 瞭解如何將單一真實來源分成多個真實來源。