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 和 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、v2.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 生成集群清单,然后编辑 Cluster 规范中的 podSecurityStandard 变量值,如更改基于类的现有集群的 PSA 中所述,然后再在步骤 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