当前位置: 首页 > news >正文

k8s pod security context 总结笔记

securityContext 是 Kubernetes 中用于设置 Pod 或容器安全相关设置的重要字段,可以帮助限制 Pod 或容器的权限,提升安全性。

总结下 列出的 securityContext 字段及其含义

1. Pod 级别的 securityContext 配置

在 Pod 的 spec 中定义的 securityContext 适用于整个 Pod 及其所有容器,除非容器级别有自己的 securityContext 覆盖。

字段说明:
  • runAsUser <integer>  机制被动的用户身份运行容器进程,默认以镜像中的USER指定
    解释
    这个字段指定容器进程以哪个用户 ID (UID) 运行。如果镜像中通过 USER 指令指定了用户,Pod 会默认使用该用户运行。如果没有指定,Pod 通常以 root (UID 0) 运行。通过设置 runAsUser,你可以强制容器以某个特定的 UID 运行,例如 runAsUser: 1000,以避免以 root 身份运行,降低权限。
  • runAsGroup <integer> 机制被动的用户组ID运行容器进程,默认以镜像的组ID运行或指定
    解释
    这个字段指定容器进程以哪个组 ID (GID) 运行。类似于 runAsUser,如果镜像中指定了组,Pod 会使用该组 ID。如果没有指定,可以通过 runAsGroup 强制设置,例如 runAsGroup: 1000。
  • supplementalGroups <[] integer> 补充组别到进程的一个补充组别,填加被动的组gid
    解释
    这个字段允许为容器进程添加额外的组 ID(GID),这些组 ID 会被添加到进程的补充组列表中。例如,supplementalGroups: [1001, 1002] 会让进程拥有额外的组权限,通常用于访问特定资源。
  • fsGroup <integer> 共享卷别挂载root身份运行,将挂载权限改为fsGid
    解释
    fsGroup 指定一个组 ID,用于设置 Pod 中共享卷(如 PersistentVolume)的权限。当 Pod 使用共享卷时,Kubernetes 会将卷的组 ID 更改为 fsGroup 指定的 GID,并调整文件权限以确保容器进程可以访问。例如,fsGroup: 1000 会将卷的组 ID 设为 1000。
  • runAsNonRoot <boolean> 将容器以非root身份运行
    解释
    如果设置为 true,Kubernetes 会强制容器以非 root 用户运行。如果容器尝试以 root (UID 0) 运行,Pod 将启动失败。这是一个安全最佳实践,用于防止容器以 root 权限运行,降低潜在的安全风险。
  • selinuxOptions <object> SELINUX 的标签设置
    解释
    这个字段用于设置 SELinux(Security-Enhanced Linux)标签,适用于运行 SELinux 的系统。可以通过 selinuxOptions 指定 SELinux 的用户、角色、类型和级别,例如:

    selinuxOptions:
      user: "system_u"
      role: "system_r"
      type: "container_t"
      level: "s0"
    这可以限制容器对系统资源的访问,增强安全性。
  • sysctl <[] object> 机制用自定义 Pod 名称空间的 sysctl 参数被用系列
    解释
    sysctl 允许设置 Pod 级别的内核参数(sysctl),例如调整网络或内存相关的参数。需要注意的是,只有某些 sysctl 参数是安全的,Kubernetes 限制了可以设置的参数范围。例如:

    sysctl:
      - name: net.core.somaxconn
        value: "1024"
    这会将 net.core.somaxconn 设置为 1024。
  • windowsOptions <object> Windows 标签设置
    解释
    这个字段用于 Windows 容器,允许设置 Windows 特定的安全选项,例如运行时凭据或主机进程设置。Linux 环境下通常不使用此字段。

2. 容器级别的 securityContext 配置

在 Pod 的 spec.containers 中,每个容器可以有自己的 securityContext,它会覆盖 Pod 级别的设置。

