本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发、订阅专栏!
专栏订阅入口
| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |
往期精彩文章
【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法
目录
三、为 Container 设置 Security Context
一、基本介绍
在 Kubernetes 中,Security Context(安全上下文)是一种重要的安全机制。
Security Context 通过定义 Pod 或 Pod 内容器的权限来控制容器的运行方式,从而限制不必要的访问、增强容器的安全性。
Security Context 包括但不限于以下配置字段:
- AllowPrivilegeEscalation:用于控制进程是否可以获得比其父进程更多的权限
- appArmorProfile:用于定义容器使用的 AppArmor 选项,限制单个程序的功能
- capabilities:用于控制运行容器时要添加或删除的功能
- privileged:用于控制容器是否以特权模式运行
- procMount:用于定义容器的 proc 挂载的类型
- readOnlyRootFilesystem:用于控制容器是否以只读方式挂载根文件系统
- runAsGroup:用于定义运行容器进程入口点的 GID
- runAsNonRoot:用于控制容器是否以非 root 用户身份运行
- runAsUser:用于定义运行容器进程入口点的 UID
- seLinuxOptions:用于定义容器的 SELinux 上下文,为对象分配安全标签
- seccompProfile:用于定义容器使用的 Seccomp 选项,过滤进程的系统调用
官方文档:Configure a Security Context for a Pod or Container | Kubernetes
API 文档:SecurityContext v1 core | Kubernetes API Reference Docs
二、为 Pod 设置 Security Context
1、资源清单(示例)
apiVersion: v1
kind: Pod
metadata:
name: demo-security-context
spec:
containers:
- name: demo1
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
containers:
- name: demo2
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
volumeMounts:
- name: data
mountPath: /data/demo
volumes:
- name: data
emptyDir: {}
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
supplementalGroups: [4000]
2、
配置示例说明
runAsUser
字段:对于 Pod 内任意容器,其所有进程的用户(user) ID 为 1000- 如果省略
runAsUser
字段,则容器的用户 ID 为 0(root)
- 如果省略
runAsGroup
字段:对于 Pod 内任意容器,其所有进程的主组(primary group) ID 为 3000- 容器中创建的任何文件将归属于用户 1000 和组 3000
- 如果省略
runAsGroup
字段,则容器的主组 ID 为 0(root)
fsGroup
字段:对于 Pod 内任意容器,其所有进程是补充组(supplementary group) ID 2000 的一部分/data/demo
卷以及在该卷中创建的任何文件将归属于组 2000
supplementalGroups
字段:对于 Pod 内任意容器,其所有进程是指定组(specified group) ID 4000 的一部分- 如果省略
supplementalGroups
字段,则表示为空
- 如果省略
三、为 Container 设置 Security Context
1、资源清单(示例)
apiVersion: v1
kind: Pod
metadata:
name: demo-security-context
spec:
containers:
- name: demo1
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
securityContext:
privileged: true # 容器以特权模式运行
capabilities: # 添加或删除功能
add / drop:
- SYS_TIME / SYS_PTRACE / SYS_ADMIN
allowPrivilegeEscalation: false
containers:
- name: demo2
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
volumeMounts:
- name: data
mountPath: /data/demo
volumes:
- name: data
emptyDir: {}
2、
配置示例说明
- Container Security Context 仅针对指定的 Container 生效
- 示例中 demo1 容器配置的 Security Context 不会对 demo2 容器生效
- Container Security Context 的优先级高于 Pod Security Context,Pod Security Context 下相同的配置会被覆盖