kubernetes-安全上下文介绍、配置示例、参数解释

73 阅读2分钟

背景

  • 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端口

示例

参考文档

github.com/iKubernetes…

设定在容器级别的

# 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 赋予用户 网络管理能力

image.png

参数介绍

hostNetwork bool类型 是否共享宿主机的网络空间 hostPID bool类型 是否共享宿主机的PID空间 NET_ADMIN 赋予用户 网络管理能力

例如 node-exporter监控 需要开启以上hostNetwork hostPID