重大升级:从 1.* 到 2.*#
Z2JH 2 包含若干重大变更,其中一些会影响您部署的安全性。本指南将帮助您从 1.* 升级到 2.*。
安全性:对 *.networkPolicy.egress 的重大变更#
NetworkPolicy 的出口(egress)规则已通过一个新属性进行了扩展。如果您配置了以下任何一项:
hub.networkPolicy.egressproxy.chp.networkPolicy.egressproxy.traefik.networkPolicy.egresssingleuser.networkPolicy.egress
您必须检查您的配置,因为已经添加了额外的默认出口路由。以前,*.networkPolicy.egress 控制所有出口流量,但新增的 *.networkPolicy.egressAllowRules 属性会默认添加额外的出口规则。
如果您曾为 hub、proxy.chp、proxy.traefik 或 singleuser 配置了 *.networkPolicy.egress 以限制建立出站网络连接的权限,那么本次升级很可能会提升这些权限,除非您修改配置。新的配置项 *.networkPolicy.egressAllowRules 默认授予了大部分先前由 *.networkPolicy.egress 默认授予的出口权限,而 *.networkPolicy.egress 现在默认不提供任何权限。
例如,如果您之前为了降低权限而覆盖了 singleuser.networkPolicy.egress 先前非常宽松的默认值,您应该考虑像这样禁用所有的 singleuser.networkPolicy.egressAllowRules,以避免权限提升的风险。
singleuser:
networkPolicy:
egressAllowRules:
cloudMetadataServer: false
dnsPortsPrivateIPs: false
nonPrivateIPs: false
privateIPs: false
更多详情,请参阅关于Kubernetes 网络策略的文档,以及 *.networkPolicy.egress 和 *.networkPolicy.egressAllowRules 下的配置参考条目。
JupyterLab 和 Jupyter Server#
默认的 singleuser 服务器是 JupyterLab,运行在 Jupyter server 上。要切换回 Jupyter Notebook,您可以配置/重建您的 singleuser 镜像使其默认为 notebook,或者参阅关于用户界面的文档。
KubeSpawner 默认阻止提权(如 sudo)#
默认情况下,进程无法提升其权限。例如,用户不能使用 sudo 切换到 root。如果您在 singleuser 镜像内配置了 sudo 或其他提权方法,您必须设置 singleuser.allowPrivilegeEscalation: true。
singleuser:
allowPrivilegeEscalation: true
如果您想为命令添加自定义参数,您必须在 singleuser.cmd 中指定完整的命令和所有参数,例如:
singleuser:
cmd:
- jupyterhub-singleuser
- "--collaborative"
- "--debug"
jupyterhub_config.d 中的配置比 hub.config 具有更高的优先级 #2457#
以前,如果使用 hub.config 来配置某些 JupyterHub traitlets,它会覆盖任何挂载到 Hub 容器中 jupyterhub_config.d 目录下的自定义配置文件。在 2.0.0 版本中,所有额外的自定义(例如,使用 hub.extraConfig 提供内联配置,或使用 hub.extraFiles 将文件挂载到 jupyterhub_config.d)将始终优先于任何 Helm chart 值。
用户调度器插件配置已更改以匹配 kubescheduler.config.k8s.io/v1beta3 #2590#
现在,使用插件对用户调度器进行高级自定义需要 Kubernetes 1.21+,并且配置必须遵循 kubescheduler.config.k8s.io/v1beta3。对于 Kubernetes 1.20,不再可能进行自定义。
如果您正在使用用户调度器但没有自定义插件配置,则您不受影响。
需要 Kubernetes 1.20+ 版本 #2635#
此 Helm chart 使用的 Kubernetes 资源在 1.20 之前的 Kubernetes 版本中不可用。
hub.fsGid 被 hub.podSecurityContext 替换 #2720#
在 Z2JH 的先前版本中,hub.fsGid 设置了一个补充组 ID,这在某些 K8s 系统上是必需的,以确保 JupyterHub 有权限读/写卷上的文件。这已被更通用的 hub.podSecurityContext 替换。要升级,请设置:
hub:
podSecurityContext:
fsGroup: GROUP-ID
Hub 镜像基于 Debian 而非 Ubuntu #2733#
Hub 容器的基础镜像已从 ubuntu:20.04 切换到 python:3.9-slim-bullseye,后者基于 debian:bullseye-slim。如果您扩展了 Z2JH hub 镜像,请查看 hub Dockerfile。请注意,singleuser 镜像不受影响。
禁用 RBAC 需要设置多个属性,rbac.enable 已被移除 #2736 #2739#
如果您以前使用 rbac.enable: False 禁用了 RBAC,您应该设置:
rbac:
create: False
hub:
serviceAccount:
create: false
proxy:
traefik:
serviceAccount:
create: false
scheduling:
userScheduler:
serviceAccount:
create: false
prePuller:
hook:
serviceAccount:
create: false
当您更新完配置后,请遵循升级指南的其余部分。