Skip to content

官当,https://kubernetes.io/zh-cn/docs/concepts/security/pod-security-standards/

Pod 安全准入 (PSA)

1. PSS介绍

Pod Security Standards (PSS)Pod 安全标准 是 Kubernetes 1.22 引入的一种安全机制,用于替代 Pod Security Policies (PSP)。PSS 提供了三种级别的安全策略:PrivilegedBaselineRestricted,分别适用于不同的安全需求

1.1 策略介绍

Privileged: 最宽松的策略,允许所有操作,适用于需要完全控制的 Pods,例如执行复杂的系统操作。

Baseline: 适度的限制,适用于大多数应用程序,允许常见的使用模式,但不允许特权操作。

Restricted: 最严格的策略,适用于高安全性环境,限制了大多数可能引发安全问题的操作。

2. 启用Pod安全准入控制器

首先,确保 Kubernetes 集群启用了 Pod 安全准入控制器。在 Kubernetes 1.25 及以后版本中,Pod 安全准入控制器是默认启用的。

在 Kubernetes API Server 的启动参数中配置 Pod 安全准入控制器:

--enable-admission-plugins=...,PodSecurity,…
--enable-admission-plugins=...,PodSecurity,…

3. PSS案例

3.1 配置特权Pod

1.创建ns

bash
kubectl create namespace privileged-namespace
kubectl create namespace privileged-namespace

3.2 创建PSS策略

1.privileged-namespace.yaml

bash
apiVersion: v1
kind: Namespace
metadata:
  name: privileged-namespace
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/audit: baseline
    pod-security.kubernetes.io/warn: restricted
apiVersion: v1
kind: Namespace
metadata:
  name: privileged-namespace
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/audit: baseline
    pod-security.kubernetes.io/warn: restricted

参数介绍:

enforce: privileged:强制执行 Privileged 策略,允许特权操作。

audit: baseline:在审计日志中记录超出 Baseline 策略的行为。

warn: restricted:发出警告,提示哪些操作违反了 Restricted 策略

bash
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: privileged-namespace
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/audit: baseline
    pod-security.kubernetes.io/warn: restricted
EOF
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: privileged-namespace
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/audit: baseline
    pod-security.kubernetes.io/warn: restricted
EOF

3.3 部署Pod

yaml
apiVersion: v1
kind: Pod
metadata:
  name: optimized-pod
  namespace: privileged-namespace
spec:
  initContainers:
    - name: init-sysctl
      image: busybox
      command:
        - sh
        - '-c'
        - |
          echo 2048 > /proc/sys/net/core/somaxconn;
          echo 262144 > /proc/sys/net/core/netdev_max_backlog;
          echo 262144 > /proc/sys/net/core/rmem_max;
          echo 262144 > /proc/sys/net/core/wmem_max;
          echo 1048576 > /proc/sys/fs/file-max;
          echo 1048576 > /proc/sys/fs/nr_open;
          echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout;
          echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse;
          echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle;
      securityContext:
        privileged: true
  containers:
    - name: main-container
      image: nginx
      ports:
        - containerPort: 80
apiVersion: v1
kind: Pod
metadata:
  name: optimized-pod
  namespace: privileged-namespace
spec:
  initContainers:
    - name: init-sysctl
      image: busybox
      command:
        - sh
        - '-c'
        - |
          echo 2048 > /proc/sys/net/core/somaxconn;
          echo 262144 > /proc/sys/net/core/netdev_max_backlog;
          echo 262144 > /proc/sys/net/core/rmem_max;
          echo 262144 > /proc/sys/net/core/wmem_max;
          echo 1048576 > /proc/sys/fs/file-max;
          echo 1048576 > /proc/sys/fs/nr_open;
          echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout;
          echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse;
          echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle;
      securityContext:
        privileged: true
  containers:
    - name: main-container
      image: nginx
      ports:
        - containerPort: 80