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

发布于:2025-09-04 ⋅ 阅读:(22) ⋅ 点赞:(0)

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

一、创建 Kubernetes 集群(使用 kind)

使用 kind (Kubernetes IN Docker)快速创建一个本地集群:

kind create cluster --name my-cluster

验证集群是否运行正常:

kubectl cluster-info --context kind-my-cluster

二、创建命名空间

我们将在一个自定义的命名空间(如 yumeko)中应用 Pod 安全标准,而不是默认的 default 命名空间。

kubectl create namespace yumeko
kubectl get ns yumeko

✅ 命名空间创建成功后,我们将在这个命名空间上启用 Pod 安全标准。


三、为命名空间启用 Pod 安全标准

Kubernetes 从 1.25 起逐步废弃 PodSecurityPolicy (PSP),并引入了 Pod Security Admission(内置准入控制器),支持通过命名空间上的标签来定义 Pod 安全级别。

yumeko 命名空间设置 Pod 安全标准标签

执行以下命令为命名空间打标签:

kubectl label namespace yumeko \
  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

✅ 这表示:

  • Enforce=baseline: 不符合 Baseline 的 Pod 将 被拒绝创建
  • Warn=restricted: 如果 Pod 不符合 Restricted,会显示 警告(但允许创建);
  • Audit=restricted: 用于审计目的,记录不符合 restricted 的 Pod(不阻止)。

🔒 你可以根据需求调整 enforce 的值为 restricted 来启用最高级别安全策略。


四、验证 Pod 安全标准是否生效

1. 准备一个简单的 Pod 配置文件(nginx-pod.yml)

在与终端相同目录下创建一个名为 nginx-pod.yml 的文件,内容如下:

# nginx-pod.yaml
cat <<EOF> /tmp/nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: Never
  volumes:
  - name: hostvol
    hostPath:
      path: /tmp
EOF

✅ 这证明我们在 yumeko 命名空间上设置的 enforce=baseline 已生效,能够阻止不安全的 Pod。


2. 在启用了安全策略的命名空间(yumeko)中创建 Pod

kubectl apply -n yumeko -f  /tmp/nginx-pod.yaml

预期结果:Pod 创建被拒绝,并出现类似以下错误:

Error from server (Forbidden): error when creating "nginx-pod.yaml": pods "nginx-pod" is forbidden: violates PodSecurity "baseline:latest": hostPath volumes (volume "hostvol")

✅ 这证明我们在 yumeko 命名空间上设置的 enforce=baseline 已生效,能够阻止不安全的 Pod。


3. 在默认命名空间(default)中创建同样的 Pod

执行以下命令:

kubectl apply -n default -f /tmp/nginx-pod.yaml

预期结果:Pod 成功创建,因为 default 命名空间没有启用任何 Pod 安全准入标签,因此不受 Baseline/Restricted 限制。


五、清理资源

当你完成测试后,可以删除该集群:

kind delete cluster --name my-cluster

网站公告

今日签到

点亮在社区的每一天
去签到