本页面介绍了如何使用政策控制器限制条件来实现许多与 PodSecurityPolicy 相同的保护措施,以及在强制执行这些政策之前测试政策的附加功能。本文档中的示例并未涵盖所有相关限制条件,但介绍了如何入门。
本文档中介绍的限制条件和限制条件模板的源代码位于 Gatekeeper 项目代码库的 pod-security-policy 目录中。每个限制条件模板也包括单元测试。
准备工作
阻止 Pod 运行特权容器
我们建议阻止 Pod 运行特权容器,因为特权容器可能会影响节点上的主机操作系统或节点上运行的其他工作负载。
此限制条件可使用 K8sPSPPrivilegedContainer
限制条件模板来阻止 Pod 运行特权容器:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPPrivilegedContainer
metadata:
name: psp-privileged-container
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
excludedNamespaces: ["kube-system"]
容器上需要一个只读根文件系统
默认情况下,容器可以写入其根文件系统。除了安全问题外,由于容器可写层中的写入延迟,这可能会导致性能瓶颈。您可以使用 PodSecurityPolicy 或一个限制条件,来要求在容器中使用只读根文件系统。
此限制条件使用 K8sPSPReadOnlyRootFilesystem
限制条件模板。
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPReadOnlyRootFilesystem
metadata:
name: psp-readonlyrootfilesystem
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
限制容器可以装载的卷的类型
默认情况下,容器可以在集群上装载通过 Kubernetes API 注册的任何类型的卷。
此限制条件使用 K8sPSPVolumeTypes
限制条件模板将容器限制为一组有界限的卷类型:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPVolumeTypes
metadata:
name: psp-volume-types
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
volumes:
# - "*" # * can be used to allow all volume types
- configMap
- emptyDir
- projected
- secret
- downwardAPI
- persistentVolumeClaim
#- hostPath #required for allowedHostPaths
- flexVolume #required for allowedFlexVolumes
审核结果
您可以使用 dryrun
强制措施来测试限制条件的有效性,而不会干扰活动工作负载。这样可以为您的政策生成审核结果,而无需主动屏蔽。如需了解详情,请参阅使用限制条件进行审核。