PodSecurityPolicy
是 Kubernetes 中用于实现安全策略的一种机制。它允许集群管理员定义一组规则,并限制运行在集群中的 Pod 的行为,从而增强集群的安全性。以下是一些 PodSecurityPolicy
的示例代码,帮助你了解如何使用它们来保护你的 Kubernetes 集群。
下面是一个简单的 PodSecurityPolicy
示例,它定义了一个基础的策略,限制了容器使用的运行时和特权级别。此政策允许只读文件系统、禁止 root 用户,并确保每个 Pod 只有特定的标签或注解。
apiVersion: security.k8s.io/v1
kind: PodSecurityPolicy
metadata:
name: example-psp
spec:
# 允许的主机网络策略
allowHostNetwork: false
# 是否允许运行在特权模式下
allowedPrivilegeLevels:
- SystemDefault
# 可以使用的安全上下文
requiredDropCapabilities:
- ALL
# 系统默认配置,仅允许 root 用户执行
seLinux:
rule: 'RunAsAny'
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1000
max: 65535
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1000
max: 65535
# 用户必须运行在预定义的组或用户范围内
runAsUser:
rule: 'MustRunAsNonRoot'
ranges:
- min: 1000
max: 2000
接下来是一个更复杂的 PodSecurityPolicy
,它进一步限制了允许的容器镜像、资源使用和网络策略。此政策确保只有特定的 Docker 镜像可以运行,并对 Pod 的 CPU 和内存请求进行更严格的限制。
apiVersion: security.k8s.io/v1
kind: PodSecurityPolicy
metadata:
name: example-advanced-psp
spec:
# 只允许特定的镜像
privileged: false
allowedFlexNamespaces:
- default
volumes:
- configMap
- downwardAPI
hostPorts:
# 拒绝使用主机端口
- min: 0
max: 65535
# 确保 Pod 的资源请求符合最低限制
requiredDropCapabilities:
- ALL
seLinux:
rule: 'RunAsAny'
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1000
max: 65535
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1000
max: 65535
runAsUser:
rule: 'MustRunAsNonRoot'
ranges:
- min: 1000
max: 2000
# 配置资源请求的最低限制
volumes:
- configMap
- downwardAPI
hostPorts:
- min: 80
max: 80
podSecurity标准:
- 'mustRunAsNonRoot'
- 'mustRunAsGroupRange(1000,65535)'
在接下来的示例中,我们将重点放在了网络方面。这个 PodSecurityPolicy
确保 Pod 只能访问特定的 IP 地址和端口,并且只能从允许的网络范围发送流量。
apiVersion: security.k8s.io/v1
kind: PodSecurityPolicy
metadata:
name: example-network-psp
spec:
# 允许的主机网络策略
allowHostNetwork: false
allowedHostPorts:
- min: 0
max: 65535
privileged: false
seLinux:
rule: 'RunAsAny'
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1000
max: 65535
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1000
max: 65535
runAsUser:
rule: 'MustRunAsNonRoot'
ranges:
- min: 1000
max: 2000
# 网络策略
podSecurity标准:
- 'mustAllowIngressFromPodSelector(allowlist)'
- 'mustAllowEgressToPodSelector(blocklist)'
这些示例展示了如何创建和配置 PodSecurityPolicy
,以确保集群中的 Pod 遵循一定的安全规则。通过这种方式,管理员可以更好地控制容器的行为,从而增强整个系统的安全性。
以上提供的示例代码可以帮助你开始构建符合特定需求的 PodSecurityPolicy
。实际应用中可能需要根据具体环境和需求进行调整,确保所有 Kubernetes 实践者都遵循一致的安全标准。