Skip to content

Cell: Routing PoC: Istio

Overview

The routing layer is meant to offer a consistent user experience where all Cells are presented under a single domain (for example, gitlab.com), instead of navigating to separate domains.

We need to decide what technology the routing service is written in. The choice depends on the best-performing language and the routing layer's expected way and place of deployment. If it is required to make the service multi-cloud, it might be necessary to deploy it to the CDN provider. Then, the service needs to be written using a technology compatible with the CDN provider.

We also have a PoC from @andrewn https://gitlab.com/andrewn/stateless-router, see #408507 (comment 1379811355) from more context.

As an outcome of this issue, we expect:

  • Evaluate Istio as the technology to implement the routing layer
  • Document decisions in the Cells blueprint
  • Create a plan with concrete issues to continue the development of the routing layer: discovery, single domain interaction, endpoints classification, GraphQL, etc.

Related to #408507 (closed).

Reference:

Requirements:

See https://docs.gitlab.com/ee/architecture/blueprints/cells/routing-service.html#requirements

Resources

Results

We did not implement the PoC like we did for cloudflare workers, since we favored the Cloudflare workers implementation for the following reasons:

  1. Wasm Plugins are for filters: https://istio.io/latest/docs/reference/config/proxy_extensions/wasm-plugin/ so it's
  2. Cluster local service: The filters will in the cluster, so when we we want to redirect to another cell, we'll hit the penalty of reaching 2 k8s clusters instead of having this logic outside of the cluster
  3. Not running in Production: Istio is not running in production, which add one more dependency, a big one since deploying Istio is not easy.
  4. No easy caching: There is no easy way to have a distributed key/value store for caching.
  5. Not global: The Isito deployment will not be multi-regional out of the best and we'll have to handle that ourselves.
  6. No easy local development: You run local development you have a local k8s running with Istio.

Citations

Edited by Steve Xuereb