目前有個需求,需要修改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