【问题标题】:How to write to a file under sysfs from Kubernetes pod?如何从 Kubernetes pod 写入 sysfs 下的文件?
【发布时间】:2021-07-27 18:34:08
【问题描述】:

我想从 pod 开始 RAID integrity check。为此,我需要在 /sys/block/mdX/md/sync_action 文件中写入一些数据。我不想使用特权容器。所以,到目前为止,我已经尝试过以下事情。

  1. 为用户设置访问控制并设置在securityContext下面

        securityContext:
          runAsUser: some-user-id
          runAsGroup: some-user-gid
    
    

    但是,setfacl 不适用于此文件(相同的命令适用于我系统中的其他文件)

    [root@hpe ~]# setfacl -m 'u:some-user:rw' /sys/class/block/md0/md/sync_action
    setfacl: /sys/class/block/md0/md/sync_action: Invalid argument
    
  2. 更改文件的所有权并使用上述 securityContext 运行 pod

    [root@hpe]# ls -l /sys/class/block/md0/md/sync_action
    -rw-r--r-- 1 some-user root 4096 Jul 26 12:16 /sys/class/block/md0/md/sync_action
    

    但是,这也行不通

    [root@hpe ~]# kubectl exec -it centos -- bash
    bash-4.2$ ls -l /sys/class/block/md0/md/sync_action
    -rw-r--r-- 1 997 root 4096 Jul 27 03:28 /sys/class/block/md0/md/sync_action
    bash-4.2$ echo "check" > /sys/class/block/md0/md/sync_action
    bash: /sys/class/block/md0/md/sync_action: Read-only file system
    

【问题讨论】:

  • 这看起来不像是通常在 Kubernetes 中运行的工作负载;通常容器化进程无法直接访问主机硬件设备。 (如果您可以直接访问主机硬盘,那么您可以绕过几乎所有其他关于您的进程可以做什么的限制。)直接在主机系统上而不是在容器中运行它是否更有意义?

标签: kubernetes kubernetes-pod


【解决方案1】:

我看到/sys 在容器使用主机网络时变为只读状态。

虽然有时kube-system 中的kube-proxy 容器也在特权模式下运行。

您可以尝试在特权模式下运行您的 PODcontainer

对于pod,您可以更新

 securityContext:
  privileged: true

另外,如果 kubectl exec 不允许转到 Node,您可以尝试更改 docker 容器中的用户并尝试直接访问容器并尝试使用root用户调试一次。

您是使用 Jessie 还是 alpine 作为容器中的基础图像?

【讨论】:

    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 2019-08-01
    • 2018-11-16
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    相关资源
    最近更新 更多