本頁說明如何向 OCI 映像檔或 Helm 存放區驗證 Config Sync。Config Sync 需要可靠資料來源的唯讀存取權,才能讀取設定、將設定套用至叢集,並保持同步。
選擇驗證方式
使用的驗證方法取決於來源類型支援的方法。
下表摘要說明可搭配 Config Sync 使用的驗證方法:
| 方法 | 支援的來源 | 說明 | 限制 |
|---|---|---|---|
| 無驗證 | Git、OCI、Helm | 不需要進行額外設定。 | 只有在可靠來源為公開狀態時,這項功能才能運作。 |
| 安全殼層金鑰組 | Git | 大多數 Git 供應商都支援這項功能。 | 需要管理金鑰。不支援 OCI 或 Helm。 |
| 權杖 | Git、OCI、Helm | 大多數 Git 供應商都支援這項功能。如果貴機構不允許使用安全殼層金鑰,可以選擇使用權杖。支援 OCI 和 Helm 的使用者名稱和密碼。 | 需要權杖管理。權杖可能會過期。 |
| Kubernetes 服務帳戶 | OCI、Helm | 使用 IAM 直接將 Artifact Registry 存取權授予 Kubernetes 服務帳戶。您必須在叢集上啟用 Workload Identity Federation for GKE。 | 不支援 Git。 |
| Google 服務帳戶 | Git | 使用 IAM,避免在 Kubernetes Secret 中儲存憑證。建議用於 Secure Source Manager 和 Cloud Source Repositories。您必須在叢集上啟用 Workload Identity Federation for GKE。 | 在叢集上安裝 Config Sync 前後,都需要進行設定。不支援在 Secure Source Manager 或 Cloud Source Repositories 以外的平台代管存放區。 |
| GitHub 應用程式 | Git | 直接與 GitHub 整合。允許精細權限。 | 僅適用於 GitHub 託管的存放區。 |
Config Sync 也支援下列驗證方法,但只有在無法使用上表列出的選項時,才建議採用這些方法:
- cookiefile:部分 Git 供應商可能不支援這項功能。不支援 OCI 或 Helm。
- Compute Engine 預設服務帳戶 (
gcenode):不建議使用,因為只有在停用 Workload Identity Federation for GKE 時,這個方法才有效。支援 Git、OCI 和 Helm。 - Helm 和 OCI 的 Google 服務帳戶:支援,但不建議使用,因為 Kubernetes 服務帳戶方法需要的設定較少。
事前準備
將可靠資料來源的唯讀存取權授予 Config Sync 前,請先完成下列工作:
準備或存取 OCI 映像檔或 Helm 存放區,以便儲存要讓 Config Sync 同步處理的設定檔。詳情請參閱下列資源:
- 將設定新增至可靠的單一來源:設定的概念資訊。
- GitOps 最佳做法:提供整理及管理存放區的訣竅和一般最佳做法。
- 使用非結構化存放區:使用及整理非結構化存放區的建議。
建立或存取 GKE 叢集。建立叢集前,請詳閱 Config Sync 的叢集設定規定和建議。
授予 OCI 映像檔的存取權
本節說明如何使用支援的驗證方法,授予 Config Sync OCI 映像檔的唯讀存取權。
您必須將 OCI 映像檔儲存在 Artifact Registry 中,才能向 Config Sync 進行驗證。
使用權杖
如要使用權杖授予 Config Sync 對 OCI 存放區的唯讀存取權,請建立使用 OCI 存放區使用者名稱和密碼的 Secret:
kubectl create secret generic SECRET_NAME \
--namespace=config-management-system \
--from-literal=username=USERNAME \
--from-literal=password=PASSWORD
更改下列內容:
SECRET_NAME:Secret 名稱。USERNAME:OCI 存放區使用者名稱。PASSWORD:您的 OCI 存放區密碼。
安裝 Config Sync 時,請使用權杖 (token) 做為驗證類型。您也必須在 spec.oci.secretRef.name 欄位中指定密鑰名稱。
使用 Kubernetes ServiceAccount
如要使用 Kubernetes ServiceAccount 進行驗證,叢集必須啟用 Workload Identity Federation for GKE 或 fleet Workload Identity Federation for GKE。
如要使用 Kubernetes ServiceAccount 授予 Config Sync 對 OCI 映像檔的唯讀存取權,請完成下列步驟:
-
如要取得建立政策繫結所需的權限,請要求管理員授予您下列 IAM 角色:
-
授予專案層級存取權:
專案的專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) -
授予存放區專屬存取權:
存放區的 Artifact Registry 管理員 (
roles/artifactregistry.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
-
授予專案層級存取權:
專案的專案 IAM 管理員 (
將專案或存放區的 Artifact Registry 讀取者角色 (
roles/artifactregistry.reader) 授予 Kubernetes ServiceAccount:如果專案中的所有存放區都適用相同權限,請授予專案層級權限。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \ --condition=None如要讓服務帳戶在專案中對每個存放區擁有不同層級的存取權,請授予存放區專屬權限。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \ --project=PROJECT_ID \ --condition=None
更改下列內容:
PROJECT_ID:您的專案 ID。FLEET_HOST_PROJECT_NUMBER:如果您使用 Workload Identity Federation for GKE,這個值與專案編號相同。如果您使用 Workload Identity Federation for GKE,這個值是叢集註冊的機群專案編號。FLEET_HOST_PROJECT_ID:如果您使用 Workload Identity Federation for GKE,這個值與專案 ID 相同。如果您使用 Workload Identity Federation for GKE,這個值就是叢集註冊的機群專案 ID。KUBERNETES_SERVICEACCOUNT:協調器的 Kubernetes ServiceAccount。在大多數情況下,值為root-reconciler,因為透過 Cloud de Confiance 控制台或 Google Cloud CLI 安裝時,Config Sync 會自動建立名為root-sync的RootSync物件。否則,請使用root-reconciler-ROOT_SYNC_NAME做為值。REPOSITORY:存放區 ID。LOCATION:存放區的區域或多區域位置。
安裝 Config Sync 時,請使用 Kubernetes ServiceAccount (k8sserviceaccount) 做為驗證類型。
使用 Compute Engine 預設服務帳戶
如果未啟用 GKE 的 Workload Identity Federation,您可以使用 Compute Engine 服務帳戶進行驗證,做為 Google 服務帳戶的替代方案。
如要使用 Compute Engine 預設服務帳戶授予 Config Sync 唯讀存取權給存放區,請將讀取權限授予 Artifact Registry 的 Compute Engine 服務帳戶:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com \
--role=roles/artifactregistry.reader
更改下列內容:
PROJECT_ID:專案 IDPROJECT_NUMBER:您的專案編號。
安裝 Config Sync 時,請使用 Compute Engine 服務帳戶 (gcenode) 做為驗證類型。
授予 Helm 存放區的存取權
本節說明如何授予 Config Sync 存放區中儲存的 Helm 資訊套件唯讀存取權。
使用權杖
如要使用權杖授予 Config Sync 對 Helm 存放區的唯讀存取權,請使用 Helm 存放區的使用者名稱和密碼建立 Secret:
kubectl create secret generic SECRET_NAME \
--namespace=config-management-system \
--from-literal=username=USERNAME \
--from-literal=password=PASSWORD
更改下列內容:
SECRET_NAME:Secret 名稱。USERNAME:Helm 存放區使用者名稱。PASSWORD:Helm 存放區密碼。
安裝 Config Sync 時,請使用權杖 (token) 做為驗證類型。您也必須在 spec.helm.secretRef.name 欄位中指定密鑰名稱。
使用 Kubernetes ServiceAccount
如要使用 Kubernetes ServiceAccount 進行驗證,請務必符合下列規定:
- 存放區位於 Artifact Registry。
- 叢集已啟用 Workload Identity Federation for GKE 或機群 Workload Identity Federation for GKE。
如要使用 Kubernetes ServiceAccount 授予 Config Sync 對 Helm 存放區的唯讀存取權,請完成下列步驟:
-
如要取得建立政策繫結所需的權限,請要求管理員授予您下列 IAM 角色:
-
授予專案層級存取權:
專案的專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) -
授予存放區專屬存取權:
存放區的 Artifact Registry 管理員 (
roles/artifactregistry.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
-
授予專案層級存取權:
專案的專案 IAM 管理員 (
將專案或存放區的 Artifact Registry 讀取者角色 (
roles/artifactregistry.reader) 授予 Kubernetes ServiceAccount:如果專案中的所有存放區都適用相同權限,請授予專案層級權限。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \ --condition=None如要讓服務帳戶在專案中對每個存放區擁有不同層級的存取權,請授予存放區專屬權限。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \ --project=PROJECT_ID \ --condition=None
更改下列內容:
PROJECT_ID:您的專案 ID。FLEET_HOST_PROJECT_NUMBER:如果您使用 Workload Identity Federation for GKE,這個值與專案編號相同。如果您使用 Workload Identity Federation for GKE,這個值是叢集註冊的機群專案編號。FLEET_HOST_PROJECT_ID:如果您使用 Workload Identity Federation for GKE,這個值與專案 ID 相同。如果您使用 Workload Identity Federation for GKE,這個值就是叢集註冊的機群專案 ID。KUBERNETES_SERVICEACCOUNT:協調器的 Kubernetes ServiceAccount。在大多數情況下,值為root-reconciler,因為透過 Cloud de Confiance 控制台或 Google Cloud CLI 安裝時,Config Sync 會自動建立名為root-sync的RootSync物件。否則,請使用root-reconciler-ROOT_SYNC_NAME做為值。REPOSITORY:存放區 ID。LOCATION:存放區的區域或多區域位置。
安裝 Config Sync 時,請使用 Kubernetes ServiceAccount (k8sserviceaccount) 做為驗證類型。
使用 Compute Engine 預設服務帳戶
如果未啟用 GKE 的 Workload Identity Federation,您可以使用 Compute Engine 服務帳戶進行驗證,做為 Google 服務帳戶的替代方案。
如要使用 Compute Engine 預設服務帳戶授予 Config Sync 唯讀存取權給存放區,請將讀取權限授予 Artifact Registry 的 Compute Engine 服務帳戶:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com \
--role=roles/artifactregistry.reader
更改下列內容:
PROJECT_ID:專案 IDPROJECT_NUMBER:您的專案編號。
安裝 Config Sync 時,請使用 Compute Engine 服務帳戶 (gcenode) 做為驗證類型。