Kubernetes学习笔记-保障集群内节点和网络安全(2)配置节点的安全上下文20220828


除了让pod使用宿主节点的linux命名空间,还可以在pod或所属容器的描述中通过security-context选项配置其他与安全性相关的特性。这个选项可以运行于整个pod,或每个pod中单独的容器。
了解安全上上下文中可以配置的内容
配置安全上下文可以允许你做很多事:

  • 指定容器运行进程中的用户(用户ID)
  • 阻止容器使用root用户运行(容器的默认运行用户通常在其镜像中指定,所以可能需要阻止容器以root用户运行)
  • 使用特权模式运行容器,使其对宿主节点的内核具有完全的访问权限
  • 与以上相反,通过添加或禁用内核功能,配置细粒度的内核访问权限
  • 设置SELinux(Security Enhanced Linux,安全增强型linux)选项,加强对容器的限制
  • 阻止进程写入容器的根文件系统


1)使用指定用户运行容器
为了使用一个与镜像中不同的用户id来运行pod,需要设置该pod的securityContext.runAsUser选项
guest用户id:405


2)阻止容器以root用户运行
yaml文件配置属性
runAsNonRoot:true


3)使用特权模式运行pod
有时pod需要做它们的宿主节点的能做的任何事,如操作被保护的系统设备,或使用其他在通常容器中不能使用的内核功能。
这种pod的一个样例就是kube-proxy pod。为了获取宿主机内核的完整权限,该pod需要在特权模式下运行。可以将容器的securityContext中的privileged设置为true实现。


4)为容器单独添加内核功能
前面介绍了一种给予容器无限力量的方法,一个更加安全的做法就是只给予它使用真正需要的内核功能的权限。kunernetes允许为特定的容器添加内核功能,或禁用部分内核功能,以允许对容器进行更加精细的权限控制,限制攻击者潜入的影响。
如果需要允许容器修改系统时间,可以在容器的capbilities里的add一项名CAP_SYS_TIME的功能。
注意:Linux内核功能的名称通常以CAP_开头。但在pod的spec中指定内核功能时,必须省略CAP_前缀


5)在容器中禁用内核功能
默认情况下容器拥有CAP_CHOWN权限,允许进程修改文件系统中文件的所有者。为了阻止容器此种行为,在yaml中的securityContext.capabilitirs.drop列表中加入此项,以禁用这个修改文件所有者的内核功能。


6)阻止对容器根文件系统的写入
为了安全原因,需要阻止容器中的进程对容器的根文件系统进行写入,仅允许他们写入挂载的存储卷。
将容器的securityContext.readOnlyRootFileSystem设置为true
提示:为了增强安全性,请将在生产环境中运行的容器的readOnlyRootFilesystem选项设置为true
设置pod级别的安全上下文
前面例子都是针对单独的容器设置的安全上下文。这些选项中一部分也可以从pod级别设定(通过pod.spec.securityContext属性)。它们会作为一个pod中的每一个容器默认安全上下文,但是会被容器级别的安全上下文覆盖。下面是pod级别安全上下文独有的内容。


7)容器使用不同用户运行时共享存储卷
之前章节讲的使用存储卷在pod的不同容器中共享数据,可以顺利在一个容器中写入数据,在另一个容器中读出这些数据,前提是这两个容器都以root用户运行,对存储卷中的所有文件拥有全部权限。如果两个不同用户它们不一定能读取或者写入另一个容器的文件。
kunernetes允许为pod中所有容器指定supplemental组,以允许它们无论哪个用户id运行都可以共享文件,可以通过设置以下两个属性设置:

  • fsGroup
  • supplementalGroups
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值