Pod 安全性許可
Kubernetes v1.25 [穩定]
Kubernetes Pod 安全標準 為 Pod 定義了不同的隔離等級。這些標準讓您可以清楚且一致地定義您想要如何限制 Pod 的行為。
Kubernetes 提供內建的Pod 安全 准入控制器,以強制執行 Pod 安全標準。Pod 安全限制會在建立 Pod 時套用在命名空間層級。
內建 Pod 安全准入強制執行
此頁面是 Kubernetes v1.32 文件的其中一部分。如果您執行的是不同版本的 Kubernetes,請查閱該版本的說明文件。
Pod 安全等級
Pod 安全准入根據 Pod 安全標準 定義的三個等級:privileged
、baseline
和 restricted
,對 Pod 的 安全環境 和其他相關欄位提出要求。請參閱 Pod 安全標準 頁面,深入了解這些要求。
命名空間的 Pod 安全准入標籤
一旦啟用此功能或安裝 Webhook,您就可以設定命名空間,以定義您想要在每個命名空間中用於 Pod 安全性的准入控制模式。Kubernetes 定義了一組標籤,您可以設定這些標籤來定義您想要用於命名空間的預先定義 Pod 安全標準等級。您選擇的標籤定義了如果偵測到潛在違規時,控制平面採取的動作
模式 | 描述 |
---|---|
enforce | 策略違規將導致 Pod 被拒絕。 |
audit | 策略違規將觸發在 稽核日誌 中記錄的事件中新增稽核註解,但其他方面仍允許。 |
warn | 原則違規行為會觸發使用者介面的警告,但在其他方面是被允許的。 |
命名空間可以設定任何或所有模式,甚至可以為不同的模式設定不同的層級。
對於每種模式,都有兩個標籤決定所使用的原則
# The per-mode level label indicates which policy level to apply for the mode.
#
# MODE must be one of `enforce`, `audit`, or `warn`.
# LEVEL must be one of `privileged`, `baseline`, or `restricted`.
pod-security.kubernetes.io/<MODE>: <LEVEL>
# Optional: per-mode version label that can be used to pin the policy to the
# version that shipped with a given Kubernetes minor version (for example v1.32).
#
# MODE must be one of `enforce`, `audit`, or `warn`.
# VERSION must be a valid Kubernetes minor version, or `latest`.
pod-security.kubernetes.io/<MODE>-version: <VERSION>
請參閱使用命名空間標籤強制執行 Pod 安全標準以查看範例用法。
工作負載資源與 Pod 範本
Pod 通常是間接建立的,透過建立工作負載物件,例如 Deployment 或 Job。 工作負載物件定義了Pod 範本,而工作負載資源的控制器會根據該範本建立 Pod。 為了幫助及早發現違規行為,稽核和警告模式都適用於工作負載資源。 然而,不會將強制執行模式應用於工作負載資源,僅適用於產生的 Pod 物件。
豁免
您可以定義 Pod 安全性強制執行中的豁免,以便允許建立原本會因與給定命名空間相關聯的原則而被禁止的 Pod。 豁免可以在 准入控制器配置中靜態配置。
豁免必須明確列舉。 符合豁免條件的請求會被准入控制器忽略(所有 enforce
、audit
和 warn
行為都會被略過)。 豁免的範圍包含
- 使用者名稱: 來自具有豁免身分驗證(或模擬)使用者名稱的使用者的請求會被忽略。
- RuntimeClassNames: 指定豁免執行階段類別名稱的 Pod 和工作負載資源會被忽略。
- 命名空間: 位於豁免命名空間中的 Pod 和工作負載資源會被忽略。
注意
大多數 Pod 是由控制器回應工作負載資源而建立的,這表示豁免最終使用者只會豁免他們直接建立 Pod 時的強制執行,但不會豁免建立工作負載資源時的強制執行。 控制器服務帳戶(例如system:serviceaccount:kube-system:replicaset-controller
)通常不應被豁免,因為這樣做會隱含地豁免任何可以建立相應工作負載資源的使用者。對以下 Pod 欄位的更新免於原則檢查,這表示如果 Pod 更新請求僅變更這些欄位,即使 Pod 違反目前的原則層級,也不會被拒絕
- 任何中繼資料更新,除了 seccomp 或 AppArmor 註解的變更
seccomp.security.alpha.kubernetes.io/pod
(已棄用)container.seccomp.security.alpha.kubernetes.io/*
(已棄用)container.apparmor.security.beta.kubernetes.io/*
(已棄用)
- 對
.spec.activeDeadlineSeconds
的有效更新 - 對
.spec.tolerations
的有效更新
指標
以下是 kube-apiserver 公開的 Prometheus 指標
pod_security_errors_total
:此指標表示阻止正常評估的錯誤數量。 非致命錯誤可能會導致最新的受限設定檔被用於強制執行。pod_security_evaluations_total
:此指標表示已發生的原則評估次數,不包括匯出期間忽略或豁免的請求。pod_security_exemptions_total
:此指標表示豁免請求的數量,不包括忽略或超出範圍的請求。
接下來是什麼
如果您執行的是舊版本的 Kubernetes,並且想要升級到不包含 PodSecurityPolicies 的 Kubernetes 版本,請閱讀從 PodSecurityPolicy 移轉到內建的 PodSecurity 准入控制器。