我有一个在 kubernetes 集群中以特权模式运行的守护程序集。这是守护程序集的 YAML 规范。
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: my-daemon
spec:
template:
metadata:
labels:
app: my-daemon
spec:
hostNetwork: true
serviceAccountName: my-sa-account
containers:
- name: my-daemon
image: akhilerm/my-daemon:0.5
imagePullPolicy: Always
securityContext:
privileged: true
...
...
我没有使用privileged:true
,而是转向 linux 功能以授予对 DaemonSet 的权限。因此,我将所有 linux 功能添加到容器中并删除了privileged:true
. 这是新的 YAML 规范
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: my-daemon
spec:
template:
metadata:
labels:
app: my-daemon
spec:
hostNetwork: true
serviceAccountName: my-sa-account
containers:
- name: my-daemon
image: akhilerm/my-daemon:0.5
imagePullPolicy: Always
securityContext:
capabilities:
add: ["NET_BROADCAST", "NET_ADMIN", ..all CAPs..,"SYS_ADMIN"]
...
...
但是当与 linux 功能一起使用时,守护进程的行为并不像预期的那样。在这两种情况下,/proc/1/status
容器内的权限位图都是相同的。
...
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000000004
SigCgt: 0000000000014002
CapInh: 0000003fffffffff
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
...
在 kubernetes 中使用带有 pod 的 linux 功能时,我还需要设置更多字段或权限吗?