🎯 命名空间级别应用 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: nginximage: nginx:latestimagePullPolicy: Nevervolumes:- name: hostvolhostPath: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