使用 kubectl 手動安裝 Config Sync

如果環境需要直接透過指令列管理 Kubernetes 資源,請使用 kubectl 指令安裝 Config Sync,從中央可靠資料來源同步處理叢集設定。雖然支援這種安裝方法,但與Cloud de Confiance 控制台或 Google Cloud CLI 不相容。如要改用這些工具管理 Config Sync,請參閱「自訂 Config Sync 安裝」。

事前準備

本節說明使用 kubectl 安裝 Config Sync 前,必須符合的必要條件。

準備本機環境

安裝 Config Sync 前,請務必完成下列工作,準備好本機環境:

  • 建立或存取可靠資料來源。

  • 安裝並初始化 Google Cloud CLI,其中提供這些操作說明中使用的 gcloud、kubectl 和 nomos 指令。如果使用 Cloud Shell,系統會預先安裝 Google Cloud CLI。

  • Google Cloud CLI 預設不會安裝 kubectl。如要安裝 kubectl,請使用下列指令:

    gcloud components install kubectl
    
  • 使用 gcloud auth login 指令向 Cloud de Confiance by S3NS 進行驗證,以便下載 Config Sync 的元件。

準備您的叢集

建立或有權存取符合 Config Sync 需求條件的 Google Kubernetes Engine 叢集。

準備權限

安裝 Config Sync 的 Cloud de Confiance 使用者必須具備 IAM 權限,才能在叢集中建立新角色。如有需要,請使用下列指令授予這些角色:

gcloud container clusters get-credentials CLUSTER_NAME

kubectl create clusterrolebinding cluster-admin-binding \
    --clusterrole cluster-admin --user USER_ACCOUNT

更改下列內容:

  • CLUSTER_NAME:叢集名稱
  • USER_ACCOUNT: Cloud de Confiance 帳戶的電子郵件地址

視您在本機系統上設定 Google Cloud CLI 的方式而定,您可能需要新增 --project 和 --zone 欄位。

如需使用 gcpserviceaccount 做為驗證類型,將 OCI 的 Config Sync 存取權授予,則必須具備 iam.serviceAccounts.setIamPolicy 權限,才能建立政策繫結。如要取得這項權限,請授予服務帳戶管理員 (roles/iam.serviceAccountAdmin) IAM 角色。您或許還可透過自訂角色或其他預先定義的角色取得這項權限。

如要進一步瞭解如何授予角色,請參閱「管理存取權」。

註冊叢集

如要在 Config Sync 中註冊叢集,請完成下列步驟:

  1. 部署 Config Sync
  2. 授予 Config Sync 下列其中一項的唯讀存取權:
  3. 設定 Config Sync

部署 Config Sync

確認符合所有必要條件後,即可下載並套用 YAML 資訊清單,部署 Config Sync:

  1. 使用下列指令下載最新版本的 Config Sync 資訊清單。如要下載特定版本,請參閱「下載」。

    gcloud storage cp gs://config-management-release/released/latest/config-sync.tar.gz config-sync.tar.gz
    
  2. 解壓縮封存檔:

    tar -xzvf config-sync.tar.gz
  3. 在您於上一步解壓縮的封存檔中,按照提供的 README.md 檔案中的指示編輯 kustomization。

  4. 如要更新 Config Sync 安裝作業,請套用按照 README.md 操作說明建構的轉譯資訊清單:

    kubectl apply -f CONFIG_SYNC_MANIFEST
    

    將 CONFIG_SYNC_MANIFEST 替換為轉譯資訊清單的名稱。

  5. 請將所有用戶端上的 nomos 指令替換為新版本。這項變更可確保 nomos 指令一律能取得所有已註冊叢集的狀態,並驗證這些叢集的設定。

如果因 Config Sync 問題而失敗,而非 YAML 或 JSON 語法錯誤,則物件可能會在叢集中例項化,但可能無法正常運作。在這種情況下,您可以使用 nomos status 指令檢查物件是否有錯誤。

