我们在Kubernetes集群中使用GKE。我们正在运行的其中一个应用程序是Jenkins for CI。不幸的是,Jenkins奴隶需要使用Docker来安装他们的主机docker.sock
。这可能是升级漏洞。
解决方案是在API服务器中设置Admission Controller以使用DenyEscalatingExec
。但是,对于我的生活,我不能通过GKE弄清楚如何达到那个环境。它甚至可以默认设置,但我无法弄清楚如何获得隐藏在GKE背后的默认设置。
有没有办法通过GKE设置此(和其他控制器),或以其他方式检查默认值以查看它是否已设置?
答案 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
中找到更多示例