透過 Config Sync,您可以使用儲存在可靠來源中的設定檔管理 Kubernetes 資源。Config Sync 支援 Git 存放區、OCI 映像檔和 Helm 資訊套件做為可靠來源。本頁面說明如何啟用及設定 Config Sync,以便從根存放區進行同步。Config Sync 適用於 Google Kubernetes Engine (GKE) Enterprise 版。
使用 Google Cloud 控制台或 Google Cloud CLI 安裝 Config Sync 時,系統會依預設啟用 RootSync
和 RepoSync
API。這項功能可提供額外功能,例如從多個存放區同步處理,以及同步處理 Kustomize 和 Helm 設定。
事前準備
安裝 Config Sync 前,請先準備環境、確認符合叢集需求,並授予適當的使用者角色。
準備本機環境
請完成下列工作,準備本機環境:
- 建立或確保自己有權存取可靠來源。您可以在這裡新增 Config Sync 要同步處理的設定。如要進一步瞭解如何設定設定和單一事實來源,請參閱下列其中一個指南:
- 安裝並初始化 Google Cloud CLI,以取得
gcloud
和nomos
指令。 如果您使用 Cloud Shell,Google Cloud CLI 會預先安裝。如果您先前已安裝 Google Cloud CLI,請執行gcloud components update
,取得最新版本。
查看叢集需求
在叢集上安裝 Config Sync 前,請先參閱叢集設定建議和需求。
準備叢集
建立合適的叢集後,請完成下列步驟:
如果您打算使用 Google Cloud CLI 設定 Config Sync,或使用 Google Cloud外部叢集,請確保 GKE 叢集或 Google Cloud外部叢集已註冊至車隊。如果您打算使用 Google Cloud 主控台,可以在設定 Config Sync 時註冊 GKE 叢集。
安裝 Config Sync
在下列各節中,您將授予 Config Sync 存取下列任一可靠來源的權限:
授予存取權後,您就可以設定 Config Sync。
授予 Git 存取權
Config Sync 需要 Git 存放區的唯讀權限,才能讀取提交至存放區的設定,並將這些設定套用至叢集。
如果存放區不需要驗證唯讀存取權,您可以繼續設定 Config Sync,並使用 none
做為驗證類型。舉例來說,如果您可以在不登入的情況下,使用網頁介面瀏覽存放區,或是使用 git
clone
在本機建立存放區的副本,而不需提供憑證或使用已儲存的憑證,就不需要驗證。在這種情況下,您不需要建立 Secret。
不過,由於大多數使用者對存放區的讀取存取權受到限制,因此需要建立憑證。如果需要憑證,系統會將憑證儲存在每個已註冊叢集的「Secret」中 (除非您使用 Google 服務帳戶)。git-creds
密鑰必須命名為 git-creds
,因為這是固定值。
Config Sync 支援下列驗證機制:
- 安全殼層金鑰組 (
ssh
) - Cookiefile (
cookiefile
) - 權杖 (
token
) - Google 服務帳戶 (
gcpserviceaccount
) - Compute Engine 預設服務帳戶 (
gcenode
) - GitHub 應用程式 (
githubapp
)
請選擇存放區支援的機制。一般而言,我們建議使用 SSH 金鑰組。GitHub 和 Bitbucket 都支援使用 SSH 金鑰組。不過,如果您使用 Cloud Source Repositories 中的存放區,建議改用 Google 服務帳戶,因為程序較簡單。如果貴機構代管存放區,但您不知道支援哪些驗證方法,請與管理員聯絡。
如要使用 Cloud Source Repositories 中的存放區做為 Config Sync 存放區,請完成下列步驟來擷取 Cloud Source Repositories 網址:
列出所有存放區:
gcloud source repos list
從輸出內容中,複製要使用的存放區網址。 例如:
REPO_NAME PROJECT_ID URL my-repo my-project https://source.developers.google.com/p/my-project/r/my-repo-csr
您需要在下一節中設定 Config Sync 時使用這個網址。如果您使用Google Cloud 控制台設定 Config Sync,請在「URL」欄位中新增網址。如果您使用 Google Cloud CLI 設定 Config Sync,請將網址新增至設定檔的
syncRepo
欄位。
安全殼層金鑰組
SSH 金鑰組包含兩個檔案:一個公開金鑰和一個私密金鑰。公開金鑰的副檔名通常是 .pub
。
如要使用安全殼層金鑰組,請完成下列步驟:
建立 SSH 金鑰組,允許 Config Sync 對您的 Git 存放區進行驗證。如果您必須對存放區進行驗證才能複製或讀取存放區,此為必要步驟。如果安全性管理員會提供金鑰組給您,請略過這個步驟。您可以將單一金鑰組用於所有叢集,或是針對每個叢集使用專屬的金鑰組,全視您的安全性與法規遵循要求而定。
以下指令會建立 4096 位元的 RSA 金鑰。我們建議您不要使用低於 4096 位元的值:
ssh-keygen -t rsa -b 4096 \ -C "GIT_REPOSITORY_USERNAME" \ -N '' \ -f /path/to/KEYPAIR_FILENAME
更改下列內容:
GIT_REPOSITORY_USERNAME
:您希望 Config Sync 用來向存放區驗證身分的使用者名稱/path/to/KEYPAIR_FILENAME
:金鑰組的路徑
如果您使用第三方 Git 存放區主機 (例如 GitHub),或是想搭配 Cloud Source Repositories 使用服務帳戶,建議您使用不同的帳戶。
設定存放區來辨識您剛才建立的「公開金鑰」。請參閱您 Git 主機供應商的說明文件。為方便起見,以下提供幾個熱門 Git 主機供應商的操作說明:
- Cloud Source Repositories
- Bitbucket
- GitHub 建議您建立個別的部署金鑰, 提供單一 GitHub 存放區的唯讀存取權。
- GitLab
將「私密金鑰」新增到叢集的新 Secret 中:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
將
/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
替換為私密金鑰的名稱 (沒有.pub
後置字串者)。(建議) 如要使用 SSH 驗證設定已知主機檢查,請將已知主機金鑰新增至
git_creds
密鑰的data.known_hosts
欄位。如要停用known_hosts
檢查,可以從密鑰中移除known_hosts
欄位。如要新增已知主機金鑰,請執行下列指令:kubectl edit secret git-creds \ --namespace=config-management-system
然後在
data
下方新增已知主機項目:known_hosts: KNOWN_HOSTS_KEY
將私密金鑰從本機磁碟中刪除,或是保護該金鑰。
設定 Config Sync 並新增 Git 存放區的網址時,請使用 SSH 通訊協定。如果您使用 Cloud Source Repositories 中的存放區,輸入網址時必須採用下列格式:
ssh://EMAIL@source.developers.google.com:2022/p/PROJECT_ID/r/REPO_NAME
更改下列內容:
EMAIL
:你的 Google Cloud 使用者名稱PROJECT_ID
:存放區所在專案的 ID Google CloudREPO_NAME
:存放區名稱
Cookiefile
取得 cookiefile
的程序取決於您存放區的設定。如需範例,請參閱 Cloud Source Repositories 說明文件中的「產生靜態憑證」。憑證通常儲存在主目錄的 .gitcookies
檔案中,或是由安全性管理員提供給您。
如要使用 cookiefile
,請完成下列步驟:
建立並取得
cookiefile
後,請將其新增至叢集中的新 Secret。如果您未使用 HTTPS Proxy,請使用下列指令建立 Secret:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=cookie_file=/path/to/COOKIEFILE
如需使用 HTTPS Proxy,請執行下列指令,將 Proxy 新增至 Secret,並一併新增
cookiefile
:kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=cookie_file=/path/to/COOKIEFILE \ --from-literal=https_proxy=HTTPS_PROXY_URL
更改下列內容:
/path/to/COOKIEFILE
:適當的路徑和檔案名稱HTTPS_PROXY_URL
:與 Git 存放區通訊時使用的 HTTPS Proxy 網址
如果本機仍須使用
cookiefile
,請妥善保管,否則請將其刪除。
權杖
如果貴機構不允許使用安全殼層金鑰,可以選擇使用權杖。有了 Config Sync,您就能使用 GitHub 的個人存取權杖 (PAT)、GitLab 的 PAT 或部署金鑰,或是 Bitbucket 的應用程式密碼做為權杖。
如要使用權杖建立 Secret,請完成下列步驟:
使用 GitHub、GitLab 或 Bitbucket 建立權杖:
建立並取得權杖後,請將權杖新增至叢集中的新 Secret。
如果您未使用 HTTPS Proxy,請使用下列指令建立 Secret:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace="config-management-system" \ --from-literal=username=USERNAME \ --from-literal=token=TOKEN
更改下列內容:
USERNAME
:您要使用的使用者名稱。TOKEN
:您在上一個步驟中建立的權杖。
如需使用 HTTPS Proxy,請執行下列指令,將 Proxy 連同
username
和token
一併新增至 Secret:kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=username=USERNAME \ --from-literal=token=TOKEN \ --from-literal=https_proxy=HTTPS_PROXY_URL
更改下列內容:
USERNAME
:您要使用的使用者名稱。TOKEN
:您在上一個步驟中建立的權杖。HTTPS_PROXY_URL
:與 Git 存放區通訊時使用的 HTTPS 代理伺服器網址。
如果本機仍須使用權杖,請妥善保管,否則請刪除。
Google 服務帳戶
如果存放區位於 Cloud Source Repositories,且叢集使用 GKE 適用的工作負載身分聯盟或車隊適用的工作負載身分聯盟,您可以使用 Google 服務帳戶,授予 Config Sync 權限,允許存取代管叢集所在專案中的存放區。
如果您還沒有服務帳戶,請建立服務帳戶。
將 Cloud Source Repositories 讀者 (
roles/source.reader
) IAM 角色授予 Google 服務帳戶。如要進一步瞭解 Cloud Source Repositories 角色和權限,請參閱授予檢視存放區的權限。如果專案中的所有存放區都適用相同權限,請授予專案層級權限。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/source.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
如要讓服務帳戶在專案中對每個存放區擁有不同層級的存取權,請授予存放區專屬權限。
gcloud source repos set-iam-policy REPOSITORY POLICY_FILE --project=PROJECT_ID
如果您使用 Google Cloud 主控台設定 Config Sync,請選取「Workload Identity Federation for GKE」做為「Authentication Type」,然後新增服務帳戶電子郵件地址。
如果您使用 Google Cloud CLI 設定 Config Sync,請將
gcpserviceaccount
新增為secretType
,然後將服務帳戶電子郵件地址新增至gcpServiceAccountEmail
。設定 Config Sync 後,請在 Kubernetes 服務帳戶與 Google 服務帳戶之間建立 IAM 政策繫結。系統會等到您完成 Config Sync 初次設定之後,再建立 Kubernetes 服務帳戶。
如果您使用已註冊至機群的叢集,每個機群只需建立一次政策繫結。註冊至機群的所有叢集都會共用相同的 Workload Identity Federation for GKE 集區。根據機群的相同性概念,如果您在某個叢集中將 IAM 政策新增至 Kubernetes 服務帳戶,則同一個機群中其他叢集上相同命名空間的 Kubernetes 服務帳戶也會取得相同的 IAM 政策。
有了這個繫結,Config Sync Kubernetes 服務帳戶即可做為 Google 服務帳戶:
gcloud iam service-accounts add-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
更改下列內容:
PROJECT_ID
:機構的專案 ID。FLEET_HOST_PROJECT_ID
:如果您使用 GKE Workload Identity Federation for GKE,這與PROJECT_ID
相同。如果您使用 GKE 適用的 Fleet 工作負載身分聯盟,這個 ID 是叢集註冊的 Fleet 專案 ID。GSA_NAME
:您要用來連線至 Artifact Registry 的自訂 Google 服務帳戶。服務帳戶必須具備 Artifact Registry 讀者 (roles/artifactregistry.reader
) IAM 角色。KSA_NAME
:調解器的 Kubernetes 服務帳戶。- 如果是根存放區,如果
RootSync
名稱是root-sync
,請使用root-reconciler
。否則,請使用root-reconciler-ROOT_SYNC_NAME
。如果您使用 Google Cloud 控制台或 Google Cloud CLI 安裝 Config Sync,Config Sync 會自動建立名為root-sync
的 RootSync 物件。
- 如果是根存放區,如果
REPOSITORY
:存放區的名稱。POLICY_FILE
:具備 Identity and Access Management 政策的 JSON 或 YAML 檔案。
Compute Engine 預設服務帳戶
如果存放區位於 Cloud Source Repositories,且叢集是 GKE,並停用了 GKE 適用的工作負載身分聯盟,則可以使用 gcenode
做為驗證類型。
如果您使用 Google Cloud 控制台設定 Config Sync,請選取「Google Cloud Repository」做為「Authentication Type」。
如果您使用 Google Cloud CLI 設定 Config Sync,請將 gcenode
新增為 secretType
。
選取「Google Cloud Repository」或 gcenode
,即可使用 Compute Engine 預設服務帳戶。您必須將 Cloud Source Repositories Reader (roles/source.reader
) IAM 角色授予 Compute Engine 預設服務帳戶。如要進一步瞭解 Cloud Source Repositories 角色和權限,請參閱授予檢視存放區的權限。
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/source.reader \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
將 PROJECT_ID
替換為貴機構的專案 ID,並將 PROJECT_NUMBER
替換為貴機構的專案編號。
GitHub 應用程式
如果存放區位於 GitHub,您可以將 githubapp
設為驗證類型。
如要使用 GitHub 應用程式,請完成下列步驟:
按照 GitHub 上的操作說明,佈建 GitHub 應用程式並授予從存放區讀取資料的權限。
將 GitHub 應用程式設定新增至叢集內的新 Secret:
使用用戶端 ID
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=github-app-client-id=CLIENT_ID \ --from-literal=github-app-installation-id=INSTALLATION_ID \ --from-file=github-app-private-key=/path/to/GITHUB_PRIVATE_KEY \ --from-literal=github-app-base-url=BASE_URL
- 將
CLIENT_ID
替換為 GitHub 應用程式的用戶端 ID。 - 將
INSTALLATION_ID
替換為 GitHub 應用程式的安裝 ID。 - 將
/path/to/GITHUB_PRIVATE_KEY
替換為包含私密金鑰的檔案名稱。 - 將
BASE_URL
替換成 GitHub API 端點的基本網址。只有在存放區並非託管於 www.github.com 時,才需要使用這個引數。否則可以省略引數,系統會預設為https://api.github.com/
。
使用應用程式 ID
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=github-app-application-id=APPLICATION_ID \ --from-literal=github-app-installation-id=INSTALLATION_ID \ --from-file=github-app-private-key=/path/to/GITHUB_PRIVATE_KEY \ --from-literal=github-app-base-url=BASE_URL
- 將
APPLICATION_ID
替換為 GitHub 應用程式的應用程式 ID。 - 將
INSTALLATION_ID
替換為 GitHub 應用程式的安裝 ID。 - 將
/path/to/GITHUB_PRIVATE_KEY
替換為包含私密金鑰的檔案名稱。 - 將
BASE_URL
替換成 GitHub API 端點的基本網址。只有在存放區並非託管於 www.github.com 時才需要。否則可以省略這個引數,並預設為https://api.github.com/
。
- 將
將私密金鑰從本機磁碟中刪除,或是保護該金鑰。
設定 Config Sync 並新增 Git 存放區的網址時,請使用
githubapp
驗證類型。
授予 Config Sync 對 OCI 的唯讀存取權
Config Sync 需要 Artifact Registry 中儲存的 OCI 映像檔唯讀權限,才能讀取映像檔中包含的設定,並將這些設定套用至叢集。
如果映像檔不需要驗證唯讀存取權,您可以繼續設定 Config Sync,並使用 none
做為驗證類型。舉例來說,如果圖片對外公開,網際網路上的任何人都能存取,就不需要驗證。
不過,大多數使用者都需要建立憑證,才能存取受限制的圖片。 Config Sync 支援下列驗證機制:
- Kubernetes 服務帳戶 (
k8sserviceaccount
) - Google 服務帳戶 (
gcpserviceaccount
) Compute Engine 預設服務帳戶 (
gcenode
)
Kubernetes 服務帳戶
如果將 OCI 映像檔儲存在 Artifact Registry,且叢集使用 GKE 適用的 Workload Identity Federation 或 Fleet 適用的 Workload Identity Federation,則可使用 Kubernetes 服務帳戶做為驗證類型。
將 Artifact Registry Reader (
roles/artifactregistry.reader
) 身分與存取權管理角色授予 Kubernetes 服務帳戶,並搭配使用 GKE 集區的 Workload Identity Federation。如要進一步瞭解 Artifact Registry 角色和權限,請參閱設定 Artifact Registry 的角色和權限。如果專案中的所有存放區都適用相同權限,請授予專案層級權限。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
如要讓服務帳戶在專案中對每個存放區擁有不同層級的存取權,請授予存放區專屬權限。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
更改下列內容:
PROJECT_ID
:機構的專案 ID。FLEET_HOST_PROJECT_ID
:如果您使用 GKE Workload Identity Federation for GKE,這與PROJECT_ID
相同。如果您使用 GKE 適用的 Fleet 工作負載身分聯盟,這個 ID 是叢集註冊的 Fleet 專案 ID。KSA_NAME
:調解器的 Kubernetes 服務帳戶。- 如果是根存放區,如果
RootSync
名稱是root-sync
,請使用root-reconciler
。否則,請使用root-reconciler-ROOT_SYNC_NAME
。如果您使用 Google Cloud 控制台或 Google Cloud CLI 安裝 Config Sync,Config Sync 會自動建立名為root-sync
的 RootSync 物件。
- 如果是根存放區,如果
REPOSITORY
:存放區的 ID。LOCATION
:存放區的區域或多區域位置。
Compute Engine 預設服務帳戶
如果 Helm 資訊圖表儲存在 Artifact Registry 中,且叢集是 GKE,並停用了 GKE 適用的工作負載身分聯盟,則可以使用 gcenode
做為驗證類型。Config Sync 會使用 Compute Engine 預設服務帳戶。
您必須授予 Compute Engine 預設服務帳戶 Artifact Registry 的讀取權。
執行下列指令,授予 Compute Engine 服務帳戶 Artifact Registry 的讀取權限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.reader
將
PROJECT_ID
替換為貴機構的專案 ID,並將PROJECT_NUMBER
替換為貴機構的專案編號。
授予 Helm Config Sync 唯讀存取權
Config Sync 需要 Helm 存放區的唯讀權限,才能讀取存放區中的 Helm 資訊圖表,並將其安裝至叢集。
如果存放區不需要驗證唯讀存取權,您可以繼續設定 Config Sync,並使用 none
做為驗證類型。舉例來說,如果 Helm 存放區是公開的,網際網路上的任何人都能存取,您就不需要驗證。
不過,大多數使用者都需要建立憑證,才能存取私有 Helm 存放區。 Config Sync 支援下列驗證機制:
- 權杖 (
token
) - Kubernetes 服務帳戶 (
k8sserviceaccount
) - Google 服務帳戶 (
gcpserviceaccount
) - Compute Engine 預設服務帳戶 (
gcenode
)
權杖
使用 Helm 存放區使用者名稱和密碼建立密鑰:
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 時,您會使用為 spec.helm.secretRef.name
選擇的 Secret 名稱。
Kubernetes 服務帳戶
如果 Helm 資訊圖表儲存在 Artifact Registry,且叢集使用 GKE 適用的 Workload Identity Federation for GKE 或 Fleet 適用的 Workload Identity Federation for GKE,則可使用 Kubernetes 服務帳戶做為驗證類型。
將 Artifact Registry Reader (
roles/artifactregistry.reader
) 身分與存取權管理角色授予 Kubernetes 服務帳戶,並搭配使用 GKE 集區的 Workload Identity Federation。如要進一步瞭解 Artifact Registry 角色和權限,請參閱設定 Artifact Registry 的角色和權限。如果專案中的所有存放區都適用相同權限,請授予專案層級權限。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
如要讓服務帳戶在專案中對每個存放區擁有不同層級的存取權,請授予存放區專屬權限。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
更改下列內容:
PROJECT_ID
:機構的專案 ID。FLEET_HOST_PROJECT_ID
:如果您使用 GKE Workload Identity Federation for GKE,這與PROJECT_ID
相同。如果您使用 GKE 適用的 Fleet 工作負載身分聯盟,這個 ID 是叢集註冊的 Fleet 專案 ID。KSA_NAME
:調解器的 Kubernetes 服務帳戶。- 如果是根存放區,如果
RootSync
名稱是root-sync
,請使用root-reconciler
。否則,請使用root-reconciler-ROOT_SYNC_NAME
。
- 如果是根存放區,如果
REPOSITORY
:存放區的 ID。LOCATION
:存放區的區域或多區域位置。
Compute Engine 預設服務帳戶
如果 Helm 資訊圖表儲存在 Artifact Registry 中,且叢集是 GKE,並停用了 GKE 適用的工作負載身分聯盟,則可以使用 gcenode
做為驗證類型。Config Sync 會使用 Compute Engine 預設服務帳戶。
您必須授予 Compute Engine 預設服務帳戶 Artifact Registry 的讀取權。您可能需要授予 storage-ro
存取權範圍,才能授予唯讀權限來提取圖片。
授予 Compute Engine 服務帳戶 Artifact Registry 的讀取權限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.reader
將
PROJECT_ID
替換為貴機構的專案 ID,並將PROJECT_NUMBER
替換為貴機構的專案編號。
設定 Config Sync
在本節中,您將設定根存放區。如果同步處理至 Git 存放區,可以使用 Google Cloud 控制台逐步完成安裝程序,並自動執行部分步驟。
使用 Google Cloud 控制台或 Google Cloud CLI 安裝 Config Sync 時,Config Sync 會自動建立名為 root-sync
的 RootSync 物件。您可以使用 kubectl
指令修改 root-sync
,並新增其他 Config Sync 設定。詳情請參閱「使用 kubectl
指令設定 Config Sync」。
控制台
安裝 Config Sync
如要安裝 Config Sync,所有叢集都必須註冊至機群。在 Google Cloud 控制台中安裝 Config Sync 時,選取個別叢集會自動將這些叢集註冊至機群。
- 前往 Google Cloud 控制台的「Features」(功能) 區段,然後點選「Config」(設定) 頁面。
- 按一下「安裝 Config Sync」add。
- 選取要使用的 Config Sync 版本。
- 在「安裝選項」下方,選取下列任一選項:
- 在整個機群中安裝 Config Sync (建議選項):系統會在機群中的所有叢集上安裝 Config Sync。
- 在個別叢集上安裝 Config Sync:所有選取的叢集都會自動註冊至機群。 系統會在機群中的所有叢集上安裝 Config Sync。
- 如要在個別叢集上安裝 Config Sync,請在「Available clusters」(可用叢集) 表格中,選取要安裝 Config Sync 的叢集。
- 按一下「Install Config Sync」(安裝 Config Sync)。在「設定」分頁中,幾分鐘後,機群中叢集的「狀態」欄應該會顯示「已啟用」。
部署套件
將叢集註冊至機群並安裝 Config Sync 後,您就能設定 Config Sync,從可靠來源將套件部署至叢集。您可以將相同套件部署至多個叢集,也可以將不同套件部署至不同叢集。部署套件後,您可以編輯套件,但無法變更套件名稱和同步類型等部分設定。詳情請參閱「管理套件」。
如要部署套件,請完成下列步驟:
前往 Google Cloud 控制台的 Config Sync 資訊主頁。
按一下「Deploy Package」(部署套件)。
在「Select clusters for package deployment」(選取叢集來部署套件) 表格中,選取要部署套件的叢集,然後按一下「Continue」(繼續)。
選取「Package hosted on Git」(Git 上託管的套件) 或「Package hosted on OCI」(OCI 上託管的套件) 做為來源類型,然後按一下「繼續」。
在「套件詳細資料」部分,輸入「套件名稱」,用於識別 RootSync 或 RepoSync 物件。
在「Sync type」(同步類型) 欄位中,選擇「Cluster scoped sync」(叢集範圍同步) 或「Namespace scoped sync」(命名空間範圍同步) 做為同步類型。
叢集範圍同步會建立 RootSync 物件,命名空間範圍同步則會建立 RepoSync 物件。 如要進一步瞭解這些物件,請參閱「Config Sync 架構」。
在「來源」部分,完成下列步驟:
如要使用 Git 存放區中託管的來源,請填寫下列欄位:
- 輸入做為資料來源的 Git 存放區網址做為「存放區網址」。
- 選用:更新「修訂版本」欄位,確認您是否未使用預設的
HEAD
。 - 選用:如不想從根存放區同步處理,請更新「路徑」欄位。
- 選用:如果您未使用預設的
main
分支版本,請更新「分支版本」欄位。
如要使用 OCI 映像檔代管的來源,請輸入下列欄位:
- 輸入做為可靠資料來源的 OCI 圖片網址,做為「圖片」。
- 輸入要同步的目錄路徑 (相對於根目錄),做為「目錄」。
(選用):展開「進階設定」部分,完成下列步驟:
選取「驗證類型」。Config Sync 需要您可靠來源的唯讀權限,才能讀取來源中的設定檔,並將這些檔案套用至叢集。除非來源不需要驗證 (例如公開存放區),否則請務必授予 Config Sync 對 Git 存放區、OCI 映像檔或 Helm 資訊套件 (僅限 gcloud CLI) 的唯讀存取權。選擇與安裝 Config Sync 時設定的驗證類型相同:
- 無:不使用任何驗證機制。
- SSH:使用 SSH 金鑰組進行驗證。
- Cookiefile:使用
cookiefile
進行驗證。 - 權杖:使用存取權杖或密碼進行驗證。
- Google Cloud Repository:使用 Google 服務帳戶存取 Cloud Source Repositories 存放區。只有在叢集未啟用 GKE 的工作負載身分聯盟時,才選取這個選項。
- Workload Identity:使用 Google 服務帳戶存取 Cloud Source Repositories 存放區。
輸入秒數來設定「同步等待時間」,決定 Config Sync 嘗試從可靠資料來源提取資料時的等待時間。
輸入 Git Proxy 網址,供 HTTPS Proxy 在與資料來源通訊時使用。
選擇「階層」即可變更「來源格式」。
在大多數情況下,建議使用預設值「非結構化」,因為這樣您就能隨意整理單一事實來源。
按一下「Deploy Package」(部署套件)。
系統會將您重新導向至 Config Sync「Packages」(套件) 頁面。幾分鐘後,您應該會在所設定叢集的「Sync status」(同步處理狀態)欄中看到「Synced」(已同步)。
gcloud
啟用
ConfigManagement
車隊功能:gcloud beta container fleet config-management enable
準備設定,方法是建立新的
apply-spec.yaml
資訊清單,或使用現有資訊清單。使用現有資訊清單,即可為叢集設定與其他叢集相同的設定。建立新資訊清單
如要為叢集設定 Config Sync 的新設定,請建立名為
apply-spec.yaml
的檔案,然後將下列 YAML 檔案複製到該檔案中。建立資訊清單時,您可以設定所有必要的選用
spec.configSync
欄位,之後再使用kubectl
指令進行設定。您也可以只將spec.configSync.enabled
欄位設為true
,並省略選用欄位。之後您可以使用kubectl
指令建立其他 RootSync 物件或 RepoSync,並透過kubectl
指令全面管理。# apply-spec.yaml applySpecVersion: 1 spec: configSync: enabled: true # If you don't have a source of truth yet, omit the # following fields. You can configure them later. sourceType: SOURCE_TYPE sourceFormat: FORMAT syncRepo: REPO syncRev: REVISION syncBranch: BRANCH secretType: SECRET_TYPE gcpServiceAccountEmail: EMAIL metricsGcpServiceAccountEmail: METRICS_EMAIL policyDir: DIRECTORY preventDrift: PREVENT_DRIFT
更改下列內容:
SOURCE_TYPE
:新增git
可從 Git 存放區同步處理、新增oci
可從 OCI 映像檔同步處理,或新增helm
可從 Helm 資訊套件同步處理。 如未指定值,預設值為git
。FORMAT
:新增unstructured
即可使用非結構化存放區,或新增hierarchy
即可使用階層式存放區。這些值會區分大小寫。 這是選填欄位,預設值為hierarchy
。建議您新增unstructured
,因為這個格式可讓您以最方便的方式整理設定。REPO
:新增資訊來源的網址。 Git 和 Helm 存放區網址使用 HTTPS 或 SSH 通訊協定。例如:https://github.com/GoogleCloudPlatform/anthos-config-management-samples
。如果您打算使用 SSH 做為secretType
,請輸入含有 SSH 通訊協定的網址。這個欄位為必填,如未輸入通訊協定,系統會將網址視為 HTTPS 網址。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
- 如要透過
REVISION
:要從中同步處理的 Git 修訂版本 (標記或雜湊) 或分支名稱。使用雜湊時,必須是完整雜湊,不得使用縮寫形式。SECRET_TYPE
:下列其中一個secretTypes
:Git
none
:不使用驗證。ssh
:使用安全殼層金鑰組。cookiefile
:使用cookiefile
。token
:使用權杖。gcpserviceaccount
:使用 Google 服務帳戶存取 Cloud Source Repositories。如果選取這個驗證類型,您需要在完成 Config Sync 設定後,建立 IAM 政策繫結。詳情請參閱「授予 Config Sync Git 唯讀權限」一節中的「Google 服務帳戶」分頁。gcenode
:使用 Google 服務帳戶存取 Cloud Source Repositories。只有在叢集未啟用 Workload Identity Federation for GKE 時,才選取這個選項。githubapp
:使用 GitHub 應用程式向 GitHub 存放區進行驗證。
如要進一步瞭解這些驗證類型,請參閱授予 Config Sync 對 Git 的唯讀存取權。
oci
none
:不使用驗證gcenode
:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 Workload Identity Federation for GKE 時,才選取這個選項。gcpserviceaccount
:使用 Google 服務帳戶存取圖片。
helm
token
:使用權杖。gcenode
:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 Workload Identity Federation for GKE 時,才選取這個選項。gcpserviceaccount
:使用 Google 服務帳戶存取圖片。
EMAIL
:如果您已將gcpserviceaccount
新增為secretType
,請新增 Google 服務帳戶電子郵件地址。gcpserviceaccount
secretType
例如:acm@PROJECT_ID.iam.gserviceaccount.com
。METRICS_EMAIL
:用於將 Config Sync 指標匯出至 Cloud Monitoring 的 Google Cloud服務帳戶 (GSA) 電子郵件地址。GSA 應具備監控指標寫入者 (roles/monitoring.metricWriter
) IAM 角色。命名空間config-management-monitoring
中的 Kubernetes ServiceAccountdefault
應繫結至 GSA。DIRECTORY
:要從中同步處理的目錄路徑,相對於 Git 存放區的根目錄。系統會納入您指定目錄的所有子目錄,並同步至叢集。預設值為存放區的根目錄。PREVENT_DRIFT
:如果設為true
,系統會啟用 Config Sync 許可控制 Webhook,防止發生差異,方法是拒絕將衝突變更推送至實際叢集。預設為false
。無論這個欄位的值為何,Config Sync 一律會修正差異。
如需可新增至
spec
欄位的完整欄位清單,請參閱 gcloud 欄位。使用現有資訊清單
如要使用與其他叢集相同的設定來設定叢集,請從已註冊的叢集擷取設定:
gcloud alpha container fleet config-management fetch-for-apply \ --membership=MEMBERSHIP_NAME \ --project=PROJECT_ID \ > CONFIG_YAML_PATH
更改下列內容:
MEMBERSHIP_NAME
:已註冊叢集的成員資格名稱,該叢集具有您要使用的 Config Sync 設定PROJECT_ID
:您的專案 IDCONFIG_YAML_PATH
:apply-spec.yaml
檔案的路徑,其中包含從叢集擷取的設定
套用
apply-spec.yaml
檔案。如果您使用現有資訊清單,應將檔案套用至要設定的叢集,並使用先前指令擷取的設定:gcloud beta container fleet config-management apply \ --membership=MEMBERSHIP_NAME \ --config=CONFIG_YAML_PATH \ --project=PROJECT_ID
更改下列內容:
MEMBERSHIP_NAME
:註冊叢集時選擇的機群成員名稱。您可以使用gcloud container fleet memberships list
找出名稱。CONFIG_YAML_PATH
:apply-spec.yaml
檔案的路徑。PROJECT_ID
:您的專案 ID。
Terraform
針對要設定 Config Sync 的每個叢集,套用包含 configmanagement
和 config_sync
區塊的 google_gkehub_feature_membership
資源區塊,如下列範例所示:
Git
更改下列內容:
REPO
:包含設定檔的 Git 存放區網址。BRANCH
:存放區分支,例如main
。DIRECTORY
:Git 存放區中的路徑,代表要同步處理的存放區頂層。SECRET
:密鑰驗證類型。
oci
更改下列內容:
REPO
:OCI 映像檔存放區的網址,內含設定檔。DIRECTORY
:含有要同步處理資源的目錄絕對路徑。如要使用根目錄,請將這個欄位留空。SECRET
:密鑰驗證類型。
針對要同步處理的每個叢集重複執行這個程序。
如要進一步瞭解如何使用 Terraform,請參閱「Terraform support for Config Sync」。
完成根存放區的設定後,您可以選擇設定從多個存放區同步處理,包括其他根存放區和命名空間存放區。如果您希望存放區包含命名空間範圍的設定,並同步至叢集中的特定命名空間,命名空間存放區就非常實用。
設定機群層級預設值
如果您已啟用 Google Kubernetes Engine (GKE) Enterprise 版,可以為叢集啟用及設定 Config Sync 做為機群層級預設值。也就是說,在機群中建立的每個新 GKE on Google Cloud 叢集,都會啟用 Config Sync,並採用您指定的設定。如要進一步瞭解機群預設設定,請參閱「管理機群層級功能」。
如果您只使用 Google Cloud 控制台,可以預設在叢集上啟用 Config Sync,並為機群設定 Config Sync 版本。如果您使用 gcloud CLI 或 Terraform,可以預設在叢集上啟用 Config Sync、為車隊設定 Config Sync 版本,以及設定與 Git 存放區或 OCI 映像檔存放區的連線。
如要設定 Config Sync 的機群層級預設值,請完成下列步驟:
gcloud
針對功能執行 enable
指令,並傳遞您在個別叢集上設定 Config Sync 時建立的 apply-spec.yaml
設定檔:
gcloud beta container fleet config-management enable \
--fleet-default-member-config=apply-spec.yaml
您隨時可以使用這項指令更新機群預設設定。 更新車隊預設設定後,您必須將現有叢集重新同步至預設設定。
主控台
前往 Google Cloud 控制台的「Feature Manager」頁面。
在「Config Sync」窗格中,按一下「Configure」(設定)。
檢查機群層級設定。您在機群中建立的所有新叢集都會繼承這些設定。
選用:如要變更預設設定,請按一下「自訂車隊設定」。然後在隨即顯示的對話方塊中,執行以下操作:
選取要使用的 Config Sync 版本。
按一下 [儲存變更]。
按一下 [設定]。
在「Configuring fleet settings」(設定車隊設定) 確認對話方塊中,按一下「Confirm」(確認)。如果您先前未啟用 Config Sync,按一下「確認」也會啟用
anthosconfigmanagement.googleapis.com
API。
Terraform
如要在整個機群中啟用 Config Sync,請參閱下列範例:
Git
更改下列內容:
REPO
:包含設定檔的 Git 存放區網址。BRANCH
:存放區分支,例如main
。DIRECTORY
:Git 存放區中的路徑,代表要同步處理的存放區頂層。SECRET
:密鑰驗證類型。
oci
更改下列內容:
REPO
:OCI 映像檔存放區的網址,內含設定檔。DIRECTORY
:含有要同步處理資源的目錄絕對路徑。如要使用根目錄,請將這個欄位留空。SECRET
:密鑰驗證類型。
如要進一步瞭解如何使用 Terraform,請參閱「Terraform support for Config Sync」。
如要更新現有叢集,使其使用預設的 Config Sync 設定,可以透過 Google Cloud 主控台或 gcloud CLI,將所選機群叢集與機群預設值同步。或者,您也可以按照設定 Config Sync 的操作說明,使用 Terraform 手動為每個叢集設定相同設定。如果您先前使用 Terraform 指定車隊預設值,請使用與設定預設值時相同的 configmanagement
和 config_sync
區塊,設定所選叢集。
如要在整個機群中同步處理 Config Sync 預設設定,請按照下列步驟操作:
gcloud
將現有成員資格與機群預設設定同步:
gcloud beta container fleet config-management apply \ --origin=FLEET \ --membership=MEMBERSHIP_NAME
將
MEMBERSHIP_NAME
替換為要與機群預設設定同步的叢集機群成員名稱。確認會員設定已與車隊預設設定同步:
gcloud beta container fleet config-management status
這個指令的輸出結果應顯示為
Yes
,表示您同步的成員資格狀態為Synced_to_Fleet_Default
。
主控台
前往功能管理工具:
在叢集表格中,選取要與機群設定同步的叢集。
按一下「與機群設定同步」。
如要停用整個機群的 Config Sync 預設設定,請按照下列步驟操作:
如要停用車隊預設設定,請執行下列指令:
gcloud beta container fleet config-management disable --fleet-default-member-config
確認機群預設設定已停用:
gcloud beta container fleet config-management status
系統會將 Config Sync 預設設定套用至您選取的任何叢集。雖然 Google Cloud 控制台只會顯示部分設定 (例如 Config Sync 版本),但所有機群層級設定都會同步至叢集。舉例來說,如果您使用 Terraform 或 gcloud CLI,將 Config Sync 設定為與 Git 存放區同步,該設定會同步到叢集,但不會顯示在 Google Cloud 控制台中。
驗證安裝
安裝及設定 Config Sync 後,您可以確認安裝是否成功。
控制台
操作步驟如下:
- 前往 Google Cloud 控制台的「Features」(功能) 區段,然後點選「Config」(設定) 頁面。
- 在「套件」分頁中,查看叢集表格的「同步狀態」欄。 成功安裝 Config Sync 後,狀態會顯示為「已安裝」。 如果已成功設定可靠資料來源,狀態會顯示為「已同步」。
gcloud
執行下列指令:
gcloud beta container fleet config-management status \
--project=PROJECT_ID
將 PROJECT_ID
替換為專案 ID。
安裝成功後,狀態會顯示為 SYNCED
,並列出已安裝的 Config Sync 版本。
如果執行上述指令後看到錯誤訊息,請確認您已建立 git-creds
Secret。如果您已建立 Secret,請嘗試重新執行下列指令:
gcloud beta container fleet config-management apply
您也可以使用 nomos status
指令,檢查 Config Sync 是否安裝成功。如果安裝作業順利完成,狀態會顯示為 PENDING
或 SYNCED
。無效或不完整的安裝作業會顯示 NOT INSTALLED
或 NOT CONFIGURED
狀態。輸出內容也會包含任何回報的錯誤。
角色型存取控制 (RBAC) 和權限
Config Sync 包含高權限工作負載。下表列出這些工作負載的權限:
元件 | 命名空間 | 服務帳戶 | 權限 | 說明 |
---|---|---|---|---|
ConfigManagement Operator | config-management-system |
config-management-operator |
cluster-admin | ConfigManagement Operator 會安裝下表中的其他元件。其中部分元件需要叢集管理員權限,因此 ConfigManagement Operator 也需要這些權限。 |
Config Sync | config-management-system |
如需必要權限,請參閱「Config Sync 權限」。 |
資源要求
以下列出 Config Sync 的資源要求。
下表列出 Config Sync 元件的 Kubernetes 資源需求。詳情請參閱 Kubernetes 說明文件中的「管理容器的資源」。
系統不會建立所有列出的元件。下列條件會導致每個元件排定時間:
- 啟用 Config Sync 時,系統會安裝
config-management-operator
。 - 啟用 Config Sync 時,系統會安裝
reconciler-manager
。 - 啟用漂移防護時,系統會安裝
admission-webhook
。 - 每個 RootSync 和 RepoSync 都會安裝一個
reconciler
。 - 啟用 Config Sync 時,系統會安裝
otel-collector
。
如要進一步瞭解這些元件,請參閱「Config Sync 架構」。
所有支援的 Config Sync 版本都使用相同的資源要求。
部署作業名稱 | 每個副本的 CPU 要求 (毫核心) | 每個副本的記憶體要求 (Mi) |
---|---|---|
config-management-operator |
100 | 200 |
resource-group-controller-manager |
110 | 300 |
admission-webhook1 |
10 | 100 |
otel-collector |
200 | 400 |
reconciler-manager |
20 | 150 |
reconciler (每個 RootSync 和 RepoSync 各一個) |
詳情請參閱協調器部署作業。 |
1 准入 Webhook 有兩個副本,因此計算資源要求總數時,如果使用准入 Webhook,則必須將值加倍。預設會停用准入 Webhook。
Reconciler 部署作業
針對每個 RootSync
和 RepoSync
物件,Config Sync 會建立獨立的協調器 Deployment 來處理同步作業。調解器部署作業包含多個容器。如要進一步瞭解這些容器,請參閱「Reconciler 容器」。
標準叢集
所有支援的 Config Sync 版本都使用相同的資源要求。
容器名稱 | CPU 要求 (m) | 記憶體要求 (Mi) |
---|---|---|
reconciler |
50 | 200 |
otel-agent |
10 | 100 |
hydration-controller (選用) |
10 | 100 |
git-sync |
10 | 16 |
gcenode-askpass-sidecar (選用) |
10 | 20 |
helm-sync |
75 | 128 |
oci-sync |
25 | 32 |
Autopilot 叢集
所有支援的 Config Sync 版本都使用相同的資源要求。
容器名稱 | CPU 要求和限制 (m) | 記憶體要求和限制 (Mi) |
---|---|---|
reconciler |
700 | 512 |
otel-agent |
10 | 64 |
hydration-controller (選用) |
200 | 256 |
git-sync |
20 | 32 |
gcenode-askpass-sidecar (選用) |
50 | 64 |
helm-sync |
250 | 384 |
oci-sync |
50 | 64 |
如要瞭解如何覆寫預設資源要求和限制,請參閱資源覆寫。
隨附的 Helm 和 Kustomize 版本
Config Sync 會利用 Helm 和 Kustomize 可執行檔,在幕後轉譯設定。下表列出支援顯示功能的 Config Sync 版本,以及隨附的 Helm 和 Kustomize 版本。
Config Sync 版本 | Helm 版本 | Kustomize 版本 |
---|---|---|
1.20.0 | v3.15.3 | v5.3.0 |
1.19.0 | v3.15.3 | v5.3.0 |
1.18.1 | v3.14.4 | v5.3.0 |
1.18.0 | v3.14.3 | v5.3.0 |
1.17.1 和 1.17.3 | v3.13.3 | v5.3.0 |
如要瞭解如何透過 Kustomize 轉譯 Helm,請參閱「透過 Kustomize 設定 Kubernetes」。如要瞭解如何使用 Helm API,請參閱「從 Artifact Registry 同步處理 Helm 資訊套件」。
後續步驟
- 瞭解如何升級 Config Sync。
- 進一步瞭解如何使用
gcloud
指令設定 Config Sync。 - 瞭解如何設定同步處理多個存放區。
- 使用
nomos
指令。 - 請參閱「簡介:排解 Config Sync 問題」。
- 瞭解如何解除安裝 Config Sync。
- 查看預設 Config Sync 權限。