背景
- docker运行的容器 允许特权容器 会带来安全隐患
- 共享宿主机的网络空间 容器的配置 可能会影响宿主机 可能带来安全风险
- 如果容器用不到这些特权 应该给予关闭
- 不允许管理员权限 以普通权限运行程序
Pod及容器的安全上下文
- 一组用来决定容器是如何创建和运行的约束条件,这些条件代表创建和运行容器时使用的运行时参数
- 给了用户 为Pod或容器定义特权和访问控制机制
Pod和容器的安全上下文设置主要包括以下几个方面
- 自主访问控制DAC
- 容器进程运行身份及资源访问权限
- Linux Capabilities
- seccomp
- AppArmor
- SELinux
- Privilgege Mode
- Privilege Escalation
- Kubernetes支持在Pod及容器级别分别使用安全上下文
容器进程运行身份及资源访问权限
- 容器内部可 开发管理员账号
- 容器中普通用户的身份 可以监听tomcat 8080 但是nginx 80不行
- 非管理员账号不能监听1024 以内的端口
Linux Capabilities
生产环境中建议使用
让tomcat(普通用户运行的)监听 80端口
示例
参考文档
设定在容器级别的
# Maintainer: MageEdu <mage@magedu.com>
# # URL: http://www.magedu.com
apiVersion: v1
kind: Pod
metadata:
name: securitycontext-capabilities-demo
namespace: default
spec:
containers:
- name: demo
image: ikubernetes/demoapp:v1.0
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c"]
args: ["/sbin/iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80 && /usr/bin/python3 /usr/local/bin/demo.py"]
securityContext:
capabilities:
add: ['NET_ADMIN']
#drop: ['CHOWN']
NET_ADMIN 赋予用户 网络管理能力
参数介绍
hostNetwork bool类型 是否共享宿主机的网络空间 hostPID bool类型 是否共享宿主机的PID空间 NET_ADMIN 赋予用户 网络管理能力
例如 node-exporter监控 需要开启以上hostNetwork hostPID