Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[feature] Run our own Hubble UI backend
... which is actually little more than a glorified HTTP-to-gRPC proxy written in Go, with a little something on the side to watch and serve `Namespace` objects. The configuration is inspired by [Cilium's own chart](https://github.com/cilium/cilium/tree/main/install/kubernetes/cilium/templates/hubble-ui) under the `hubble.ui.enabled = true` setting, except with less `ConfigMap`s and more defense-in-depth. - Do *not* just turn on `hubble.ui.enabled = true` in that other chart (which we could as part of https://github.com/epfl-si/sddc-ocp ), as this would defeat defense-in-depth quite a bit: neither the front-end nor the back-end need to run inside the privileged namespace (i.e. `cilium-system`) - Do *not* even run same with `hubble.ui.standalone = true` in ”our” namespace (i.e. `hubble`); as that would leave us with moving parts that we don't want (i.e. the nginx `ConfigMap`s for the reverse proxy rig; see below). - Forego mTLS between the UI backend and the Hubble relay, as it is not strictly required to achieve defense-in-depth. Knowing that in the EPFL case, the Hubble relay always lives in the same cluster and a different namespace, We Can Always Later™ put up access control between the two of them using e.g. `NetworkPolicy` objects. - Like Cilium, run the Hubble UI backend as an extra container in the same pod as the front-end server. - Address both set of containers through a single `Service` with two ports. - Unlike Cilium, don't do any nginx reverse proxying (nor nginx-related `ConfigMap`s). Instead, leverage the staggered `Route`s (that we already have) to serve both front-end and back-end under the same hostname. This provides the same benefits CORS-wise i.e. things just work. - Make the front-end `Route` access the UI front-end directly (as nothing it serves is security-critical); conversely, the back-end `Route` goes through the RBAC proxy (as it already did). - Provide default values that are useful out-of-the-box to the EPFL setup, but make them tunable later if the need arises (e.g. should we decide to mirror or rebuild the backend image).
- Loading branch information