目前有个需求,需要修改k8s里的应用的系统时间来进行一些业务场景的测试。
但直接在pod里执行date -s 日期时,告知没有这个权限,不允许权限操作。如果需要实现在kubernetes修改容器时间,则需要设置增加sys_time的capabilities
这里涉及容器里的Container Capabilities
Linux Capabilities
说着Capabilities 则要说一下Linux Capabilities
kernel 2.2 之后Linux 以capabilities区分不同单元的关联root特权。非root进程都去检查对应的capabilities。
当前设置系统时间,那么就需要CAP_SYS_TIME capabilities
而Docker与宿主机之间的安全关系,Docker默认的root权限会比宿主机的root用户少很多,来进行必要的安全隔离管理。
如果希望获取一些特殊的权限,可通过--cap-add 和 --cap-drop 参数来调整。
下面的Capabilities可参考给容器添加对应的权限
Kubernetes Capabilities 配置
添加到pod的定义 spec.containers.sercurityContext.capabilities
apiVersion: v1
kind: Pod
metadata:
name: app-systime-demo
spec:
containers:
- name: app-systime-demo
image: busybox
securityContext:
capabilities:
add:
- SYS_TIME
kubectl apply -f app-systime-demo.yaml