在命名空间级别应用 Pod 安全标准

Pod 安全准入是一个准入控制器,在创建 Pod 时应用 Pod 安全标准。 它是 v1.25 中 GA 的一项功能。在本教程中,您将一次强制执行一个命名空间的 baseline Pod 安全标准。

您也可以在集群级别一次将 Pod 安全标准应用于多个命名空间。 有关说明,请参阅在集群级别应用 Pod 安全标准

开始之前

在您的工作站上安装以下内容

创建集群

  1. 按如下方式创建 kind 集群

    kind create cluster --name psa-ns-level
    

    输出类似于这样

    Creating cluster "psa-ns-level" ...
     ✓ Ensuring node image (kindest/node:v1.32.0) 🖼 
     ✓ Preparing nodes 📦  
     ✓ Writing configuration 📜 
     ✓ Starting control-plane 🕹️ 
     ✓ Installing CNI 🔌 
     ✓ Installing StorageClass 💾 
    Set kubectl context to "kind-psa-ns-level"
    You can now use your cluster with:
    
    kubectl cluster-info --context kind-psa-ns-level
    
    Not sure what to do next? 😅  Check out https://kind.kubernetes.ac.cn/docs/user/quick-start/
    
  2. 将 kubectl 上下文设置为新集群

    kubectl cluster-info --context kind-psa-ns-level
    

    输出类似于这样

    Kubernetes control plane is running at https://127.0.0.1:50996
    CoreDNS is running at https://127.0.0.1:50996/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    

创建命名空间

创建一个名为 example 的新命名空间

kubectl create ns example

输出类似于这样

namespace/example created

为此命名空间启用 Pod 安全标准检查

  1. 使用内置 Pod 安全准入支持的标签,在此命名空间上启用 Pod 安全标准。 在此步骤中,您将配置一个检查,以警告不符合最新版本的 _baseline_ pod 安全标准的 Pod。

    kubectl label --overwrite ns example \
       pod-security.kubernetes.io/warn=baseline \
       pod-security.kubernetes.io/warn-version=latest
    
  2. 您可以使用标签在任何命名空间上配置多个 Pod 安全标准检查。 以下命令将 强制执行 baseline Pod 安全标准,但根据最新版本(默认值)对 restricted Pod 安全标准进行 警告审计

    kubectl label --overwrite ns example \
      pod-security.kubernetes.io/enforce=baseline \
      pod-security.kubernetes.io/enforce-version=latest \
      pod-security.kubernetes.io/warn=restricted \
      pod-security.kubernetes.io/warn-version=latest \
      pod-security.kubernetes.io/audit=restricted \
      pod-security.kubernetes.io/audit-version=latest
    

验证 Pod 安全标准强制执行

  1. example 命名空间中创建一个 baseline Pod

    kubectl apply -n example -f https://k8s.io/examples/security/example-baseline-pod.yaml
    

    Pod 确实可以正常启动;输出包含一个警告。 例如

    Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "nginx" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "nginx" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "nginx" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "nginx" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
    pod/nginx created
    
  2. default 命名空间中创建一个 baseline Pod

    kubectl apply -n default -f https://k8s.io/examples/security/example-baseline-pod.yaml
    

    输出类似于这样

    pod/nginx created
    

Pod 安全标准强制执行和警告设置仅应用于 example 命名空间。您可以在 default 命名空间中创建相同的 Pod,而不会收到任何警告。

清理

现在,运行以下命令删除您上面创建的集群

kind delete cluster --name psa-ns-level

下一步

上次修改时间为 2023 年 11 月 08 日晚上 10:12 PST:修复 en 文档中的 KinD 拼写错误。(ad52e828b5)