| Request-path rule |
Compile ahead, enforce locally |
This design |
Central decision per request |
Control-plane outage becomes a freeze, not an outage |
ADR-01 |
| Service mesh |
Istio (sidecar mode) |
Open source |
Linkerd; Cilium service mesh |
Full L7 feature set, multi-cluster, revisions, per-node mode in the same project |
ADR-02 |
| Data-plane proxy |
Envoy as a native sidecar |
Open source |
Per-node L4 proxy (ztunnel) with waypoints |
Blast radius of one pod while the platform is young |
ADR-03 |
| Behaviour with control plane down |
Last-known-good, bounded by certificate lifetime |
This design |
Staleness TTL then fail closed |
One clock bounds survival, not two |
ADR-04 |
| Control-plane topology |
istiod per cluster, multi-primary |
Open source |
Primary per site with remote clusters |
Shards at about 2,000 proxies and contains failure per cluster |
ADR-05 |
| Proxy lifecycle and injection |
Kubernetes native sidecars; ValidatingAdmissionPolicy backstop |
Open source |
Classic sidecar with startup hold |
Ordering by the kubelet; strict namespaces never admit unmeshed pods |
ADR-06 |
| Workload identity issuance |
SPIRE with k8s_psat and kubelet attestation |
Open source |
istiod CA; cert-manager istio-csr |
Attested identity and issuance evidence, no key in istiod |
ADR-07 |
| Certificate lifetime |
24 h SVIDs, renew at 12 h, no CRL |
This design |
1 h certificates; 30 d with OCSP |
Gives the 12-hour outage budget and a one-day exposure |
ADR-08 |
| Clock discipline |
chrony and node-problem-detector taint at ±60 s |
Open source |
PTP everywhere |
60 s is ample against a 24-hour certificate |
ADR-08 |
| Root and intermediates |
Offline HSM root; name-constrained intermediates in OpenBao |
Open source |
Per-cluster roots with federation |
One root, cryptographic containment per cluster |
ADR-09 |
| mTLS migration |
Per-service PeerAuthentication after 7 days of zero plaintext |
This design |
Mesh-wide strict on a date |
Each flip backed by evidence about real callers |
ADR-10 |
| Authorisation |
Istio AuthorizationPolicy in Envoy RBAC |
Open source |
External authoriser on every call |
0.2 ms p99 and no network dependency |
ADR-11 |
| External authorisation (opt-in) |
Envoy ext_authz to an OPA sidecar |
Open source |
Central policy service |
Live context only where declared, with a pod-local failure domain |
ADR-11 |
| Policy proof |
Dry-run annotation plus access-log replay gate at 0.5% |
This design |
Enforce and roll back on complaints |
Proven against yesterday's and today's traffic before it can deny |
ADR-12 |
| Egress control |
ServiceEntry, egress gateway, Cilium egress policy |
Open source |
Perimeter firewall only |
Attributable external calls; bypass-resistant |
ADR-13 |
| Routing API |
Kubernetes Gateway API (mesh profile) |
Open source |
Istio VirtualService throughout |
Portable intent for what teams edit most |
ADR-14 |
| Progressive delivery |
Argo Rollouts with analysis on Thanos |
Open source |
CD pipeline writing weights |
One writer of weights; judgement on applied share |
ADR-15 |
| One-step revert |
Signed OCI bundles in Harbor, pinned by a revert controller |
This design |
Git revert and sync |
Undo does not wait on the pipeline that made the mistake |
ADR-16 |
| Timeouts, retries, deadlines |
Mandatory route timeouts, Envoy retry budget 20%, expected-timeout header |
Open source |
Attempt counts only |
Budgets bound the fleet, not just one call |
ADR-17 |
| Overload and locality |
Outlier ejection, circuit limits, locality failover at 70% |
Open source |
Client-side libraries |
Shed at the proxy; spillover is declared, not implicit |
ADR-18 |
| Cross-cluster transport |
Flat inside a site; SNI east-west gateways between sites |
Open source |
Flat network everywhere |
Shortest path where the network is ours; containment where it is not |
ADR-19 |
| Federation |
Exported services and trusted domains declared per cluster |
This design |
Merge all discovery by default |
Trust and discovery are opt-in and reviewable |
ADR-20 |
| Pod network and load balancing |
Cilium with BGP control plane and LB IPAM |
Open source |
Calico with MetalLB |
One component for CNI, VIPs and the second enforcement plane |
ADR-21 |
| Intent store |
Forgejo, three repositories, signed commits |
Open source |
GitLab CE; one monorepo |
Separation of duties by repository, not by review convention |
ADR-22 |
| Configuration delivery |
Argo CD per site, cluster waves with health gates |
Open source |
Flux; a central Argo CD |
No cross-site dependency; waves align with control-plane blast radius |
ADR-23 |
| Configuration scope |
Istio Sidecar resources generated from declared dependencies; delta xDS |
Open source |
Inferred dependency graph |
Memory tracks what a workload calls; changes cost what they touch |
ADR-24 |
| Admission |
OPA Gatekeeper and ValidatingAdmissionPolicy |
Open source |
CI checks only |
A second line that kubectl cannot skip |
ADR-25 |
| Mesh upgrades |
Istio revisions and revision tags, namespace waves |
Open source |
In-place upgrade |
Skew held by construction; abort leaves a working mixed fleet |
ADR-26 |
| Audit trail |
Git history, Kubernetes audit, SPIRE audit to Ceph Object Lock |
Open source |
SIEM only |
Append-only for 13 months, independent of the SIEM's retention |
ADR-27 |
| Metrics |
Prometheus per cluster with Thanos on Ceph RGW |
Open source |
VictoriaMetrics; Grafana Mimir |
Cluster-local collection, global query, 13-month downsampled history |
ADR-28 |
| Access logs and traces |
OpenTelemetry Collector to ClickHouse and Grafana Tempo |
Open source |
OpenSearch; Jaeger |
Columnar logs at 800k hops a second; object-storage traces |
ADR-29 |
| Failure attribution |
Failure-origin label from Envoy response flags |
This design |
Status codes only |
Separates the mesh's failures from the application's |
ADR-30 |
| Drift visibility |
Drift exporter: acknowledged sha and nonce per proxy |
This design |
Argo CD sync status; istioctl on demand |
Effective state is observed, not inferred |
ADR-31 |
| Cost attribution |
OpenCost plus telemetry volume per namespace |
Open source |
Spreadsheet estimates |
The team that meshes a service sees what it costs |
ADR-32 |