本文主要是介绍kubernetes-资源对象之security context,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考博文 :https://www.jianshu.com/p/ce4d0c866a2c
目录
- 一、kubernetes资源对象之security context
- 1.1、容器级别
- 1.2、Pod级别
- 1.3、PSP集群级别
- 二、应用场景
一、kubernetes资源对象之security context
- Security Context,即安全上下文,用于定义Pod或Container的权限和访问控制。
- Kubernetes 提供了三种配置 Security Context 的方法:
- Container-level Security Context:应用于容器级别
- Pod-level Security Context:应用于Pod级别
- Pod Security Policy:应用于集群级别
1.1、容器级别
- 仅应用到指定的容器上,并且不会影响 Volume;
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
- name: hello-world-container
securityContext:
privileged: true
1.2、Pod级别
应用到 Pod 内所有容器,会影响 Volume;
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
securityContext:
fsGroup: 1234
supplementalGroups: [5678]
seLinuxOptions:
level: "s0:c123,c456"
1.3、PSP集群级别
- PSP 是集群级的 Pod 安全策略,自动为集群内的 Pod 和 Volume 设置 Security Context;
支持的控制项
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(包含) and max(包含) 来定义,指定了被允许的主机端口。
允许的主机路径
- 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:
- '*'
二、应用场景
2.1、自定义对象访问权限
- 也就是上文中提到的自主访问控制(Discretionary Access Control),通过设置 UID 和 GID 来达到限制容器权限的目的。
...
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
...
- 如上这个配置,可以看到 Pod 中所有容器内的进程都是已用户 uid=1000 和主组 gid=3000来运行的,而创建的任何文件的属组都是 groups=2000。通过这样的方法,可以达到让用户的进程不使用默认的 Root (uid=0,gid=0)权限的目的。
这篇关于kubernetes-资源对象之security context的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!