官当,https://kubernetes.io/zh-cn/docs/concepts/security/pod-security-standards/
1. PSS介绍
Pod Security Standards (PSS)Pod 安全标准 是 Kubernetes 1.22 引入的一种安全机制,用于替代 Pod Security Policies (PSP)。PSS 提供了三种级别的安全策略:Privileged
、Baseline
和 Restricted
,分别适用于不同的安全需求
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