如果安裝有效且沒有問題,狀態會顯示為 PENDING 或 SYNCED。

無效安裝的狀態為 NOT CONFIGURED,並會列出下列其中一項錯誤:

  • missing git-creds Secret
  • git-creds Secret is missing the key specified by secretType

如要修正問題,請更正設定錯誤。視錯誤類型而定,您可能需要將 Config Sync 資訊清單重新套用至叢集。

如果問題是您忘記建立 git-creds Secret,Config Sync 會在您建立 Secret 後立即偵測到,您不需要重新套用設定。

授予 Config Sync 唯讀存取權

如果您將設定儲存在 Git 中,則必須授予 Config Sync 對 Git 的唯讀存取權。如果您將設定儲存為 OCI 映像檔,則必須授予 Config Sync 對 OCI 的唯讀存取權。如果將設定儲存在 Helm 中,您必須授予 Config Sync 對 Helm 的唯讀存取權。

授予 Config Sync 對 Git 的唯讀存取權

Config Sync 需要 Git 存放區的唯讀存取權,才能讀取提交至存放區的設定,並套用至叢集。

如果存放區不需要驗證即可透過唯讀的方式存取,您可以繼續設定 Config Sync,並使用 none 做為驗證類型。舉例來說,如果您可以使用網頁介面瀏覽存放區,而不必登入,或者您可以使用 git clone 在本機建立存放區的複製版本,而不必提供憑證或使用已儲存的憑證,則不必進行驗證。在這種情況下,您不需要建立 Secret。

不過,由於存放區的讀取權限受到限制,大多數使用者都需要建立憑證。如果需要憑證,憑證會儲存在每個已註冊叢集的 git-creds Secret 中 (除非您使用的是 Google 服務帳戶)。Secret 必須命名為 git-creds,因為這是固定值。

Config Sync 支援下列驗證機制:

  • 安全殼層金鑰組 (ssh)
  • Cookie 檔案 (cookiefile)
  • 權杖 (token)
  • Google 服務帳戶 (gcpserviceaccount)
  • Compute Engine 預設服務帳戶 (gcenode)
  • GitHub 應用程式 (githubapp)

選擇何種機制取決於存放區支援的功能。一般來說,建議您使用安全殼層金鑰組。GitHub 和 Bitbucket 都支援使用安全殼層金鑰組。不過,如果您使用 Cloud Source Repositories 或 Secure Source Manager 中的存放區,建議改用 Google 服務帳戶,因為程序較為簡單。如果貴機構託管您的存放區,而您不知道支援哪些驗證方式,請與管理員聯絡。

如要將 Cloud Source Repositories 中的存放區做為 Config Sync 存放區,請完成下列步驟,擷取 Cloud Source Repositories 網址:

  1. 列出所有存放區:

    gcloud source repos list
    
  2. 從輸出內容中,複製要使用的存放區網址。例如:

    REPO_NAME  PROJECT_ID  URL
    my-repo    my-project  https://source.developers.google.com/p/my-project/r/my-repo-csr
    

    在下一節設定 Config Sync 時,您需要使用這個網址。如果您使用Cloud de Confiance 控制台設定 Config Sync,請在「URL」(網址) 欄位中新增網址。如果您使用 Google Cloud CLI 設定 Config Sync,請將網址新增至設定檔的 syncRepo 欄位。

安全殼層金鑰組

安全殼層金鑰組包含兩個檔案:公開金鑰和私密金鑰。公開金鑰通常具有 .pub 副檔名。

