重大升级:从 1.* 到 2.*#

Z2JH 2 包含若干重大变更,其中一些会影响您部署的安全性。本指南将帮助您从 1.* 升级到 2.*。

安全性:对 *.networkPolicy.egress 的重大变更#

NetworkPolicy 的出口(egress)规则已通过一个新属性进行了扩展。如果您配置了以下任何一项:

  • hub.networkPolicy.egress

  • proxy.chp.networkPolicy.egress

  • proxy.traefik.networkPolicy.egress

  • singleuser.networkPolicy.egress

您必须检查您的配置,因为已经添加了额外的默认出口路由。以前,*.networkPolicy.egress 控制所有出口流量,但新增的 *.networkPolicy.egressAllowRules 属性会默认添加额外的出口规则。

如果您曾为 hubproxy.chpproxy.traefiksingleuser 配置了 *.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.fsGidhub.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

当您更新完配置后,请遵循升级指南的其余部分。