PodSecurityPolicy

PodSecurityPolicy 概述

  • PodSecurityPolicy 是集群级别资源限制,因此无需指定 namespace
  • 简称 PSP
  • 相当于对应 pod.spec.securityContext

注意事项:

  • 默认k8s并未启动PSP准入控制器,如果单纯的启动了PSP,那在之前在k8s中运行的pod将会收到很大限制 寸步难行

    • 如果要启动,需在api-server启动选项中指定
  • 目前 PSP 为 v1beta1,所以一般不使用

PodSecurityPolicy Explain

apiVersion: policy/v1beta1  # PSP资源所属的API群组及版本
kind: PodSecurityPolicy  # 资源类型标识
metadata:
  name <string>  # 资源名称
spec:  
  allowPrivilegeEscalation  <boolean>  # 是否允许权限升级
  allowedCSIDrivers <[]Object>  #内联CSI驱动程序列表,必须在Pod规范中显式定义
  allowedCapabilities <[]string>  # 允许使用的内核能力列表,“*”表示all
  allowedFlexVolumes <[]Object>  # 允许使用的Flexvolume列表,空值表示“all
  allowedHostPaths <[]Object>  # 允许使用的主机路径列表,空值表示all
  allowedProcMountTypes <[]string> # 允许使用的ProcMountType列表,空值表示默认
  allowedUnsafeSysctls <[]string> # 允许使用的非安全sysctl参数,空值表示不允许
  defaultAddCapabilities  <[]string>  # 默认即添加到Pod对象的内核能力,可被drop
  defaultAllowPrivilegeEscalation <boolean> # 是否默认允许内核权限升级
  forbiddenSysctls  <[]string> # 禁止使用的sysctl参数,空表示不禁用
  fsGroup <Object>  # 允许在SecurityContext中使用的fsgroup,必选字段
    rule <string>  # 允许使用的FSGroup的规则,支持RunAsAny和MustRunAs
    ranges <[]Object> # 允许使用的组ID范围,需要与MustRunAs规则一同使用
      max  <integer>  # 最大组ID号
      min  <integer>  # 最小组ID号
  hostIPC <boolean> # 是否允许Pod使用hostIPC
  hostNetwork <boolean> # 是否允许Pod使用hostNetwork
  hostPID <boolean> # 是否允许Pod使用hostPID
  hostPorts <[]Object>  # 允许Pod使用的主机端口暴露其服务的范围
    max  <integer>  # 最大端口号,必选字段
    min  <integer>  # 最小端口号,必选字段
  privileged  <boolean>  # 是否允许运行特权Pod
  readOnlyRootFilesystem  <boolean>  # 是否设定容器的根文件系统为“只读”
  requiredDropCapabilities <[]string> # 必须要禁用的内核能力列表  
  runAsGroup  <Object>  # 允许Pod在runAsGroup中使用的值列表,未定义表示不限制
  runAsUser <Object> # 允许Pod在runAsUser中使用的值列表,必选字段
    rule <string>  # 支持RunAsAny、MustRunAs和MustRunAsNonRoot
    ranges <[]Object> # 允许使用的组ID范围,需要跟“MustRunAs”规则一同使用
      max  <integer>  # 最大组ID号
      min  <integer>  # 最小组ID号
  runtimeClass <Object> # 允许Pod使用的运行类,未定义表示不限制
    allowedRuntimeClassNames <[]string> # 可使用的runtimeClass列表,“*”表示all
    defaultRuntimeClassName <string> # 默认使用的runtimeClass
  seLinux <Object> # 允许Pod使用的selinux标签,必选字段
    rule <string>  # MustRunAs表示使用seLinuxOptions定义的值;RunAsAny表示可使用任意值
    seLinuxOptions  <Object>  # 自定义seLinux选项对象,与MustRunAs协作生效
  supplementalGroups  <Object> # 允许Pod在SecurityContext中使用附加组,必选字段  volumes <[]string>  # 允许Pod使用的存储卷插件列表,空表示禁用,“*”表示全部