如要使用安全殼層金鑰組,請完成下列步驟:

  1. 建立安全殼層金鑰組,允許 Config Sync 向 Git 存放區驗證。如需驗證存放區,才能複製或讀取存放區,就必須執行這個步驟。如果安全性管理員已提供金鑰組,請略過這個步驟。您可以根據安全性和法規遵循需求,為所有叢集使用單一金鑰組,或為每個叢集使用一組金鑰。

    下列指令會建立 4096 位元的 RSA 金鑰。不建議使用較低的值:

    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 使用服務帳戶,建議您使用獨立帳戶。

  2. 設定存放區來識別您剛剛建立的公開金鑰。請參閱 Git 代管服務供應商的說明文件。為方便起見,我們提供了部分熱門 Git 代管服務供應商的操作說明:

  3. 將私密金鑰新增至叢集內的新 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 後置字串)。

  4. (建議) 如要使用 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
    
  5. 將私密金鑰從本機磁碟中刪除或妥善保管。

  6. 設定 Config Sync 並新增 Git 存放區網址時,請使用 SSH 通訊協定。如果您使用 Cloud Source Repositories 中的存放區,輸入網址時必須採用下列格式:

    ssh://EMAIL@source.developers.google.com:2022/p/PROJECT_ID/r/REPO_NAME
    

    更改下列內容:

    • EMAIL:您的 Cloud de Confiance 使用者名稱
    • PROJECT_ID:存放區所在 Cloud de Confiance專案的 ID
    • REPO_NAME:存放區名稱

Cookiefile

取得 cookiefile 的程序取決於存放區的設定。如需範例,請參閱 Cloud Source Repositories 說明文件中的「產生靜態憑證」。憑證通常儲存在主目錄的 .gitcookies 檔案中,或由資安管理員提供。

如要使用 cookiefile,請完成下列步驟:

  1. 建立並取得 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 與 cookiefile 一併新增至 Secret:

    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 網址
  2. 如果仍須在本機中保存 cookiefile,請務必妥善保管檔案內容。否則請將其刪除。

權杖

如果貴組織不允許使用安全殼層金鑰,可以選擇使用權杖。有了 Config Sync,您就能將 GitHub 的個人存取權杖 (PAT)、GiLab 的 PAT 或部署金鑰,或 Bitbucket 的應用程式密碼做為權杖使用。

如要使用權杖建立 Secret,請完成下列步驟:

  1. 使用 GitHub、GitLab 或 Bitbucket 建立權杖:

  2. 建立並取得權杖之後,請將權杖新增至叢集內的新 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 Proxy 網址。
  3. 如果本機仍須使用權杖,請妥善保管,如果不需要,則請刪除。

Google 服務帳戶

