重大升级:从 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
属性会默认添加额外的出口规则。
如果您曾为 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
当您更新完配置后,请遵循升级指南的其余部分。