The service mesh wars - a new hope for kubernetes
Watch talk on YouTubeThe clans (popular solutions)
- Kuma
- Linkerd
- Cilium
- Istio
- Ambient Mesh
The new hope: Gateway API
- Will integrate itself into the networking solution (nginx, istio, kong)
- CRDs for Ingress, LB, Servicemesh
- CRDs linke: Gateway, HttpRoute, GrpcRoute, TCPRoute
Expectations
- Baseline: Control Plane and Data Plane (Application + Proxy)
- What we get: Rules, Logs, …
- Proxy-Variants:
- Sidecar: Extra Pod, Service needs to be restarted for settings changes
- Sidecarless: One proxy per node
- Features: Ingress, egress, Mutual TLS, Retry Logic, Traffic Splitting, Ratelimits, Obervability
Comparison
Sidecar
TODO: Steal table from slides
| Kuma | Yes | Envoy |Linkerd | Yes | Linkerd Proxy
Features
TODO: Steal Diagrams from slides
- Kuma: Gateway API Supported
- CRD per Mesh with Ratelimiter, Timeouts, ….
- To add to meh: Annotation
- Linkerd: Gateway API Supported
- Core Component: Server
- To add to mesh: Annotate workload with proxy annotation
- Cilium: Gateway API mostly Support
- Utilizes eBPF for speed
- Cann deploy envoy
- CRDs for NEtworkPolicy
- Istio: Gateway API Supported
- CRDs with Services
- To add: Annotate namespace or workload
- Ambientmesh: Gateway API supported
- Same Config as istio
- Special: Layer 7 Rules require a waypoint
- Missing: Several Policy features
- To add: Annotate namespace and/or workload
TODO: Steal table from slides
Observability
- Kuma: MEtrics by default with trace and log support (MeshTrace, MeshAccesslogs) via OpenTelemetry and it’s own UI
- Linkerd: Prometheus metrics, Viz extension for UI and Jaeger extension for traces (not OTel compliant)
- Cilium: No Traces, only metrics and logs through hubble (with ui)
- Istio/Ambient: Metrics, Traces and Logs with full OTel support on Dataplane and a external UI (Kali)
TODO: Steal table
Performance
Tests: https://github.com/isItObservable/servicemeshsecuritybenchmark
-
KPIs: Ressources and Resource usage
-
Constant load, no policies:
- Kuma 5,59ms
- Linkerd: 2,55ms
- Cilium 0ms
- Istio: 6,43ms
- Ambientmesh: 3,59ms
-
Loadtest no policies
- Kuma: 7ms
- Linkerd: 3,54ms
- Cilium: 0,57ms
- Istio: 8,8ms
- Ambientmesh: 3,54ms
-
Constant load policies
- Kuma: 6,08
- Linkerd: 2,55
- Cilium: 0
- Istio: 9,19
- Ambientmesh: 3,69
-
Loadtest: TODO
TODO: Steal overview slide
Recommendation
- If ambientmesh supports everything you need: It performs the best
- Kuma includes everything you need when starting your first mesh
- Linkerd: Complex configuration
- Treat cilium as your cni and not nessecarely as your servicemesh
TODO: Steal conclusion slide