限制在 yaml 配置安全相关的特性.
13.3.1 PodSecurityPolicy 资源介绍
PodSecurityPolicy 是集群级别的资源.
- 维护 PodSecurityPolicy 配置的工作由 API 服务中的 PodSecurityPolicy 准入控制插件完成
注意:
- 需要在 Kubernetes 中启用 PodSecurityPolicy
检视一个 PodSecurityPolicy 样例

13.3.2 了解 runAsUser, fsGroup 和 supplementalGroup 策略
MustRunAs 规则

注意:
- 修改策略对已经存在的 pod 无效
部署 runAsUser 在指定范围之外的 pod
API 服务会拒绝这个 pod:

部署镜像中用户 ID 在指定范围之外的 pod
Dockerfile:

API 服务不会拒绝:

查看用户 ID 和用户组 ID:

PodSecurityPolicy 可以将硬编码覆盖到镜像中的用户 ID.
在 runAsUser 字段中使用 mustRunAsNonRoot 规则

13.3.3 配置允许, 默认添加, 禁止使用的内核功能
以下三个字段会影响容器可以使用的内核功能:
- allowedCapabilities
- defaultAddCapabilities
- requiredDropCapabilities

指定容器中可以添加的内核功能
allowedCapabilities 用于指定 spec 容器的 securityContext.capabilities 中可以添加哪些内核功能.
为所有容器添加内核功能
defaultAddCapabilities 字段中列出的所有内核功能将被添加到每个已部署的 pod 的每个容器中.
禁用容器中的内核功能
requiredDropCapabilities 中列出的内核功能会在所有容器中被禁用.
13.3.4 限制 pod 可以使用的存储卷类型
在最低限度上, 一个 PodSecurityPolicy 需要允许 pod 使用:
- emptyDir
- configMap
- secret
- downwardAPI
- persistentVolumeClaim

13.3.5 对不同的用户与组分配不同的 PodSecurityPolicy
利用 RBAC.
创建一个允许部署特权容器的 PodSecurityPolicy

查看已有的 PodSecurityPolicy:

注意:
PRIV为 true 时表示可以使用特权
使用 RBAC 将不同的 PodSecurityPolicy 分配给不同用户
将不能使用特权的 default 绑定到 psp-default 上:

将能使用特权的 privileged 绑定到 psp-privileged 上:

将 psp-default 绑定到所有被认证的用户所在的组上:
- 避免其他用户无法创建 pod

将 psp-privileged 绑定到用户 Bob 上:

- Alice 现在拥有 default PodSecurityPolicy
- Bob 现在拥有 default 和 privileged PodSecurityPolicy
为 kubectl 创建不同用户

这个创建用户应该了解一下.
使用不同用户创建 pod
以 Alice 身份创建特权 pod:

以 Bob 身份创建 pod:

