Kubernetes 中的 Pod Security Policy 详解

什么是 Pod Security Policy?

Kubernetes 是一个开源的容器编排系统,通过 Pod 实现容器运行。Pod Security Policy(Pod 安全策略)是 Kubernetes 集群的一个安全机制,用于控制 Pod 运行时的安全参数,包括情况下使用哪些容器运行,容器需要的权限和资源使用等。

Pod Security Policy 是在 Kubernetes 1.8 版本引入的,需要通过 admission controller 插件来启用。Kubernetes 中内置了两个 admission controller 插件:PodSecurityPolicy 和 PodSecurityEnforcement。前者用于控制 Pod 安全策略的创建和管理,后者用于在 Pod 创建和更新时审计 Pod 是否符合指定的安全策略。

Pod Security Policy 的主要作用

Pod Security Policy 主要用于增加 Kubernetes 集群的安全性,不仅限于控制运行容器的安全,还可以控制容器之间访问的安全以及应用程序所使用的文件系统、网络和系统调用等方面的安全性。

Pod Security Policy 主要通过以下控制方式增加 Kubernetes 集群的安全性:

  • 控制容器的安全上下文,如容器的用户 ID、组 ID、文件系统权限等。
  • 控制容器访问持久化存储的安全性,如可以访问的存储卷类型、读写权限等。
  • 控制容器之间的访问安全性,如控制容器之间的网络连接和端口的访问等。
  • 控制容器可以使用的系统调用和文件系统目录等。

Pod Security Policy 的主要部分

Pod Security Policy 主要包含以下几个部分:

  • privileged:是否允许容器以特权模式运行。
  • seLinux:是否启用 SElinux 访问控制。
  • runAsUser:运行容器的用户 ID。
  • runAsGroup:运行容器的组 ID。
  • fsGroup:容器中所有进程所属的组 ID。
  • supplementalGroups:容器中所有进程的其他附加组 ID。
  • volumes:允许使用的存储卷类型。
  • allowedCapabilities:容器可以使用的 Linux 系统特权。
  • hostNetwork:容器是否可以使用主机的网络命名空间。
  • hostIPC:容器是否可以使用主机的 IPC 命名空间。
  • hostPID:容器是否可以使用主机的进程命名空间。
  • defaultAddCapabilities:默认情况下容器可以增加的 Linux 系统特权。

Pod Security Policy 的示例代码

下面是一个 Pod Security Policy 的示例代码:

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restricted
spec:
  privileged: false
  seLinux:
    rule: RunAsAny
  runAsUser:
    rule: MustRunAsNonRoot
  supplementalGroups:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  volumes:
  - configMap
  - emptyDir
  - secret
  - downwardAPI
  - persistentVolumeClaim
  hostNetwork: false
  hostIPC: false
  hostPID: false
  allowedCapabilities:
  - NET_BIND_SERVICE
  - SYS_TIME
  defaultAddCapabilities: []

以上示例代码中,定义了一个名为 restricted 的 Pod Security Policy,其中:

  • privileged 字段设置为 false,表示禁止容器以特权模式运行;
  • seLinux 字段设置为 RunAsAny,表示可以以任意 SElinux 策略运行容器;
  • runAsUser 字段设置为 MustRunAsNonRoot,表示必须运行非 root 用户的容器;
  • supplementalGroups 字段设置为 RunAsAny,表示容器的进程可以属于任意组 ID;
  • fsGroup 字段设置为 RunAsAny,表示容器内所有进程所属的组 ID 可以任意指定;
  • volumes 字段设置为 configMap、emptyDir、secret、downwardAPI 和 persistentVolumeClaim,表示容器可以使用这几种存储类型;
  • allowedCapabilities 字段设置为 NET_BIND_SERVICE 和 SYS_TIME,表示容器可以使用这两种 Linux 特权;
  • hostNetwork、hostIPC 和 hostPID 字段都设置为 false,表示不允许容器使用宿主机的网络、IPC 命名空间和进程命名空间;
  • defaultAddCapabilities 字段设置为空数组,表示容器不允许增加任何特权。

总结

Pod Security Policy 是 Kubernetes 集群的一个重要安全机制,通过控制容器的安全上下文、访问持久化存储的安全性、容器之间的访问安全性和可以使用的系统调用和文件系统目录等方面的安全性,可以增加 Kubernetes 集群的安全性,保障应用程序和敏感数据的安全和可靠性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6596a186eb4cecbf2da6c30e


纠错反馈