Security Context,即安全上下文,用于定义Pod或Container的权限和访问控制。
Kubernetes 提供了三种配置 Security Context 的方法:
- Container-level Security Context:应用于容器级别
- Pod-level Security Context:应用于Pod级别
- Pod Security Policy:应用于集群级别
容器级别
仅应用到指定的容器上,并且不会影响 Volume。
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
- name: hello-world-container
securityContext:
privileged: true
Pod级别
应用到 Pod 内所有容器,会影响 Volume。
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
securityContext:
fsGroup: 1234
supplementalGroups: [5678]
seLinuxOptions:
level: "s0:c123,c456"
PSP,集群级别
PSP 是集群级的 Pod 安全策略,自动为集群内的 Pod 和 Volume 设置 Security Context。
支持的控制项
privileged | 运行特权容器 |
---|---|
defaultAddCapabilities | 可添加到容器的 Capabilities |
requiredDropCapabilities | 会从容器中删除的 Capabilities |
allowedCapabilities | 允许使用的 Capabilities 列表 |
volumes | 控制容器可以使用哪些 volume |
hostNetwork | 允许使用 host 网络 |
hostPorts | 允许的 host 端口列表 |
hostPID | 使用 host PID namespace |
hostIPC | 使用 host IPC namespace |
seLinux | SELinux Context |
runAsUser | user ID |
supplementalGroups | 允许的补充用户组 |
fsGroup | volume FSGroup |
readOnlyRootFilesystem | 只读根文件系统 |
allowedHostPaths | 允许 hostPath 插件使用的路径列表 |
allowedFlexVolumes | 允许使用的 flexVolume 插件列表 |
allowPrivilegeEscalation | 允许容器进程设置 |
defaultAllowPrivilegeEscalation | 默认是否允许特权升级 |
RunAsUser
-
MustRunAs - 必须配置一个
range
。使用该范围内的第一个值作为默认值。验证是否不在配置的该范围内。 -
MustRunAsNonRoot - 要求提交的 Pod 具有非零
runAsUser
值,或在镜像中定义了USER
环境变量。不提供默认值。 -
RunAsAny - 没有提供默认值。允许指定任何
runAsUser
。
SELinux
-
MustRunAs - 如果没有使用预分配的值,必须配置
seLinuxOptions
。默认使用seLinuxOptions
。 -
RunAsAny - 没有提供默认值。允许任意指定的
seLinuxOptions
ID。
SupplementalGroups
- MustRunAs - 至少需要指定一个范围。默认使用第一个范围的最小值。
-
RunAsAny - 没有提供默认值。允许任意指定的
supplementalGroups
ID。
FSGroup
- MustRunAs - 至少需要指定一个范围。默认使用第一个范围的最小值。
-
RunAsAny - 没有提供默认值。允许任意指定的
fsGroup
ID。
主机网络
-
HostPorts , 默认为
empty
。HostPortRange
列表通过min
(包含) andmax
(包含) 来定义,指定了被允许的主机端口。
允许的主机路径
- AllowedHostPaths 是一个被允许的主机路径前缀的白名单。空值表示所有的主机路径都可以使用。
控制卷
通过设置 PSP 卷字段,能够控制具体卷类型的使用。
apiVersion: extensions/v1beta1
kind: PodSecurityPolicy
metadata:
name: permissive
spec:
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
hostPorts:
- min: 8000
max: 8080
volumes:
- '*'
网友评论