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-privileged
spec: 
  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 pod
NAME                     READY   STATUS              RESTARTS   AGE
nginx-6799fc88d8-drb2s   1/1     Running             3          263d

[root@k8s-master ~]# kubectl exec -it nginx-6799fc88d8-drb2s  sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
# ls /dev
core  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  sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # ls /dev
agpgart             mcelog              shm                 tty2                tty39               tty58               vcs3
autofs              mem                 snapshot            tty20               tty4                tty59               vcs4
bsg                 mqueue              snd                 tty21               tty40               tty6                vcs5
btrfs-control       net                 sr0                 tty22               tty41               tty60               vcs6
core                network_latency     stderr              tty23               tty42               tty61               vcsa
cpu                 network_throughput  stdin               tty24               tty43               tty62               vcsa1
cpu_dma_latency     null                stdout              tty25               tty44               tty63               vcsa2
crash               nvram               termination-log     tty26               tty45               tty7                vcsa3
dm-0                oldmem              tty                 tty27               tty46               tty8                vcsa4
dm-1                port                tty0                tty28               tty47               tty9                vcsa5
dri                 ppp                 tty1                tty29               tty48               ttyS0               vcsa6
fb0                 ptmx                tty10               tty3                tty49               ttyS1               vfio
fd                  pts                 tty11               tty30               tty5                ttyS2               vga_arbiter
full                random              tty12               tty31               tty50               ttyS3               vhci
fuse                raw                 tty13               tty32               tty51               uhid                vhost-net
hpet                rtc0                tty14               tty33               tty52               uinput              vmci
hwrng               sda                 tty15               tty34               tty53               urandom             vsock
input               sda1                tty16               tty35               tty54               usbmon0             zero
kmsg                sda2                tty17               tty36               tty55               vcs
loop-control        sg0                 tty18               tty37               tty56               vcs1
mapper              sg1                 tty19               tty38               tty57               vcs2
由于完整的设备列表过长, 以上没有完整列出所有的设备,但这已经足以证明这个设备列表远远长于之前的列表。 事实上, 特权模式的pod可以看到宿主节点上的所有设备。 这意味着它可以自由使用任何设备。
举个例子, 如果要在树苺派上运行 个pod, 用这个pod 来控制相连的LED, 那么必须使用特权模式运行这个pod。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值