本頁面說明如何透過 Google Kubernetes Engine (GKE) Autopilot 合作夥伴,執行具備特殊權限的工作負載。瞭解如何設定同步處理工作負載,在叢集中安裝許可清單,並確保許可清單保持在最新狀態。
本頁面適用於下列類型的角色:
- 安全工程師想要確保第三方工作負載必須列入允許清單,才能在叢集上執行,且來源必須是 GKE 核准的來源。
- 平台工程師想在叢集上啟用第三方工作負載,以解除應用程式團隊的封鎖。
如要進一步瞭解說明文件中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
閱讀本頁面之前,請先熟悉下列概念:
Autopilot 中的特權合作夥伴工作負載簡介
GKE 允許部分核准的合作夥伴在 Autopilot 叢集中執行具備特殊權限的工作負載。這些具備特殊權限的工作負載可以略過 Autopilot 強制執行的部分安全限制。舉例來說,合作夥伴可能需要執行使用特定 Linux 功能或需要具備權限容器的工作負載。
合作夥伴會為享有權限的工作負載建立及維護允許清單。每個許可清單都是符合特定享有權限合作夥伴工作負載的檔案。合作夥伴會將這些許可清單檔案提交給 GKE 審核。核准後,GKE 會在 Google 管理的存放區中代管許可清單檔案。
如要執行合作夥伴工作負載,請在叢集中安裝對應的許可清單檔案。GKE 提供名為 AllowlistSynchronizer
的 Kubernetes 自訂資源,可安裝及更新許可清單。成功安裝許可清單後,即可部署相應的特權合作夥伴工作負載。
具備特殊權限的工作負載和允許清單的錯誤與功能要求
合作夥伴有責任建立、開發及維護自己的高權限工作負載和允許清單。如果遇到錯誤,或是對特許工作負載或許可清單有功能要求,請與對應的合作夥伴聯絡。
關於 AllowlistSynchronizer
控制器
AllowlistSynchronizer
是在 GKE 控制層中執行的控制器。您會以 YAML 資訊清單的形式部署新的 AllowlistSynchronizer
,與部署任何其他 Kubernetes 工作負載的方式類似。在資訊清單中,指定要安裝的允許清單檔案路徑 (由第三方合作夥伴提供)。同步器會在 Google 管理的存放區中找出合作夥伴的許可清單檔案,並在您的叢集中安裝許可清單。
同步器每 10 分鐘會檢查一次允許清單檔案是否有更新。如有更新,同步器會在叢集中安裝更新後的許可清單。
如要停止允許特定工作負載,請更新現有的 AllowlistSynchronizers,移除對應的允許清單檔案路徑,然後從叢集中刪除 WorkloadAllowlist
物件。如果您刪除已安裝的 WorkloadAllowlist
物件,但未從許可清單同步器中移除路徑,同步器就會重新安裝許可清單。合作夥伴無法從 Google 管理的存放區刪除許可清單檔案。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
需求條件
AllowlistSynchronizer
自訂資源需要 GKE 1.32.2-gke.1652000 以上版本。- 您必須知道要在叢集中執行的合作夥伴工作負載。請參閱合作夥伴的說明文件,瞭解如何安裝具備特殊權限的工作負載。
建立新的 AllowlistSynchronizer
如要從合作夥伴執行具備權限的工作負載,請將路徑新增至 AllowlistSynchronizer
自訂資源中對應的許可清單檔案。然後將 AllowlistSynchronizer 部署至叢集。
- 在文字編輯器中建立新的 YAML 檔案。
在 YAML 檔案中加入以下內容:
apiVersion: auto.gke.io/v1 kind: AllowlistSynchronizer metadata: name: ALLOWLIST_SYNCHRONIZER_NAME spec: allowlistPaths: - ALLOWLIST1_PATH - ALLOWLIST2_PATH
更改下列內容:
ALLOWLIST_SYNCHRONIZER_NAME
:新同步器的名稱。請選擇描述性名稱,指出許可清單支援的工作負載或團隊。ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...
:要安裝的一或多個合作夥伴允許清單檔案路徑。請參閱所選合作夥伴工作負載的這條路徑相關文件。您可以指定整個目錄或個別檔案。
將 YAML 檔案部署至叢集:
kubectl apply -f PATH_TO_YAML_FILE
將
PATH_TO_YAML_FILE
替換為您在上一步建立的 YAML 檔案路徑。AllowlistSynchronizer
控制器會從叢集中指定的路徑安裝允許清單檔案。等待同步器回報
Ready
狀態:kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \ --timeout=60s
您也可以將合作夥伴工作負載部署作業整合至持續整合與持續部署 (CI/CD) pipeline。設定工作流程,等待允許清單成功安裝後,再部署對應的工作負載。
更新現有的 AllowlistSynchronizer
您可以更新現有的 AllowlistSynchronizer,新增或移除許可清單檔案。在下列情況中,您可能會更新現有同步器:
- 合作夥伴新增名稱不同的新許可清單檔案。
- 您想在現有同步器中新增工作負載許可清單,以將相關許可清單分組。
- 您要從同步器中移除許可清單,因為您不再想使用對應的工作負載。
如要更新現有的 AllowlistSynchronizer
物件,請按照下列步驟操作:
列出叢集中的現有同步器:
kubectl get allowlistsynchronizer
在文字編輯器中開啟要更新的同步器規格。
更新
spec.allowlistPaths
欄位,新增、修改或移除允許清單檔案路徑。儲存並關閉文字編輯器。
將更新後的設定套用至叢集:
kubectl apply -f PATH_TO_YAML_FILE
將
PATH_TO_YAML_FILE
替換為您在上一步更新的 YAML 檔案路徑。
部署更新後的同步器設定時,AllowlistSynchronizer
物件狀態中的 managedAllowlistStatus.generation
欄位會遞增 1。AllowlistSynchronizer
控制器接著會套用變更。
監控允許清單同步狀態
安裝 AllowlistSynchronizer
或更新現有同步器後,您可以監控同步狀態。狀態可協助您追蹤允許清單檔案的安裝、移除或修改作業,以及可能發生的任何錯誤。
如要監控同步作業的一般狀態,請執行下列指令:
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
輸出結果會與下列內容相似:
...
status:
conditions:
- type: Ready
status: "False"
reason: "SyncError"
message: "some allowlists failed to sync: example-allowlist-1.yaml"
lastTransitionTime: "2024-10-12T10:00:00Z"
observedGeneration: 2
managedAllowlistStatus:
- filePath: "gs://path/to/allowlist1.yaml"
generation: 1
phase: Installed
lastSuccessfulSync: "2024-10-10T10:00:00Z"
- filePath: "gs://path/to/allowlist2.yaml"
phase: Failed
lastError: "Initial install failed: invalid contents"
lastSuccessfulSync: "2024-10-08T10:00:00Z"
如要瞭解這些欄位,請參閱AllowlistSynchronizer
狀態。
確認叢集中有許可清單
如要確認叢集中是否有允許清單,請執行下列指令:
kubectl get workloadallowlist
輸出內容是叢集中已安裝的許可清單。確認輸出內容包含要使用的許可清單。
部署具備權限的工作負載
成功安裝許可清單後,即可在叢集中部署相應的工作負載。提供工作負載的合作夥伴也應提供工作負載的安裝說明。如需 Autopilot 合作夥伴清單和說明文件連結,請參閱「Autopilot 合作夥伴」一文。
使用私人映像檔鏡像存放區
您可以將合作夥伴工作負載的容器映像檔,鏡像到您擁有的私人存放區。如要在工作負載中執行這些鏡像圖片,您必須符合下列所有規定:
- 鏡像圖片的 SHA-256 摘要必須與公開合作夥伴工作負載的圖片摘要相符。
- 您指定的 SHA-256 映像檔摘要必須存在於合作夥伴提供的
WorkloadAllowlist
物件中,並同步至叢集。
如果合作夥伴工作負載支援鏡像映像檔,該工作負載的許可清單規格會包含映像檔摘要清單,並列於該工作負載許可清單規格的 containers.imageDigests
欄位中。通常這個欄位會為每個可用的容器映像檔版本提供個別摘要。如要查看這份映像檔摘要清單,請按照下列步驟操作:
- 確認叢集中有許可清單。
取得已安裝許可清單的規格:
kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
將
ALLOWLIST_NAME
換成已安裝的允許清單名稱。例如:company-name-solution-v1.0.0
。如果工作負載支援這項功能,輸出內容會類似於下列內容。
imageDigests
欄位包含允許的摘要清單。# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
如果輸出內容未包含
imageDigests
欄位,或清單中沒有您想使用的發行版本摘要,請直接與合作夥伴聯絡,要求對方更新許可清單。合作夥伴將映像檔摘要新增至允許清單,並將變更提交至 GKE 後,叢集中的允許清單同步器會自動安裝更新後的允許清單。在工作負載資訊清單中新增其中一個支援的映像檔摘要。
舉例來說,請參考合作夥伴公開提供的 Pod 規格中的下列圖片:
...
containers:
- name: pause-container1
image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
如果摘要與公開摘要相符,您可以使用鏡像映像檔,如下列範例所示:
...
containers:
- name: pause-container1
image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
您必須在圖片欄位中加入 SHA-256 摘要,類似於先前的範例。如果摘要不相符,系統就不會放送鏡像圖片。 如要在鏡像合作夥伴映像檔時保留映像檔摘要,請考慮使用 crane、ORAS 或 skopeo 等工具。
刪除具備存取權的工作負載
如要停止允許特權工作負載在叢集中執行,請從 AllowlistSynchronizer 中移除對應許可清單的路徑。同步器會解除安裝許可清單。
如果您從叢集中刪除 WorkloadAllowlist
物件,而不是更新同步器,同步器會重新安裝許可清單。請務必從 AllowlistSynchronizer
中移除路徑。
如要解除安裝許可清單,請按照下列步驟操作:
- 在管理許可清單的
AllowlistSynchronizer
YAML 資訊清單中,移除要解除安裝的許可清單路徑。如需操作說明,請參閱「更新現有的 AllowlistSynchronizer 區段」。 如要確認許可清單已解除安裝,請取得叢集中的
WorkloadAllowlist
物件清單:kubectl get workloadallowlist
在輸出內容中,確認要移除的許可清單未顯示。
從叢集刪除工作負載。如需操作說明,請參閱工作負載供應商的說明文件。
防止在叢集中安裝允許清單
如要禁止在特定叢集安裝具備特殊權限的工作負載允許清單,請使用 ValidatingAdmissionPolicy。驗證許可政策可確保 Kubernetes 資源符合特定條件,才能在叢集中執行。例如,您可以驗證標籤是否具有特定值。
如要禁止在叢集中安裝允許清單,請執行下列操作:
請將下列 ValidatingAdmissionPolicy 資訊清單儲存為
disallow-allowlists.yaml
:apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicy metadata: name: "disallow-allowlists" spec: failurePolicy: Fail matchConstraints: resourceRules: - apiGroups: ["auto.gke.io"] apiVersions: ["*"] operations: ["*"] resources: ["allowlistsynchronizers"] validations: - expression: "false" message: 'AllowlistSynchronizer creation is not allowed'
將下列 ValidatingAdmissionPolicyBinding 資訊清單儲存為
disallow-allowlists-binding.yaml
:apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicyBinding metadata: name: "disallow-allowlists-binding" spec: policyName: "disallow-allowlists" validationActions: [Deny]
在叢集中部署 ValidatingAdmissionPolicy:
kubectl apply -f disallow-allowlists.yaml kubectl apply -f disallow-allowlists-binding.yaml
這項政策可防止在叢集中建立新的 AllowlistSynchronizer。
疑難排解
如果同步或工作負載部署失敗,請參閱「排解部署具備權限的 Autopilot 工作負載時發生的問題」。
後續步驟
- GKE Autopilot 合作夥伴
- 在 GKE Autopilot 上執行具備權限的開放原始碼工作負載
- GKE Autopilot 安全性功能
- AllowlistSynchronizer 自訂資源定義