字段说明:
  • runAsUser <integer>机制被动的用户身份运行容器进程,默认以镜像中的USER指定
    解释
    与 Pod 级别的 runAsUser 相同,但只适用于当前容器。如果设置了此字段,它会覆盖 Pod 级别的 runAsUser。
  • runAsGroup <integer> 机制被动的用户组ID运行容器进程,默认以镜像的组ID运行或指定
    解释
    与 Pod 级别的 runAsGroup 相同,但只适用于当前容器。
  • runAsNonRoot <boolean> 将容器以非root身份运行
    解释
    与 Pod 级别的 runAsNonRoot 相同,但只适用于当前容器。
  • allowPrivilegeEscalation <boolean> 控制是否允许特权模式升级
    解释
    这个字段控制容器是否允许特权升级(例如通过 setuid 或 setgid 提升权限)。如果设置为 false,容器进程将无法提升权限,即使它以 root 身份运行。这是一个重要的安全设置。
  • capabilities <object> 添加或删除进程的 Linux 特权内核能力
    解释
    capabilities 允许你为容器进程添加或删除 Linux 内核能力(capabilities)。Linux 能力是一种细粒度的权限控制机制,例如 CAP_SYS_ADMIN 允许执行管理操作。
    • add <[] string>:添加能力,例如 add: ["NET_ADMIN"] 允许容器管理网络。
    • drop <[] string>:删除能力,例如 drop: ["ALL"] 删除所有能力,只保留最小的权限。
      示例:
    capabilities:
      add: ["NET_ADMIN"]
      drop: ["SYS_ADMIN"]

  • privileged <boolean> 将容器升为特权模式
    解释
    如果设置为 true,容器将以特权模式运行,拥有几乎所有的主机权限(相当于 root 权限)。这非常不安全,通常不推荐使用,除非有特殊需求(如需要访问主机设备)。
  • procMount <string> 指定容器 procMount 模式,默认值为 DefaultProcMount
    解释
    procMount 控制容器中 /proc 文件系统的挂载方式。默认值是 DefaultProcMount,表示使用默认的 /proc 挂载。如果设置为 UnmaskedProcMount,会暴露更多的 /proc 内容,但可能会增加安全风险。
  • readOnlyRootFilesystem <boolean> 将容器根文件系统挂载为只读系统
    解释
    如果设置为 true,容器的根文件系统将以只读模式挂载,容器无法写入根文件系统。这是一个安全最佳实践,可以防止容器修改关键文件,但需要确保容器有其他可写存储(如临时卷)。
  • selinuxOptions <object> selinux 标签设置
    解释
    与 Pod 级别的 selinuxOptions 相同,但只适用于当前容器。
  • windowsOptions <object>  Windows 标签设置
    解释
    与 Pod 级别的 windowsOptions 相同,但只适用于当前容器。

securityContext 是 Kubernetes 中用于增强 Pod 和容器安全性的重要配置。通过设置 runAsUser、runAsNonRoot、capabilities 等字段,可以有效降低容器权限,防止特权提升,保护集群安全。图中的配置展示了 Pod 和容器级别的常见安全设置,适用于需要限制权限的场景。

相关文章:

  • 自旋锁(C++实现)
  • js中一些便捷用法
  • 记一次表格数据排序优化(一)--排序30000条数据有多卡
  • MySQL基础 [一] - Ubuntu版本安装
  • Cribl 创建Dataset
  • NDK开发:JNI编程基础
  • 【C++】从零实现Json-Rpc框架(2)
  • 基于SpringBoot+Vue实现的二手交易市场平台功能一
  • 流影---开源网络流量分析平台(五)(成果展示)
  • 【Python学习】列表/元组等容器的常用内置函数详解
  • 【漫话机器学习系列】178.多元逻辑回归(Multinomial Logistic Regression)
  • CExercise_05_1函数_3交互式简易计算器
  • 量化交易提醒 - python发送邮件
  • OpenHarmony子系统开发 - DFX(三)
  • 华为TaurusDB、阿里PolarDB与腾讯TDSQL:信创需求下的国产数据库对比分析
  • 嵌入式硬件如何在PADS中将原理图转换为PCB详解
  • 【小沐学Web3D】three.js 加载三维模型(Angular)
  • MySQL 中 COUNT(*)、COUNT(1)、COUNT(字段) 有什么区别?
  • WVP-GB28181摄像头管理平台存在弱口令
  • make_01_Program_02_makefile 如何判断文件在不在