Pod 安全性

本主題說明如何設定 Pod 安全性許可 (PSA) 控制器以保護由 Tanzu Kubernetes Grid (TKG) 部署的工作負載叢集。

對於執行 Kubernetes v1.23 及更高版本的叢集或叢集中的命名空間,TKG 支援透過 Pod 安全性許可 (PSA) 控制器套用 privilegedbaselinerestricted 類型的 Pod 安全原則。

背景:PSA 控制器

Kubernetes 中的 PSA 控制器可讓您沿著兩個軸設定工作負載安全原則:

  • 設定檔指定工作負載 Pod 可以在以下位置執行的權限等級:privilegedbaselinerestricted,限制從最低到最嚴格。
  • 模式指定在嘗試建立 Pod 違反設定檔時觸發的操作:warn 輸出警告,audit 新增稽核記錄項目,enforce 阻止建立 Pod。

您可以將 PSA 控制器設為在特定命名空間或叢集範圍內執行。例如,您可以將叢集設為在 baseline Pod 違反安全原則時觸發稽核記錄,如果 restricted Pod 違反安全原則,則會封鎖該 Pod。

如需詳細資訊,請參閱 Kubernetes 說明文件中的 Pod 安全標準

從 Pod 安全原則移轉

PSA 系統取代在 Kubernetes v1.21 中棄用並在 v1.25 中移除的 Pod 安全原則 (PSP),如 Kubernetes v1.25 版本資訊中所述。

節點的 PSP 在 TKG v2.1 中已棄用,以反映它們在 Kubernetes 中的棄用情況;如需瞭解如何將 Pod 從 PSP 移轉至 PSA 控制器,請參閱從 PodSecurityPolicy 移轉至內建 PodSecurity 許可控制器

TKG 中的 PSA 組態

TKG 工作負載叢集的預設 PSA 設定取決於其執行的 Kubernetes 版本:

  • Kubernetes v1.26 和 v1.27 源自 TKG v2.3 和 v2.4:
    • warnaudit 模式:restricted
    • enforce 模式:無設定
  • Kubernetes v1.25 和 v1.24,原生自 TKG v2.2 和 v2.1:
    • warnaudit 模式:baseline
    • enforce 模式:無設定

對於在 TKG 2.4、2.3、v2.2 和 v2.1 中執行原生 Kubernetes 版本的叢集,預設 PSA 設定可確保網繭在從 PSP 移轉至 PSA 期間繼續執行,即使它們產生有關違反原則的警告也是如此:

從 TKG v2.2 開始,所有內部 TKG 元件都符合 PSA restricted 設定檔。

設定叢集範圍的 PSA

可以使用叢集範圍的 PSA 設定新叢集或變更現有叢集的 PSA。

新叢集的叢集範圍的 PSA

如要為新的工作負載叢集設定叢集範圍的 PSA,請將其叢集組態檔中的 POD_SECURITY_STANDARD_DEACTIVATED 設為 false 並設定其他 POD_SECURITY_STANDARD_* 變數,如《組態檔變數參考》中的 Pod 安全標準表格中所述。

  • POD_SECURITY_STANDARD_DEACTIVATED
  • POD_SECURITY_STANDARD_AUDIT
  • POD_SECURITY_STANDARD_WARN
  • POD_SECURITY_STANDARD_ENFORCE

您還可以依照建立以類別為基礎的叢集中所述的兩步驟程序的步驟 1 產生叢集資訊清單,然後依下方變更以類別為基礎的現有叢集的 PSA 中所述編輯 Cluster 規格中的 podSecurityStandard 變數值,之後再依步驟 2 建立叢集。

變更以類別為基礎的現有叢集的 PSA

如要變更以類別為基礎的現有叢集的 PSA 組態,請執行以下操作:

  1. 在編輯器中開啟 Cluster 物件規格:

    kubectl edit -namespace NAMESPACE CLUSTER
    
  2. 編輯 spec.topology.variables 之下的 podSecurityStandard 區塊中的值:

    - name: podSecurityStandard
    
      value:
        deactivated: DEACTIVATED
        audit: AUDIT-PROFILE
        enforce: ENFORCE-PROFILE
        warn: WARN-PROFILE
        auditVersion: AUDIT-VERSION
        enforceVersion: ENFORCE-VERSION
        warnVersion: WARN-VERSION
        exemptions:
          namespaces: [EXEMPT-NS]
    

    其中:

    • DEACTIVATEDfalse 以套用叢集範圍的 PSA,否則為 true
    • AUDIT-PROFILEENFORCE-PROFILEWARN-PROFILE 是每種模式的 PSA 組態檔,該模式可以是 "privileged""baseline""restricted"。預設值為 "privileged"
    • VERSION 值是三種模式的 Kubernetes 版本,例如 "v1.26"
    • EXEMPT-NS 是以逗號分隔的命名空間清單,以從 PSA 控制項中排除。

    附註:kube-systemtkg-system 的系統命名空間將會始終從 PSA 控制項中排除。

  3. 在套用 Cluster 物件規格後,應將變更推出到叢集的控制平面節點。

變更現有舊版叢集的 PSA

如要變更現有舊版叢集的 PSA 組態,請執行以下操作:

  1. KubeadmControlPlane 物件擷取目前的 AdmissionConfiguraton 規格檔案,並將之儲存在本機,例如:

    kubectl get kcp my-cluster-control-plane --template='{{ range $v := .spec.kubeadmConfigSpec.files }}{{ if eq $v.path "/etc/kubernetes/admission-control-config.yaml" }}{{ $v.content }}{{ end }}{{ end }}' > admission-config.yaml
    
  2. admission-config.yaml 檔案編輯為新組態。例如,以下將 enforce 設為 baseline 並將 auditwarn 模式保持為 restricted

    apiVersion: apiserver.config.k8s.io/v1
    kind: AdmissionConfiguration
    plugins:
    - name: PodSecurity
    configuration:
      apiVersion: pod-security.admission.config.k8s.io/v1beta1
      kind: PodSecurityConfiguration
      defaults:
        enforce: "baseline"
        enforce-version: "v1.24"
        audit: "restricted"
        audit-version: "v1.24"
        warn: "restricted"
        warn-version: "v1.24"
      exemptions:
        usernames: []
        runtimeClasses: []
        namespaces: ["kube-system", "tkg-system"]
    
  3. 編輯 KubeadmControlPlane 物件規格,並將其位於 spec.kubeadmConfigSpec.files 的陣列項目取代為我們的新組態檔。

  4. 在套用 KubeadmControlPlane 物件規格後,應將變更推出到叢集的控制平面節點。

在新增或變更 PSA 組態之前檢查合規性

新增或變更 PSA 之前,請確保 PSA 的叢集或命名空間中的所有現有工作負載都符合新原則設定,以避免意外停機。

您可以透過執行 kubectl label --overwrite --dry-run=server 來評估在現有命名空間中執行的 Pod 是否符合指定的原則:

kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>

在設定 Pod 安全性許可的 audit 模式時,相同的資訊會寫入稽核記錄,或者在將資源套用於叢集並設定 warn 模式時提供相同的資訊。

有關 Pod 安全的不同組態檔的最新資訊,請參閱 Kubernetes 說明文件

check-circle-line exclamation-circle-line close-line
Scroll to top icon