Kubernetes SecurityContext 安全上下文 特权模式运行pod

网友投稿 747 2022-11-02


Kubernetes SecurityContext 安全上下文 特权模式运行pod

使用特权模式运行 pod

有时pod 需要做它们的宿主节点上能够做的任何事,例如操作被保护的系统设备,或使用其他在通常容器中不能使用的内核功能 ,这种 pod 样例就是 kube- proxy pod ,该 pod 需要修改宿主机的 iptables规则 来让k ub ernet es 中的服务规 生效。

使用 kubeadm 部署集群时,你会看到每个节点上都运行了 kube- proxy pod  ,并且可以查 YAML  描述文件中所有使用到的特殊特性。

[root@k8s-master ~]# kubectl get pod kube-proxy-7wgls -n kube-system -o yaml | grep "privileged: true" privileged: true

为获取宿主机内核的完整权限,该 pod 需要在特权模式下运行。这可以通过将容器securityContext 中的 privileged 设置为true实现 可以通过以下代码清单中的YAML文件创建一个特权模式的pod:(这个容器将在特权模式下运行)

[root@k8s-master ~]# cat test.yaml apiVersion: v1 kind: Pod metadata: name: pod-privilegedspec: containers: - name: main image: alpine command: ["/bin/sleep","99999"] securityContext: privileged: true

部署这个 ,然后与之前部署的非特权模式的 pod 做对比, 熟悉 l inux  的读者会知道 inux 中有 个叫作 /d ev 的特殊目录, 该目录包含系统中所有设备对应的设备文件,这些文件不是磁盘上的常规文件,而是用于与设备通信的特殊文, 通过列出/dev目录下文件的方式查看先前部署的非特权模式容器 中的设备,如以下代码清单所示。

非特权pod可用的设备列表:

[root@k8s-master ~]# kubectl get podNAME READY STATUS RESTARTS AGEnginx-6799fc88d8-drb2s 1/1 Running 3 263d[root@k8s-master ~]# kubectl exec -it nginx-6799fc88d8-drb2s shkubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.# ls /devcore fd full mqueue null ptmx pts random shm stderr stdin stdout termination-log tty urandom zero

这个相当短的列表己经列出了全部的设备,将这个列表与下面 列表比较。下 面的列表列出了在特权 pod  中能看到的特权设备。

特权pod可用的设备列表:

[root@k8s-master ~]# kubectl exec -it pod-privileged shkubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead./ # ls /devagpgart mcelog shm tty2 tty39 tty58 vcs3autofs mem snapshot tty20 tty4 tty59 vcs4bsg mqueue snd tty21 tty40 tty6 vcs5btrfs-control net sr0 tty22 tty41 tty60 vcs6core network_latency stderr tty23 tty42 tty61 vcsacpu network_throughput stdin tty24 tty43 tty62 vcsa1cpu_dma_latency null stdout tty25 tty44 tty63 vcsa2crash nvram termination-log tty26 tty45 tty7 vcsa3dm-0 oldmem tty tty27 tty46 tty8 vcsa4dm-1 port tty0 tty28 tty47 tty9 vcsa5dri ppp tty1 tty29 tty48 ttyS0 vcsa6fb0 ptmx tty10 tty3 tty49 ttyS1 vfiofd pts tty11 tty30 tty5 ttyS2 vga_arbiterfull random tty12 tty31 tty50 ttyS3 vhcifuse raw tty13 tty32 tty51 uhid vhost-nethpet rtc0 tty14 tty33 tty52 uinput vmcihwrng sda tty15 tty34 tty53 urandom vsockinput sda1 tty16 tty35 tty54 usbmon0 zerokmsg sda2 tty17 tty36 tty55 vcsloop-control sg0 tty18 tty37 tty56 vcs1mapper sg1 tty19 tty38 tty57 vcs2

由于完整的设备列表过长, 以上没有完整列出所有的设备,但这已经足以证明这个设备列表远远长于之前的列表。 事实上, 特权模式的pod可以看到宿主节点上的所有设备。 这意味着它可以自由使用任何设备。

举个例子, 如果要在树苺派上运行 一 个pod, 用这个pod 来控制相连的LED, 那么必须使用特权模式运行这个pod。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernetes RBAC 内置集群角色ClusterRole
下一篇:Java Stream流之求和的实现
相关文章

 发表评论

暂时没有评论,来抢沙发吧~