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 生成集群清单,然后编辑 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