You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在Minikube中启用Pod Security Admission控制器求助

问题分析与解决方案

你遇到的核心问题是:在Kubernetes 1.25.3版本的Minikube/Kind环境中,即使开启了PodSecurity(PSA)特性门控和准入插件,设置了restricted级别的命名空间标签,不符合安全基线的Pod依然能被创建。

关键排查点

1. 准入插件配置错误(最可能原因)

你的Minikube启动命令中,--extra-config=apiserver.enable-admission-plugins=PodSecurity是直接替换默认准入插件列表,而非追加。Kubernetes API Server需要依赖一系列默认准入插件才能正常运行,仅保留PodSecurity会导致整个准入链异常,进而使PSA控制器无法生效。

2. 命名空间标签的版本兼容性

在Kubernetes 1.25中,PSA基线是版本绑定的,若仅指定pod-security.kubernetes.io/enforce: restricted,集群会默认使用对应Kubernetes版本的基线,但明确指定版本可避免模糊匹配问题。

3. 验证PSA组件状态

需确认API Server是否真正加载了PodSecurity插件,以及PSA API是否可用。

修复步骤

1. 修正Minikube启动命令

将PodSecurity追加到默认准入插件列表中:

minikube start --kubernetes-version=v1.25.3 \
  --feature-gates=PodSecurity=true \
  --extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,TaintNodesByCondition,Priority,DefaultTolerationSeconds,DefaultStorageClass,StorageObjectInUseProtection,PersistentVolumeClaimResize,RuntimeClass,ResourceQuota,PodSecurity

2. 修正Kind集群配置

若使用Kind,需在cluster.yml中完整配置准入插件和特性门控:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    featureGates:
      PodSecurity: true
  - |
    apiVersion: kubeadm.k8s.io/v1beta3
    kind: ClusterConfiguration
    apiServer:
      extraArgs:
        enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,TaintNodesByCondition,Priority,DefaultTolerationSeconds,DefaultStorageClass,StorageObjectInUseProtection,PersistentVolumeClaimResize,RuntimeClass,ResourceQuota,PodSecurity"
      featureGates:
        PodSecurity: true

3. 完善命名空间标签

添加明确的版本标记及警告/审计标签,便于验证:

kind: Namespace
metadata:
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/enforce-version: v1.25
    pod-security.kubernetes.io/warn: restricted
    pod-security.kubernetes.io/warn-version: v1.25
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/audit-version: v1.25
  name: psa

验证操作

  1. 检查API Server准入插件加载状态
kubectl get pod -n kube-system $(kubectl get pod -n kube-system | grep kube-apiserver | awk '{print $1}') -o yaml | grep -A 3 enable-admission-plugins

确保输出中包含PodSecurity。

  1. 测试不安全Pod的创建
    直接创建不符合基线的Pod(而非Deployment,避免控制器层级的干扰):
apiVersion: v1
kind: Pod
metadata:
  name: unsecure-pod
  namespace: psa
spec:
  securityContext:
    runAsUser: 0
    runAsGroup: 0
    fsGroup: 0
  volumes:
    - name: etcvol
      hostPath:
        path: "/etc"
        type: Directory
  containers:
    - name: nginx
      image: nginx:1.14.2
      ports:
        - containerPort: 80
      securityContext:
        allowPrivilegeEscalation: true
        privileged: true
        capabilities:
          add: ["NET_ADMIN", "SYS_TIME"]

执行kubectl apply -f pod.yaml,应收到类似如下的拦截提示:

Error from server (Forbidden): error when creating "pod.yaml": pods "unsecure-pod" is forbidden: violates PodSecurity "restricted:v1.25": hostPath volumes (volumes["etcvol"]), privileged container (containers["nginx"]), allowPrivilegeEscalation != false (containers["nginx"]), runAsNonRoot != true (pod or container "nginx"), seccompProfile (pod or container "nginx")

内容的提问来源于stack exchange,提问作者Adam Sandor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:40:21