Kubernetes 的 Pod 安全策略可以帮助我们提高集群的安全性。以下是一些常见的 Pod 安全策略配置:
- 禁止特权容器:特权容器是具有 Linux 的 root 权限和访问主机名字空间、网络名字空间等权限的容器。禁止使用特权容器可以有效地避免攻击者利用容器逃脱沙盒。
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restrict-privilege
spec:
privileged: false
allowPrivilegeEscalation: false
- 文件系统只读:将文件系统设置为只读,可以防止攻击者在运行时修改敏感信息或植入木马。
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: readonly-fs
spec:
volumes:
- configMap
- downwardAPI
- emptyDir
- persistentVolumeClaim
- projected
- secret
fsGroup:
rule: RunAsAny # 继承宿主机用户组
runAsUser:
rule: RunAsAny # 继承宿主机用户
seLinux:
rule: RunAsAny # 继承宿主机 SELinux 标签
supplementalGroups:
rule: MustRunAs # 必须以指定用户组运行
- AppArmor 或 Seccomp:AppArmor 和 Seccomp 是两种 Linux 安全模块,它们可以限制容器的系统调用和文件系统访问权限。
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restrict-apparmor-seccomp
spec:
seLinux:
rule: RunAsAny # 继承宿主机 SELinux 标签
supplementalGroups:
rule: MustRunAs # 必须以指定用户组运行
volumes:
- configMap
- downwardAPI
- emptyDir
- persistentVolumeClaim
allowedUnsafeSysctls:
- "kernel.msg*"
forbiddenSysctls:
- "net.ipv4.ip_forward"
在配置完 Pod 安全策略后,需要创建一个 ClusterRoleBinding 对象来将该安全策略绑定到 ServiceAccount 上:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: psp-admin-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: psp-admin
subjects:
- kind: ServiceAccount
name: default
namespace: default
这个例子中创建了一个名为 restrict-privilege 的 PodSecurityPolicy,并将其绑定到了默认的 ServiceAccount 上。这样,在使用该 ServiceAccount 创建 Pod 或 Deployment 时,就会自动应用这个安全策略。