如果存放區位於 Cloud Source Repositories 或 Secure Source Manager,且叢集使用 GKE Workload Identity Federation for GKE 或機群 Workload Identity Federation for GKE,您可以使用 Google 服務帳戶,授予 Config Sync 權限,允許其存取代管叢集所在專案中的存放區。

  1. 如果您還沒有服務帳戶,請建立服務帳戶。
  2. 將正確的 IAM 角色授予服務帳戶,以便存取存放區:

    Cloud Source Repositories

    將 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.s3ns.iam.gserviceaccount.com"
      
    • 如要讓服務帳戶對專案中的各個存放區擁有不同層級的存取權,請授予存放區專屬權限。

      gcloud source repos set-iam-policy REPOSITORY POLICY_FILE --project=PROJECT_ID
      

    Secure Source Manager

    將 Secure Source Manager 執行個體存取者 (roles/securesourcemanager.instanceAccessor) 和 Secure Source Manager 存放區讀取者 (roles/securesourcemanager.repoReader) IAM 角色授予 Google 服務帳戶。如要進一步瞭解 Secure Source Manager 角色和權限,請參閱「存放區角色管理」。

    • 如果相同權限適用於專案中的所有存放區,請授予專案層級權限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
        --role=roles/securesourcemanager.instanceAccessor \
        --member="serviceAccount:GSA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com"
      
      gcloud projects add-iam-policy-binding PROJECT_ID \
        --role=roles/securesourcemanager.repoReader \
        --member="serviceAccount:GSA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com"
      
    • 如要授予存放區專屬權限,請使用存放區的 Secure Source Manager 網頁介面。詳情請參閱「授予使用者存放區層級角色」。

  3. 如果您使用 Cloud de Confiance 控制台設定 Config Sync,請選取「Workload Identity Federation for GKE」做為「驗證類型」,然後新增服務帳戶電子郵件地址。

    如果您使用 Google Cloud CLI 設定 Config Sync,請將 gcpserviceaccount 新增為 secretType,然後將服務帳戶電子郵件地址新增至 gcpServiceAccountEmail。

  4. 如果您使用 Secure Source Manager 中的存放區,請務必在設定 Config Sync 時採用下列格式,並新增 Git 存放區網址:

    https://INSTANCE_ID-PROJECT_NUMBER-git.LOCATION.sourcemanager.dev/PROJECT_ID/REPO_NAME.git
    

    更改下列內容:

    • INSTANCE_ID:Secure Source Manager 執行個體的名稱。
    • PROJECT_ID:執行個體所在 Cloud de Confiance專案的 ID。
    • PROJECT_NUMBER:執行個體所在的 Cloud de Confiance專案編號。
    • LOCATION:執行個體所在的區域。
    • REPO_NAME:存放區名稱。
  5. 設定 Config Sync 後,請在 Kubernetes 服務帳戶與 Google 服務帳戶之間建立 IAM 政策繫結。系統會等到您完成 Config Sync 初次設定之後,再建立 Kubernetes 服務帳戶。

    如果您使用的叢集已註冊至機群,則每個機群只需建立一次政策繫結。在機群中註冊的所有叢集,都會共用相同的 Workload Identity Federation for GKE 集區。根據機群的相同性概念,如果您將 IAM 政策新增至某個叢集中的 Kubernetes 服務帳戶,則同一機群中其他叢集上相同命名空間的 Kubernetes 服務帳戶也會取得相同的 IAM 政策。

    有了這個繫結,Config Sync Kubernetes ServiceAccount 即可做為 Google 服務帳戶:

    gcloud iam service-accounts add-iam-policy-binding \
        GSA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog[config-management-system/KUBERNETES_SERVICEACCOUNT]" \
        --project=PROJECT_ID
    

更改下列內容:

  • PROJECT_ID:組織的專案 ID。
  • FLEET_HOST_PROJECT_ID:如果您使用 GKE Workload Identity Federation for GKE,這與 PROJECT_ID 相同。如果您使用 GKE 適用的機群 Workload Identity Federation,則這是叢集註冊的機群專案 ID。
  • GSA_NAME:要用於連線至 Secure Source Manager 或 Cloud Source Repositories 的自訂 Google 服務帳戶。
  • KUBERNETES_SERVICEACCOUNT:協調器的 Kubernetes ServiceAccount:
    • 如果是根存放區,且 RootSync 名稱為 root-sync,請使用 root-reconciler。否則,請使用 root-reconciler-ROOT_SYNC_NAME。如果您使用 Cloud de Confiance 控制台或 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,但未啟用 Workload Identity Federation for GKE,則可使用 gcenode 做為驗證類型。

如果您使用 Cloud de Confiance 控制台設定 Config Sync,請選取「Google Cloud Repository」做為「Authentication Type」(驗證類型)。

如果您使用 Google Cloud CLI 設定 Config Sync,請將 gcenode 新增為 secretType。

