Pod 安全性許可

Pod 安全准入控制器的概觀,它可以強制執行 Pod 安全標準。
功能狀態: Kubernetes v1.25 [穩定]

Kubernetes Pod 安全標準 為 Pod 定義了不同的隔離等級。這些標準讓您可以清楚且一致地定義您想要如何限制 Pod 的行為。

Kubernetes 提供內建的Pod 安全 准入控制器,以強制執行 Pod 安全標準。Pod 安全限制會在建立 Pod 時套用在命名空間層級。

內建 Pod 安全准入強制執行

此頁面是 Kubernetes v1.32 文件的其中一部分。如果您執行的是不同版本的 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.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 通常是間接建立的,透過建立工作負載物件,例如 DeploymentJob。 工作負載物件定義了Pod 範本,而工作負載資源的控制器會根據該範本建立 Pod。 為了幫助及早發現違規行為,稽核和警告模式都適用於工作負載資源。 然而,不會將強制執行模式應用於工作負載資源,僅適用於產生的 Pod 物件。

豁免

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

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

  • 使用者名稱: 來自具有豁免身分驗證(或模擬)使用者名稱的使用者的請求會被忽略。
  • RuntimeClassNames: 指定豁免執行階段類別名稱的 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 准入控制器

上次修改時間:PST 2024 年 3 月 7 日下午 4:54:AppArmor v1.30 文件更新 (4f11f83a45)