Pod 安全准入
Kubernetes v1.25 [穩定]
Kubernetes Pod 安全標準 為 Pod 定義了不同的隔離級別。這些標準允許你以清晰、一致的方式定義如何限制 Pod 的行為。
Kubernetes 提供了一個內建的 **Pod 安全** 准入控制器 來實施 Pod 安全標準。Pod 安全限制在 Pod 建立時應用於 名稱空間 級別。
內建 Pod 安全准入實施
此頁面是 Kubernetes v1.34 文件的一部分。如果你執行的是不同版本的 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.34).
#
# 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
行為都會跳過)。豁免維度包括:
- 使用者名稱: 來自具有豁免認證(或模擬)使用者名稱的使用者的請求將被忽略。
- RuntimeClassName: 指定豁免執行時類名的 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 准入控制器。