k8s集群 修改pod中容器的时间

问题

当需要测试某些功能时,需要修改系统时间,当进入pod的容器之后,执行date命令报错!!!

root@world-106-5bb9785bd8-7rlmd:/app# date -s 23:50:00
date: cannot set date: Operation not permitted
Thu 01 Apr 2021 11:50:00 PM CST

原因

k8s集群底层的容器技术是基于docker(大部分)来实现的,而docker的安全隔离是基于Linux的Capaility机制实现的。Capaility机制将系统的权限划分成多个不同的小单元,通过启用或者禁用这些单元,来赋予或剥夺相应的权限。

而docker容器只用到了以下的Capability

╭─[16:29:44] yup@YP-7-15 ~
╰─$docker run -it centos capsh --print
Current: = 
cap_chown
cap_dac_override
cap_fowner
cap_fsetid
cap_kill
cap_setgid
cap_setuid
cap_setpcap
cap_net_bind_service
cap_net_raw
cap_sys_chroot
cap_mknod
cap_audit_write
cap_setfcap+eip

而修改系统时间需要有SYS_TIME权限,但docker容器默认没有,因此无法在pod的容器中修改时间

解决

参考官方文档

为pod或容器配置安全性上下文(Security Context) 安全上下文设置的完整列表

在容器生成的模板文件中增加以下参数

 # deploy.spec.template.spec.containers.securityContext
 
 securityContext:
          capabilities:
            add:
            - SYS_TIME 

删除旧有的pod,利用新的模板生成pod,进行系统时间的修改,可以发现修改成功

root@world-106-5bb9785bd8-7rlmd:/app# date -s 23:50:00
Thu 01 Apr 2021 23:50:00 PM CST 

注意

这样修改pod中容器的时间,会修改到宿主机的时间,可能会影响到该宿主机上面其他业务的运行。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