在GKE下DenyEscalatingExec

时间:2018-03-23 14:20:19

标签: kubernetes google-kubernetes-engine

我们在Kubernetes集群中使用GKE。我们正在运行的其中一个应用程序是Jenkins for CI。不幸的是,Jenkins奴隶需要使用Docker来安装他们的主机docker.sock。这可能是升级漏洞。

解决方案是在API服务器中设置Admission Controller以使用DenyEscalatingExec。但是,对于我的生活,我不能通过GKE弄清楚如何达到那个环境。它甚至可以默认设置,但我无法弄清楚如何获得隐藏在GKE背后的默认设置。

有没有办法通过GKE设置此(和其他控制器),或以其他方式检查默认值以查看它是否已设置?

2 个答案:

答案 0 :(得分:2)

很遗憾,您无法在GKE上更改启用的准入控制器。 Alpha群集支持external admission webhooks但这涉及大量的自定义工作。

另一种选择是使用PodSecurityPolicy仅允许特权Pod在几个紧密的控制器名称空间中运行。例如,您可以创建一个jenkins名称空间,并且只允许在jenkins和kube-system名称空间中创建特权Pod,然后阻止除集群管理员之外的所有用户在这些名称空间中进入Pods。

答案 1 :(得分:0)

您希望以特权模式运行Jenkins CI。但是如果您只想从Jenkins内部调用Docker,则不需要使用Privileged模式,只需将Docker套接字从节点安装到Jenkins容器即可。

spec:
      volumes:
      - name: docker-socket
        hostPath:
          path: /var/run/docker.sock
      containers:
      - name: name
        image: image-location
        volumeMounts:
        - name: docker-socket
          mountPath: /var/run/docker.sock

关于接纳控制器,所有这些都由kube-apiserver二进制提供并在GKE上启用。 From the documentation about GKE:

apiVersion: extensions/v1beta1
kind: PodSecurityPolicy
metadata:
  name: my-psp
spec:
  privileged: false  # Prevents creation of privileged Pods
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  volumes:
  - '*'

您可以在documentation

中找到更多示例