有没有办法使用Kubernetes运行超级特权容器?

时间:2018-03-21 11:40:50

标签: kubernetes

我希望pod中的所有进程看到相同的网络和进程表,以及与主机进程共享任何IPC。 我知道当我们使用docker时可以利用以下命令。

docker run -it --privileged --ipc=host --net=host --pid=host   \
           -v /:/host -v /run:/run -v /etc/localtime:/etc/localtime   \
           --name privcontainer centos7 /bin/bash

另一方面,有没有办法使用Kubernetes运行超级特权容器? 如果可能的话,我想知道编写pod yaml文件的方法。

2 个答案:

答案 0 :(得分:1)

容器规范的privileged上有SecurityContext个标记。

查看documentation了解详情。

我只能从v1.4文档中找到一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:
  containers:
    - name: hello-world-container
      # The container definition
      # ...
      securityContext:
        privileged: true   ###Here is what you are looking for
        seLinuxOptions:
          level: "s0:c123,c456"

more infos here

我确信你知道,但作为一般警告,特权将删除所有容器安全设置并打开群集以防止潜在的安全漏洞。

答案 1 :(得分:0)

要禁用容器PID的命名空间,从而允许该容器查看主机上的所有进程,您需要在pod规范中指定hostPID: true

如果要从Pod中检查Kubernetes主机,可能会发现此清单很有用:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: debug
spec:
  selector:
    matchLabels:
      app: debug
  template:
    metadata:
      labels:
        app: debug
      name: debug
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      hostNetwork: true
      hostPID: true
      containers:
      - name: linux
        image: alpine
        args:
        - sleep
        - "3600"
        securityContext:
          privileged: true
          runAsGroup: 0
          runAsUser: 0
        volumeMounts:
        - mountPath: /mnt/host
          name: host
      volumes:
      - hostPath:
          path: /
          type: ""
        name: host

这将实例化群集上每个节点(包括对您可见的控制平面节点)上的“调试”窗格。该pod可以访问主机上的所有PID,可以看到其所有网络,并且可以在/mnt/host上浏览节点文件系统。