Pod 安全准入

Pod 安全准入控制器概述,它可以實施 Pod 安全標準。
特性狀態: Kubernetes v1.25 [穩定]

Kubernetes Pod 安全標準 為 Pod 定義了不同的隔離級別。這些標準允許你以清晰、一致的方式定義如何限制 Pod 的行為。

Kubernetes 提供了一個內建的 **Pod 安全** 准入控制器 來實施 Pod 安全標準。Pod 安全限制在 Pod 建立時應用於 名稱空間 級別。

內建 Pod 安全准入實施

此頁面是 Kubernetes v1.34 文件的一部分。如果你執行的是不同版本的 Kubernetes,請查閱該版本的文件。

Pod 安全級別

Pod 安全准入根據 Pod 安全標準 定義的三個級別(privilegedbaselinerestricted)對 Pod 的 安全上下文 和其他相關欄位提出要求。有關這些要求的深入瞭解,請參閱 Pod 安全標準 頁面。

名稱空間的 Pod 安全准入標籤

一旦啟用該功能或安裝了 webhook,你就可以配置名稱空間來定義每個名稱空間中 Pod 安全性要使用的准入控制模式。Kubernetes 定義了一組 標籤,你可以設定這些標籤來定義要用於名稱空間的預定義 Pod 安全標準級別。你選擇的標籤定義了在檢測到潛在違規時 控制面 將採取的行動。

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 通常是透過建立 工作負載物件(例如 DeploymentJob)間接建立的。工作負載物件定義了一個 Pod 模板,並且工作負載資源的 控制器 根據該模板建立 Pod。為了幫助及早發現違規,審計和警告模式都應用於工作負載資源。但是,強制模式 適用於工作負載資源,僅適用於生成的 Pod 物件。

豁免

你可以定義 Pod 安全強制執行的 豁免,以允許建立原本會因給定名稱空間關聯的策略而被禁止的 Pod。豁免可以在 准入控制器配置 中靜態配置。

豁免必須明確列舉。符合豁免條件的請求會被准入控制器 忽略(所有 enforceauditwarn 行為都會跳過)。豁免維度包括:

  • 使用者名稱: 來自具有豁免認證(或模擬)使用者名稱的使用者的請求將被忽略。
  • RuntimeClassName: 指定豁免執行時類名的 Pod 和 工作負載資源 將被忽略。
  • 名稱空間: 位於豁免名稱空間中的 Pod 和 工作負載資源 將被忽略。

以下 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 准入控制器

最後修改於 2024 年 3 月 7 日下午 4:54 PST: AppArmor v1.30 文件更新 (4f11f83a45)