content/en/docs/overview/dataplane-modes/index.md
An Istio service mesh is logically split into a data plane and a control plane.
The {{< gloss >}}data plane{{< /gloss >}} is the set of proxies that mediate and control all network communication between microservices. They also collect and report telemetry on all mesh traffic.
The {{< gloss >}}control plane{{< /gloss >}} manages and configures the proxies in the data plane.
Istio supports two main {{< gloss "data plane mode">}}data plane modes{{< /gloss >}}:
You can opt certain namespaces or workloads into each mode.
Istio has been built on the sidecar pattern from its first release in 2017. Sidecar mode is well understood and thoroughly battle-tested, but comes with a resource cost and operational overhead.
Launched in 2022, ambient mode was built to address the shortcomings reported by users of sidecar mode. As of Istio 1.22, it is production-ready for single cluster use cases.
Users often deploy a mesh to enable a zero-trust security posture as a first-step and then selectively enable L7 capabilities as needed. Ambient mesh allows those users to bypass the cost of L7 processing entirely when it’s not needed.
<table> <thead> <tr> <td style="border-width: 0px"></td> <th><strong>Sidecar</strong></th> <th><strong>Ambient</strong></th> </tr> </thead> <tbody> <tr> <th>Traffic management</th> <td>Full Istio feature set</td> <td>Full Istio feature set (requires using waypoint)</td> </tr> <tr> <th>Security</th> <td>Full Istio feature set</td> <td>Full Istio feature set: encryption and L4 authorization in ambient mode. Requires waypoints for L7 authorization.</td> </tr> <tr> <th>Observability</th> <td>Full Istio feature set</td> <td>Full Istio feature set: L4 telemetry in ambient mode; L7 observability when using waypoint</td> </tr> <tr> <th>Extensibility</th> <td>Full Istio feature set</td> <td>Via <a href="/docs/ambient/usage/extend-waypoint-wasm">WebAssembly plugins</a> (requires using waypoint) The EnvoyFilter API is not supported.</td> </tr> <tr> <th>Adding workloads to the mesh</th> <td>Label a namespace and restart all pods to have sidecars added</td> <td>Label a namespace - no pod restart required</td> </tr> <tr> <th>Incremental deployment</th> <td>Binary: sidecar is injected or it isn't</td> <td>Gradual: L4 is always on, L7 can be added by configuration</td> </tr> <tr> <th>Lifecycle management</th> <td>Proxies managed by application developer</td> <td>Platform administrator</td> </tr> <tr> <th>Utilization of resources</th> <td>Wasteful; CPU and memory resources must be provisioned for worst case usage of each individual pod</td> <td>Waypoint proxies can be auto-scaled like any other Kubernetes deployment. A workload with many replicas can use one waypoint, vs. each one having its own sidecar. </td> </tr> <tr> <th>Average resource cost</th> <td>Large</td> <td>Small</td> </tr> <tr> <th>Average latency (p90/p99)</th> <td>0.63ms-0.88ms</td> <td>Ambient: 0.16ms-0.20ms Waypoint: 0.40ms-0.50ms</td> </tr> <tr> <th>L7 processing steps</th> <td>2 (source and destination sidecar)</td> <td>1 (destination waypoint)</td> </tr> <tr> <th>Configuration at scale</th> <td>Requires <a href="/docs/ops/configuration/mesh/configuration-scoping/">configuration of the scope of each sidecar</a> to reduce configuration</td> <td>Works without custom configuration</td> </tr> <tr> <th>Supports "server-first" protocols</th> <td><a href="/docs/ops/deployment/application-requirements/#server-first-protocols">Requires configuration</a></td> <td>Yes</td> </tr> <tr> <th>Support for Kubernetes Jobs</th> <td>Complicated by long life of sidecar</td> <td>Transparent</td> </tr> <tr> <th>Security model</th> <td>Strongest: each workload has its own keys</td> <td>Strong: each node agent has only the keys for workloads on that node</td> </tr> <tr> <th>Compromised application pod gives access to mesh keys</th> <td>Yes</td> <td>No</td> </tr> <tr> <th>Support</th> <td>Stable, including multi-cluster</td> <td>Stable, only single-cluster</td> </tr> <tr> <th>Platforms supported</th> <td>Kubernetes (any CNI) Virtual machines</td> <td>Kubernetes (any CNI)</td> </tr> </tbody> </table>The overhead for processing protocols at Layer 7 is substantially higher than processing network packets at Layer 4. For a given service, if your requirements can be met at L4, service mesh can be delivered at substantially lower cost.
The following features are available in sidecar mode, but not yet implemented in ambient mode: