When accessing the Web UI behind a proxy (e.g. a Kubernetes ingress), executors page is blank.
Instead, we should use apiRoot global variable.
On one hand, it would allow to build relative URLs. On the other hand, apiRoot reflects the Spark property spark.ui.proxyBase which can be set to change the root path of the Web UI.
If spark.ui.proxyBase is actually set, original URLs become incorrect, and we end up with an executors blank page.
I encounter this bug when accessing the Web UI behind a proxy (in my case a Kubernetes Ingress).