kubernetes-资源对象之security context
2021/7/11 6:07:20
本文主要是介绍kubernetes-资源对象之security context,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录参考博文 :https://www.jianshu.com/p/ce4d0c866a2c
- 一、kubernetes资源对象之security context
- 1.1、容器级别
- 1.2、Pod级别
- 1.3、PSP集群级别
- 二、应用场景
- 2.1、自定义对象访问权限
一、kubernetes资源对象之security context
- Security Context,即安全上下文,用于定义Pod或Container的权限和访问控制。
- Kubernetes 提供了三种配置 Security Context 的方法:
- Container-level Security Context:应用于容器级别
- Pod-level Security Context:应用于Pod级别
- Pod Security Policy:应用于集群级别
-
安全上下文(Security Context)定义 Pod 或 Container 的特权与访问控制设置。安全上下文包括但不限于:
- 自主访问控制(Discretionary Access Control):基于用户 ID(UID)和组 ID(GID)来判定对对象(例如文件)的访问权限。
- 安全性增强的 Linux(SELinux):为对象赋予安全性标签。
- 以特权模式或者非特权模式运行。
- Linux 权能:为进程赋予 root 用户的部分特权而非全部特权。
- AppArmor:使用程序框架来限制个别程序的权能。
- Seccomp:过滤进程的系统调用。
- AllowPrivilegeEscalation:控制进程是否可以获得超出其父进程的特权。 此布尔值直接控制是否为容器进程设置 no_new_privs 标志。当容器以特权模式运行或者具有 CAP_SYS_ADMIN 权能时,AllowPrivilegeEscalation 总是为 true。
- readOnlyRootFilesystem:以只读方式加载容器的根文件系统。
-
SecurityContext 可以应用于 Container 和 Pod 维度:
- 在 Pod 上设置的安全性配置会应用到 Pod 中所有 Container 上,并且会还会影响 Volume
- 在 Container 上设置的安全性配置仅适用于该容器本身,不会影响到其他容器以及 Pod 的 Volume
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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-30K8s 容器的定向调度与亲和性
- 2024-10-28云原生周刊:K8s未来三大发展方向 丨2024.10.28
- 2024-10-25亚马逊弹性Kubernetes服务(EKS)实战:轻松搭建Kubernetes平台
- 2024-10-22KubeSphere 最佳实战:Kubernetes 部署集群模式 Nacos 实战指南
- 2024-10-10K8sGPT+Ollama:一个免费的Kubernetes自动诊断工具
- 2024-10-10Kubernetes:容器技术和所谓的“丢失”的SIGTERM信号(终止信号)
- 2024-10-08在 Azure Kubernetes 上运行 Ollama
- 2024-09-2610 个你不知道自己需要的 Kubernetes 工具
- 2024-09-25MicroK8s 概览 — 使用一条命令部署自己的 Kubernetes 集群
- 2024-08-19云原生周刊:Kubernetes v1.31 发布