Black lives matter.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
PodSecurityPolicy
类型的对象能够控制,是否可以向 Pod 发送请求,该 Pod 能够影响被应用到 Pod 和容器的 SecurityContext
。
查看 Pod 安全策略建议 获取更多信息。
Pod 安全策略 是集群级别的资源,它能够控制 Pod 运行的行为,以及它具有访问什么的能力。
PodSecurityPolicy
对象定义了一组条件,指示 Pod 必须按系统所能接受的顺序运行。
它们允许管理员控制如下方面:
控制面 | 字段名称 |
---|---|
已授权容器的运行 | privileged |
为容器添加默认的一组能力 | defaultAddCapabilities |
为容器去掉某些能力 | requiredDropCapabilities |
容器能够请求添加某些能力 | allowedCapabilities |
控制卷类型的使用 | volumes |
主机网络的使用 | hostNetwork |
主机端口的使用 | hostPorts |
主机 PID namespace 的使用 | hostPID |
主机 IPC namespace 的使用 | hostIPC |
主机路径的使用 | allowedHostPaths |
容器的 SELinux 上下文 | seLinux |
用户 ID | runAsUser |
配置允许的补充组 | supplementalGroups |
分配拥有 Pod 数据卷的 FSGroup | fsGroup |
必须使用一个只读的 root 文件系统 | readOnlyRootFilesystem |
Pod 安全策略 由设置和策略组成,它们能够控制 Pod 访问的安全特征。这些设置分为如下三类:
range
。使用该范围内的第一个值作为默认值。验证是否不在配置的该范围内。runAsUser
值,或在镜像中定义了 USER
环境变量。不提供默认值。runAsUser
。seLinuxOptions
。默认使用 seLinuxOptions
。验证 seLinuxOptions
。seLinuxOptions
ID。supplementalGroups
ID。fsGroup
ID。通过设置 PSP 卷字段,能够控制具体卷类型的使用。当创建一个卷的时候,与该字段相关的已定义卷可以允许设置如下值:
对新的 PSP,推荐允许的卷的最小集合包括:configMap、downwardAPI、emptyDir、persistentVolumeClaim、secret 和 projected。
empty
。HostPortRange
列表通过 min
(包含) and max
(包含) 来定义,指定了被允许的主机端口。包含 PodSecurityPolicy
的 许可控制,允许控制集群资源的创建和修改,基于这些资源在集群范围内被许可的能力。
许可使用如下的方式为 Pod 创建最终的安全上下文:
如果某个策略能够匹配上,该 Pod 就被接受。如果请求与 PSP 不匹配,则 Pod 被拒绝。
Pod 必须基于 PSP 验证每个字段。
在一个文件中定义 PodSecurityPolicy 对象实例。这里的策略只是用来禁止创建有特权 要求的 Pods。
policy/example-psp.yaml
|
---|
|
使用 kubectl 执行创建操作:
kubectl-admin create -f example-psp.yaml
获取已存在策略列表,使用 kubectl get
:
$ kubectl get psp
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
permissive false [] RunAsAny RunAsAny RunAsAny RunAsAny false [*]
privileged true [] RunAsAny RunAsAny RunAsAny RunAsAny false [*]
restricted false [] RunAsAny MustRunAsNonRoot RunAsAny RunAsAny false [emptyDir secret downwardAPI configMap persistentVolumeClaim projected]
通过交互方式修改策略,使用 kubectl edit
:
$ kubectl edit psp permissive
该命令将打开一个默认文本编辑器,在这里能够修改策略。
一旦不再需要一个策略,很容易通过 kubectl
删除它:
$ kubectl delete psp permissive
podsecuritypolicy "permissive" deleted
为了能够在集群中使用 Pod 安全策略,必须确保满足如下条件:
extensions/v1beta1/podsecuritypolicy
(仅对 1.6 之前的版本)PodSecurityPolicy
在 Kubernetes 1.5 或更新版本,可以使用 PodSecurityPolicy 来控制,对基于用户角色和组的已授权容器的访问。访问不同的 PodSecurityPolicy 对象,可以基于认证来控制。基于 Deployment、ReplicaSet 等创建的 Pod,限制访问 PodSecurityPolicy 对象,Controller Manager 必须基于安全 API 端口运行,并且不能够具有超级用户权限。
PodSecurityPolicy 认证使用所有可用的策略,包括创建 Pod 的用户,Pod 上指定的服务账户(Service Account)。当 Pod 基于 Deployment、ReplicaSet 创建时,它是创建 Pod 的 Controller Manager,所以如果基于非安全 API 端口运行,允许所有的 PodSecurityPolicy 对象,并且不能够有效地实现细分权限。用户访问给定的 PSP 策略有效,仅当是直接部署 Pod 的情况。更多详情,查看 PodSecurityPolicy RBAC 示例,当直接部署 Pod 时,应用 PodSecurityPolicy 控制基于角色和组的已授权容器的访问 。