HOME

PodSecurityPolicies示例代码

介绍

PodSecurityPolicy 是 Kubernetes 中用于实现安全策略的一种机制。它允许集群管理员定义一组规则,并限制运行在集群中的 Pod 的行为,从而增强集群的安全性。以下是一些 PodSecurityPolicy 的示例代码,帮助你了解如何使用它们来保护你的 Kubernetes 集群。

示例 1:基本的 PodSecurityPolicy

下面是一个简单的 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

示例 2:高级 PodSecurityPolicy

接下来是一个更复杂的 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)'

示例 3:网络策略

在接下来的示例中,我们将重点放在了网络方面。这个 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 实践者都遵循一致的安全标准。