本文說明如何建立允許清單,在 Autopilot 節點中部署具備特殊權限的工作負載。您可以在 Cloud Storage 值區中儲存這些允許清單。本文件適用於平台管理員和營運人員,他們希望針對特定 Kubernetes 工作負載,免除特定客戶擁有的工作負載遵守預設 Autopilot 安全性限制。您應已熟悉 Autopilot 中的具備權限工作負載許可控制。
關於 Autopilot 中的具備特殊權限工作負載
Autopilot 模式會對工作負載強制執行一組預設限制,以提升安全防護機制。如要略過這些限制來執行特定具備權限的工作負載,請安裝與這些工作負載對應的許可清單。根據預設,任何 Autopilot 或 Standard 叢集都可讓您安裝 Autopilot 合作夥伴和特定開放原始碼專案的允許清單。
符合資格的 GKE 客戶可以為自己的特殊權限工作負載建立及管理允許清單,這類工作負載與預設的 Autopilot 限制不相容。這些允許清單是 WorkloadAllowlist Kubernetes 自訂資源,您可以在 YAML 檔案中定義,並儲存在 Cloud Storage bucket 中。身分和帳戶管理員可使用機構政策,讓您設定叢集來辨識這些客戶管理的允許清單和 bucket。叢集管理員可以安裝這些許可清單,讓特殊權限工作負載以 Autopilot 模式執行。
如要進一步瞭解相關程序和參與人員,請參閱「How privileged Autopilot workload admission control works」。
事前準備
開始之前,請務必先完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
-
啟用 Cloud Storage API。
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。 - 請確認您擁有執行 1.35 以上版本的 GKE 叢集。您也可以建立 Autopilot 叢集來執行這項工作。
- 確認您有可儲存允許清單檔案的 Cloud Storage bucket。您也可以為這項工作建立 bucket。
- 開啟 YAML 資訊清單,定義要在 Autopilot 中執行的具備權限工作負載。
必要的角色
如要取得在 Cloud Storage 中儲存允許清單及設定同步所需的權限,請要求管理員授予您 bucket 的下列 IAM 角色:
-
在值區中儲存允許清單:
Storage 物件使用者 (
roles/storage.objectUser) -
授予 GKE 服務代理存取權:
「Storage 管理員」 (
roles/storage.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
建立及上傳 WorkloadAllowlist
允許清單是您在 YAML 檔案中定義的 WorkloadAllowlist 自訂資源。WorkloadAllowlist 規格中的欄位與 Kubernetes Pod 規格中的欄位類似。在叢集安裝許可清單並部署具備權限的工作負載時,GKE 會根據已安裝的許可清單驗證具備權限的工作負載規格。只有當許可清單規格中的所有欄位,都與工作負載規格中的對應欄位相符時,工作負載才能執行。
如要建立新的 WorkloadAllowlist 並上傳至 Cloud Storage bucket,請按照下列步驟操作:
- 找出要加入許可清單的具備權限工作負載。
在 Pod 規格的
metadata.annotations欄位中新增下列註解:cloud.google.com/generate-allowlist: "true"如果是由控制器管理的 Pod (例如 DaemonSet 或 Deployment),請將註解新增至
spec.template.metadata.annotations欄位。嘗試在叢集中建立具備權限的工作負載:
kubectl apply -f WORKLOAD_FILE_PATH請將 WORKLOAD_FILE_PATH 替換為工作負載資訊清單檔案的路徑,GKE 會拒絕工作負載,並顯示包含 WorkloadAllowlist 資訊清單的錯誤訊息。輸出結果會與下列內容相似:
This workload can be enabled using the following Custom Resource. To be used in-cluster, the WorkloadAllowlist must be uploaded to Google Cloud Storage and then installed using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-privileged-allowlists. Note that many common partner workloads are already allowlisted. These can be installed directly using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/resources/autopilot-partners. --- apiVersion: auto.gke.io/v1 kind: WorkloadAllowlist metadata: name: test-pod-allowlist-2025-09-11t22-40-37 annotations: autopilot.gke.io/no-connect: "true" exemptions: - autogke-disallow-privilege matchingCriteria: containers: - name: pause-container2 image: k8s.gcr.io/pause2 securityContext: privileged: true在文字編輯器中,建立包含所產生 WorkloadAllowlist 的 YAML 檔案。
設定許可清單的
metadata.name欄位。選用:將 WorkloadAllowlist 一般化,以便豁免類似的工作負載。請使用下列其中一種方法:
特定欄位支援規則運算式,例如
matchingCriteria.containers[*].image和matchingCriteria.containers[*].args。使用規則運算式,比對不同工作負載中的多個值。特定欄位 (例如
matchingCriteria.containers和matchingCriteria.securityContext.capabilities.add) 會比對 WorkloadAllowlist 中的值子集,找出相符的工作負載。在 WorkloadAllowlist 中,指定其他值來比對其他工作負載。
如要進一步瞭解所有支援的欄位和值,請參閱 WorkloadAllowlist CustomResourceDefinition。
如果貴機構政策允許從叢集中的 bucket 安裝允許清單,叢集管理員可以執行下列操作:
- 將允許清單路徑新增至叢集。
- 建立 AllowlistSynchronizer,從值區安裝允許清單。
如要進一步瞭解如何設定叢集及安裝許可清單,請參閱「在 Autopilot 模式中控管具備特殊權限的工作負載許可」。
許可清單設定範例
WorkloadAllowlist 規格中的 matchingCriteria 欄位與 Kubernetes Pod 規格的結構類似。WorkloadAllowlist CustomResourceDefinition 是所有欄位、值和運算式的真實來源。
本節將顯示允許清單範例,該清單符合具有下列屬性的工作負載:
- 工作負載中的
container-1容器會在特權模式中執行。 - 工作負載會以寫入模式,從節點檔案系統掛接
/var/log/目錄。
查看工作負載範例:
apiVersion: apps/v1 kind: Deployment metadata: name: example-privileged-workload labels: env: dev spec: selector: matchLabels: env: dev template: metadata: labels: env: dev spec: containers: - name: container-1 image: example-image-1 resources: requests: cpu: "400m" memory: "4Gi" # Run the container in privileged mode securityContext: privileged: true - name: container-2 image: example-image-2 volumeMounts: - name: write-varlog mountPath: /logs readOnly: false # Mount a host directory volumes: - name: write-varlog hostPath: path: /var/log type: Directory根據預設,Autopilot 會拒絕這項工作負載。
查看 WorkloadAllowlist 範例:
apiVersion: auto.gke.io/v1 kind: WorkloadAllowlist minGKEVersion: 1.32.0-gke.1000000 metadata: name: example-privileged-workload annotations: autopilot.gke.io/no-connect: "true" # List of constraints that the allowlist modifies exemptions: - autogke-disallow-privilege - autogke-no-write-mode-hostpath matchingCriteria: containers: - name: container-1 image: example-image-1 securityContext: privileged: true - name: container-2 image: example-image-2 volumeMounts: - name: write-varlog mountPath: /logs readOnly: false volumes: - name: write-varlog hostPath: path: /var/log這個 WorkloadAllowlist 具有下列屬性:
exemptions欄位中的值會指定允許清單略過的 Autopilot 限制。matchingCriteria欄位中的值會指定範例工作負載使用的容器,以及通常會違反 Autopilot 限制的欄位。
允許清單只會列出違反限制的欄位值。系統會忽略工作負載中的其他欄位,例如
resources.requests欄位。
在叢集中安裝這個 WorkloadAllowlist 範例後,GKE 允許特權工作負載在該叢集中執行。舉例來說,在含有 Autopilot 節點的 Standard 叢集中,安裝這個 WorkloadAllowlist 可讓具備權限的工作負載在 Autopilot 節點上執行。
授予 GKE 服務代理存取權
如要從叢集中的 bucket 同步處理允許清單,叢集專案中的 GKE 服務代理程式必須具備下列 IAM 角色:
- Storage Bucket 檢視者 (
roles/storage.bucketViewer) - Storage 物件檢視者 (
roles/storage.objectViewer)
如要將這些角色授予服務代理人,請按照下列步驟操作:
找出叢集專案的專案編號:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'授予
roles/storage.bucketViewer角色:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.bucketViewer更改下列內容:
BUCKET_NAME:Cloud Storage bucket 的名稱。CLUSTER_PROJECT_NUMBER:叢集專案的專案編號,來自上一個步驟的輸出內容。BUCKET_PROJECT_ID:包含值區的專案 ID。
授予
roles/storage.objectViewer角色:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.objectViewer