This site will be decommissioned on December 31st 2024. After that date content will be available at techdocs.broadcom.com.

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,原生自 TKG v2.3:
    • warnaudit 模式:restricted
    • enforce 模式:無設定
  • Kubernetes v1.25 和 v1.24,原生自 TKG v2.2 和 v2.1:
    • warnaudit 模式:baseline
    • enforce 模式:無設定

在 TKG 2.3、v2.2 和 v2.1 中執行原生 Kubernetes 版本的叢集的預設 PSA 設定可確保 Pod 在從 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