選取「Google Cloud Repository」或 gcenode,即可使用 Compute Engine 預設服務帳戶。您必須將 Cloud Source Repositories 讀取者 (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.s3ns-system.iam.gserviceaccount.com"

將 PROJECT_ID 替換為貴組織的專案 ID,並將 PROJECT_NUMBER 替換為貴組織的專案編號。

GitHub 應用程式

如果存放區位於 GitHub,可以使用 githubapp 做為驗證類型。

如要使用 GitHub 應用程式,請完成下列步驟:

  1. 請按照 GitHub 上的操作說明佈建 GitHub 應用程式,並授予讀取存放區的權限。

  2. 將 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/。
  3. 將私密金鑰從本機磁碟中刪除或妥善保管。

  4. 設定 Config Sync 並新增 Git 存放區網址時,請使用 githubapp 驗證類型。

授予 Config Sync 對 OCI 的唯讀存取權

Config Sync 需要 Artifact Registry 中 OCI 映像檔的唯讀存取權,才能讀取映像檔中的設定,並套用至叢集。

如果映像檔不需要驗證即可透過唯讀的方式存取,您可以繼續設定 Config Sync,並使用 none 做為驗證類型。舉例來說,如果映像檔對外公開,網際網路中的任何人都能存取,就不需要驗證。

不過,大多數使用者需要建立憑證,才能存取受限制的映像檔。Config Sync 支援下列驗證機制:

  • Kubernetes ServiceAccount (k8sserviceaccount)
  • Compute Engine 預設服務帳戶 (gcenode)

Kubernetes ServiceAccount

如果 OCI 映像檔儲存在 Artifact Registry,且叢集使用 GKE Workload Identity Federation for GKE 或機群 Workload Identity Federation for GKE,則可使用 Kubernetes ServiceAccount 做為驗證類型。

將專案或存放區的 Artifact Registry 讀取者角色 (roles/artifactregistry.reader) 授予 Kubernetes ServiceAccount。如要進一步瞭解 Artifact Registry 角色和權限,請參閱「設定 Artifact Registry 的角色和權限」。

  • 如果相同權限適用於專案中的所有存放區,請授予專案層級權限:

    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,這會與 PROJECT_ID 的專案編號相同。如果您使用 GKE 適用的機群 Workload Identity Federation,則這是叢集註冊的機群專案編號。
  • FLEET_HOST_PROJECT_ID:如果您使用 GKE Workload Identity Federation for GKE,這與 PROJECT_ID 相同。如果您使用 GKE 適用的機群 Workload Identity Federation,則這是叢集註冊的機群專案 ID。
  • KUBERNETES_SERVICEACCOUNT:協調器的 Kubernetes ServiceAccount:
  • 如果是根存放區,且 RootSync 名稱為 root-sync,請使用 root-reconciler。否則,請使用 root-reconciler-ROOT_SYNC_NAME。如果您使用 Cloud de Confiance 控制台或 Google Cloud CLI 安裝 Config Sync,Config Sync 會自動建立名為 root-sync 的 RootSync 物件。
  • REPOSITORY:存放區 ID。
  • LOCATION:存放區的區域或多區域位置。

Compute Engine 預設服務帳戶

如果您將 OCI 映像檔儲存在 Artifact Registry,且叢集是 GKE,但未啟用 Workload Identity Federation for GKE,則可使用 gcenode 做為驗證類型。Config Sync 會使用 Compute Engine 預設服務帳戶。您必須授予 Compute Engine 預設服務帳戶 Artifact Registry 的讀取權限。

執行下列指令,將 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 替換為貴組織的專案 ID,並將 PROJECT_NUMBER 替換為貴組織的專案編號。

為憑證授權單位設定 Config Sync

如果伺服器設定的憑證來自不受信任的憑證授權單位 (CA),您可以將 Config Sync 設為使用 CA 憑證,驗證與伺服器的 HTTPS 連線。這項功能適用於 Git、Helm 或 OCI 伺服器。CA 憑證必須包含完整的 SSL 憑證 (根/中繼/葉)。如果伺服器已使用受信任的 CA,或您並非透過 HTTPS 連線,可以略過這個步驟,不設定 caCertSecretRef。

RootSync

  1. 擷取用於核發 Git 伺服器憑證的 CA 憑證,並儲存至檔案。

  2. 如果是 RootSync 物件,則必須在 config-management-system 命名空間中建立 Secret。例如:

    kubectl create ns config-management-system && 
    kubectl create secret generic ROOT_CA_CERT_SECRET_NAME
    --namespace=config-management-system
    --from-file=cert=/path/to/CA_CERT_FILE

  3. 設定 Config Sync 時,請將 RootSync 物件中 caCertSecretRef.name 欄位的值設為 ROOT_CA_CERT_SECRET_NAME。

RepoSync

  1. 擷取用於核發 Git 伺服器憑證的 CA 憑證,並儲存至檔案。

  2. 如果是 RepoSync 物件,Secret 必須建立在與 RepoSync 相同的命名空間中。例如:

    kubectl create ns REPO_SYNC_NAMESPACE && 
    kubectl create secret generic NAMESPACE_CA_CERT_SECRET_NAME
    --namespace=REPO_SYNC_NAMESPACE
    --from-file=cert=/path/to/CA_CERT_FILE

  3. 設定 RepoSync 時,請將 RepoSync 物件中 caCertSecretRef.name 欄位的值設為 NAMESPACE_CA_CERT_SECRET_NAME。

授予 Config Sync 對 Helm 的唯讀存取權

Config Sync 需要 Helm 存放區的唯讀存取權,才能讀取存放區中的 Helm 圖表,並將其安裝到叢集。

如果存放區不需要驗證即可透過唯讀的方式存取,您可以繼續設定 Config Sync,並使用 none 做為驗證類型。舉例來說,如果 Helm 存放區是公開的,網際網路上的任何人都能存取,就不需要驗證。

不過,大多數使用者都需要建立憑證,才能存取私人 Helm 存放區。Config Sync 支援下列驗證機制:

  • 權杖 (token)
  • Kubernetes ServiceAccount (k8sserviceaccount)
  • Compute Engine 預設服務帳戶 (gcenode)

權杖

使用 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 時,請使用您為 spec.helm.secretRef.name 選擇的 Secret 名稱。

Kubernetes ServiceAccount

如果將 Helm 圖表儲存在 Artifact Registry,且叢集使用 GKE Workload Identity Federation for GKE 或機群 Workload Identity Federation for GKE,則可使用 Kubernetes ServiceAccount 做為驗證類型。

將專案或存放區的 Artifact Registry 讀取者角色 (roles/artifactregistry.reader) 授予 Kubernetes ServiceAccount。如要進一步瞭解 Artifact Registry 角色和權限,請參閱「設定 Artifact Registry 的角色和權限」。

  • 如果相同權限適用於專案中的所有存放區,請授予專案層級權限:

    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,這會與 PROJECT_ID 的專案編號相同。如果您使用 GKE 適用的機群 Workload Identity Federation,則這是叢集註冊的機群專案編號。
  • FLEET_HOST_PROJECT_ID:如果您使用 GKE Workload Identity Federation for GKE,這與 PROJECT_ID 相同。如果您使用 GKE 適用的機群 Workload Identity Federation,則這是叢集註冊的機群專案 ID。
  • KUBERNETES_SERVICEACCOUNT:協調器的 Kubernetes ServiceAccount:
  • 如果是根存放區,且 RootSync 名稱為 root-sync,請使用 root-reconciler。否則,請使用 root-reconciler-ROOT_SYNC_NAME。
  • REPOSITORY:存放區 ID。
  • LOCATION:存放區的區域或多區域位置。

Compute Engine 預設服務帳戶

如果 Helm 圖表儲存在 Artifact Registry,且叢集是 GKE,但未啟用 Workload Identity Federation for GKE,則可使用 gcenode 做為驗證類型。Config Sync 會使用 Compute Engine 預設服務帳戶。您必須授予 Compute Engine 預設服務帳戶 Artifact Registry 的讀取權限。您可能需要授予 storage-ro 存取權範圍,才能授予唯讀權限來提取映像檔。

將 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 替換為貴組織的專案 ID,並將 PROJECT_NUMBER 替換為貴組織的專案編號。

設定 Config Sync

如要設定 Config Sync,您必須建立 RootSync 物件,將根存放區同步至叢集。每個叢集只能建立一個根存放區,且根存放區可以是非結構化存放區或階層式存放區。

  1. 如果您使用 Config Sync 許可 Webhook (預設為停用),並在私人叢集中安裝 Config Sync,請新增防火牆規則,允許通訊埠 10250。Config Sync 許可 Webhook 會使用通訊埠 10250 預防偏移。

  2. 等待 RootSync 和 RepoSync CRD 可用:

    until kubectl get customresourcedefinitions rootsyncs.configsync.gke.io reposyncs.configsync.gke.io; do date; sleep 1; echo ""; done
    
  3. 將下列其中一個資訊清單儲存為 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: unstructured
      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_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 時,才選取這個選項。

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

      這是必填欄位。

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

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

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

    • ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,Git 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。Secret 必須在名為 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: unstructured
      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_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 適用的 Workload Identity Federation 時,才應選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取映像檔。

      這是必填欄位。

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

    • ROOT_CA_CERT_SECRET_NAME:新增 Secret 名稱。如果設定這個欄位,OCI 供應商必須使用這個憑證授權單位 (CA) 核發的憑證。Secret 必須在名為 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: unstructured
      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_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 圖表隨附的預設值。這個欄位的格式與 Helm 圖表的 values.yaml 檔案相同。這是選填欄位。
    • ROOT_AUTH_TYPE:新增下列其中一種驗證類型:

      • none:不使用驗證
      • token:使用使用者名稱和密碼存取私人 Helm 存放區。
      • gcenode:使用 Compute Engine 預設服務帳戶存取 Artifact Registry 中的映像檔。只有在叢集未啟用 GKE 適用的 Workload Identity Federation 時,才應選取這個選項。
      • gcpserviceaccount:使用 Google 服務帳戶存取映像檔。

      這是必填欄位。

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

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

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

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

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

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

  4. 套用變更:

    kubectl apply -f root-sync.yaml
    

提供叢集選取器的叢集名稱 (選用)

如要使用 cluster-name-selectors,您必須向 Config Sync 提供叢集名稱。這個步驟為選用,只有在使用叢集名稱選取器時才需要執行。

如要提供叢集名稱,請完成下列步驟:

  1. 將 CLUSTER_NAME 環境變數新增至 reconciler-manager 部署作業:

    kubectl set env deployment/reconciler-manager -n config-management-system CLUSTER_NAME=CLUSTER_NAME
    

    將 CLUSTER_NAME 替換為叢集名稱或成員資格名稱。

  2. 如要將叢集名稱傳播至 RootSync 和 RepoSync 調解器,請重新啟動 reconciler-manager 部署作業:

    kubectl rollout restart deployment/reconciler-manager -n config-management-system
    

驗證根存放區的同步狀態

您可以使用 nomos status 指令檢查根存放區的同步狀態:

nomos status

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

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

驗證 RootSync 安裝

建立 RootSync 物件時,Config Sync 會建立前置字串為 root-reconciler 的協調器。協調器是以 Deployment 形式部署的 Pod。可將資訊清單從 Git 存放區同步到叢集。

您可以檢查 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 物件」。

完成根存放區設定後,您可以選擇設定從多個存放區同步。如果您希望存放區包含命名空間範圍設定,並同步至各叢集的特定命名空間,這些存放區就非常實用。

升級 Config Sync

升級 Config Sync 的步驟取決於您要升級的版本和來源版本。從 1.20.0 版開始,Config Sync 會以獨立安裝的形式提供,不含 ConfigManagement 運算子。如果您是從 1.20.0 之前的版本升級至 1.20.0 以上版本,則必須先解除安裝 ConfigManagement Operator,再進行升級。

如要從不支援的版本升級,請逐步升級,每次最多升級三個子版本。舉例來說,如果目前的 Config Sync 版本是 1.16.0,請先升級至 1.19.0 版,再升級至 1.22.0 版。

解除安裝 ConfigManagement Operator

如果您是從 1.20.0 之前的版本升級至 1.20.0 以上版本,則必須先解除安裝 ConfigManagement Operator,才能升級。

如要檢查叢集是否已安裝 Config Management,請執行下列指令:

kubectl get configmanagement

如果輸出內容不為空白,表示叢集已安裝 Config Management。如要解除安裝 Config Management,請完成下列步驟,但請保留叢集上安裝的 Config Sync。建議您使用 nomos CLI 解除安裝 ConfigManagement 運算子,因為這個工具的介面更豐富,錯誤處理功能也更強大。只有在無法存取 nomos CLI 時,才應使用殼層指令碼。

  1. 確認 nomos CLI 為最新版本。

  2. 執行下列指令,更新目前 kubectl 內容中的叢集:

    nomos migrate --remove-configmanagement
    

殼層指令碼

將下列殼層指令碼複製到檔案,然後執行指令碼,更新目前 kubectl 內容中的叢集。

 #!/bin/bash

 set -euox pipefail

 hnc_enabled="$(kubectl get configmanagements.configmanagement.gke.io config-management -o=jsonpath="{.spec.hierarchyController.enabled}" --ignore-not-found)"

 if [[ "${hnc_enabled}" == "true" ]]; then
   echo "Hierarchy Controller is enabled on the ConfigManagement object. It must be disabled before migrating."
   echo "This can be done by unsetting the spec.hierarchyController field on ConfigManagement."
   exit 1
 fi

 kubectl delete deployment -n config-management-system config-management-operator --ignore-not-found --cascade=foreground

 if kubectl get configmanagement config-management &> /dev/null ; then
   kubectl patch configmanagement config-management --type="merge" -p '{"metadata":{"finalizers":[]}}'
   kubectl delete configmanagement config-management --cascade=orphan --ignore-not-found
 fi

 kubectl delete clusterrolebinding config-management-operator --ignore-not-found
 kubectl delete clusterrole config-management-operator --ignore-not-found
 kubectl delete serviceaccount -n config-management-system config-management-operator --ignore-not-found
 kubectl delete customresourcedefinition configmanagements.configmanagement.gke.io --ignore-not-found

安裝新版 Config Sync

如要升級 Config Sync,請為每個已註冊的叢集完成下列步驟:

  1. 下載 Config Sync 資訊清單和新版 nomos 指令。

  2. 解壓縮封存檔:

    tar -xzvf config-sync.tar.gz
  3. 在您於上一步解壓縮的封存檔中,按照提供的 README.md 檔案中的指示編輯 kustomization。

  4. 如要更新 Config Sync 安裝作業,請套用按照 README.md 操作說明建構的轉譯資訊清單:

    kubectl apply -f CONFIG_SYNC_MANIFEST
    

    將 CONFIG_SYNC_MANIFEST 替換為轉譯資訊清單的名稱。

  5. 請將所有用戶端上的 nomos 指令替換為新版本。這項變更可確保 nomos 指令一律能取得所有已註冊叢集的狀態,並驗證這些叢集的設定。

解除安裝 Config Sync

如要解除安裝 Config Sync,請完成下列步驟:

  1. 中央管理員應移除根存放區:

    1. 如果您已啟用 Webhook,且想保留資源,請停用遭棄置資源的防範偏移功能。如果您尚未啟用 Webhook,則不需採取任何額外步驟來保留資源。

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

      kubectl delete -f root-sync.yaml
      
  2. 移除所有存放區。

  3. 您可以使用安裝 Config Sync 時所用的資訊清單,解除安裝 Config Sync。

       kubectl delete -f CONFIG_SYNC_MANIFEST --ignore-not-found
    

後續步驟