Kubernetes 当处于GKE下时,DenyEscalatingExec
我们在Kubernetes集群中使用GKE。我们正在运行的应用程序之一是CI的Jenkins。不幸的是,Jenkins奴隶需要使用Docker挂载主机的Kubernetes 当处于GKE下时,DenyEscalatingExec,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我们在Kubernetes集群中使用GKE。我们正在运行的应用程序之一是CI的Jenkins。不幸的是,Jenkins奴隶需要使用Docker挂载主机的Docker.sock。这可能是一种升级攻击 解决方案是在API服务器中设置准入控制器以使用DenyEscalatingExec。但就我个人而言,我不知道如何通过GKE达到那种状态。它甚至可以默认设置,但我不知道如何获得隐藏在GKE后面的默认设置 是否有办法通过GKE设置此控制器(以及其他控制器),或者检查默认值以查看是否已设置?看起来您希望以特
Docker.sock
。这可能是一种升级攻击
解决方案是在API服务器中设置准入控制器以使用DenyEscalatingExec
。但就我个人而言,我不知道如何通过GKE达到那种状态。它甚至可以默认设置,但我不知道如何获得隐藏在GKE后面的默认设置
是否有办法通过GKE设置此控制器(以及其他控制器),或者检查默认值以查看是否已设置?看起来您希望以特权模式运行Jenkins CI。但是,如果您只想从Jenkins内部调用Docker,则不需要使用特权模式,只需将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上启用。
您可以在中找到更多的示例,看起来您希望以特权模式运行Jenkins CI。但是,如果您只想从Jenkins内部调用Docker,则不需要使用特权模式,只需将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上启用。
您可以在中找到更多示例不幸的是,您无法更改GKE上启用的准入控制器。Alpha集群支持,但这将涉及大量定制工作
另一种选择是使用PodSecurityPolicy,只允许特权pod在几个严格的控制器名称空间中运行。例如,您可以创建一个jenkins命名空间,只允许在jenkins和kube系统命名空间中创建特权POD,然后阻止除群集管理员以外的所有用户在这些命名空间中执行POD。不幸的是,您无法更改GKE上启用的准入控制器。Alpha集群支持,但这将涉及大量定制工作 另一种选择是使用PodSecurityPolicy,只允许特权pod在几个严格的控制器名称空间中运行。例如,您可以创建一个jenkins命名空间,只允许在jenkins和kube系统命名空间中创建特权POD,然后防止除群集管理员以外的所有用户执行这些命名空间中的POD