Kubernetes特权Pod (privileged Pod) 是一种特殊运行Pod:
- 运行在
privileged
模式下的容器,能够完全访问物理节点内核(full access to the node's kernel) - 可以仔细地通过屏蔽掉特定能力来授权以限制容器的特权
- 通过定义一些安全相关特性,例如
runAsUser
/RunAsNonRoot
等
要运行 privileged pod,只需要在容器配置的 securityContext
部分设置 privileged: true
:
k8s_privileged_pod/privileged-pod-1.yaml
- 创建测试pod:
k8s_privileged_pod/create_privileged-pod
- 当上述测试pod运行正常后,进入该pod:
k8s_privileged_pod/exec_privileged-pod
- 然后在这个
privileged
pod中检查容器能力:
k8s_privileged_pod/capsh_privileged-pod
输出可以看到:
k8s_privileged_pod/capsh_privileged-pod_output
Note
虽然配置 privileged: false
和 allowPrivilegedEscalation: false
,但是实际上 pod 还是会有一些privileges的
- 创建
non-privileged
pod:
k8s_privileged_pod/privileged-pod-2.yaml
- 运行:
k8s_privileged_pod/create_non-privileged-pod
- 然后在这个
non-privileged
pod中检查容器能力:
k8s_privileged_pod/capsh_privileged-pod
则输出内容明显降低了能力:
k8s_privileged_pod/capsh_non-privileged-pod_output
最严格的是 drop: ALL
的 non-privileged
pod:
- 创建
drop ALL
的non-privileged
pod
k8s_privileged_pod/privileged-pod-3.yaml
- 运行:
k8s_privileged_pod/create_drop_all_non-privileged-pod
在这个 drop ALL的 non-privileged pod中,可以看到没有任何能力
k8s_privileged_pod/capsh_drop_all_non-privileged-pod_output
此时容器中不能安装rpm包,不能删除文件
- 以 1000 uid 运行的容器配置:
k8s_privileged_pod/privileged-pod-4.yaml
进一步,可以给容器一些特定的权限,例如允许调整进程的nice值:
k8s_privileged_pod/privileged-pod-5.yaml
Note
总之,调整比较细节,可以进一步参考原文 Kubernetes Privileged Pod Practical Examples