Skip to main content
Cloud DevOps Solutions
Get a quote Talk to an engineer

Containers and Kubernetes

Istio in production: mTLS and traffic control, and the cost of both

Istio is an open-source service mesh that adds mutual TLS, traffic management and telemetry between services without changing application code. It does this through sidecar proxies or, in ambient mode, shared node proxies. We help teams decide whether a mesh is justified, then install, secure and operate it safely.

Key takeaways

  • A mesh solves real problems: encrypted service-to-service traffic, fine-grained traffic shifting and consistent telemetry. It also adds a control plane, proxies and a new failure surface.
  • Many teams do not need a mesh. Ingress, network policies and application-level TLS cover a lot of ground with far less to run.
  • Ambient mode removes per-pod sidecars and reduces overhead, but check its current maturity and feature coverage for your needs.
  • Roll out mTLS gradually, in permissive mode first, and treat upgrades as a planned, rehearsed activity.
  • The cost is mostly people and complexity, not licence fees, so the decision should be explicit and reviewed.

What teams use Istio for

Zero-trust service traffic

Mutual TLS between workloads with identity-based authorisation policies, a common requirement for regulated customers.

Progressive delivery

Weighted routing for canaries and gradual rollouts, with fast rollback by changing a routing rule.

Resilience policies

Timeouts, retries, circuit breaking and outlier detection applied consistently instead of in each service's code.

Uniform telemetry

Request metrics, traces and access logs for every service, including those you cannot easily instrument.

Multi-cluster connectivity

Service discovery and secure routing across clusters or regions, where the organisation can support the extra complexity.

Egress control

Route and restrict outbound calls to external services through a controlled gateway.

What Istio is, and an honest view of adopting it

Istio is a service mesh built on the Envoy proxy. A control plane distributes configuration and certificates, and proxies handle the traffic between your services. The result is mutual TLS, identity-based access control, routing rules and telemetry that apply uniformly, without each team implementing them in code.

Those are real benefits. They also come with real costs: more components to run, a steeper debugging path when requests fail, and a standing upgrade commitment. We say this plainly in every Istio consulting conversation, because the most useful service we sometimes provide is advice not to install it. See our definition of a service mesh for the concept, and read the section on alternatives below before you decide.

Do you need a mesh?

Ask what problem you are solving. These usually do not require Istio:

  • Encrypting traffic into the cluster: an ingress controller with TLS does that.
  • Limiting which pods talk to each other: Kubernetes network policies cover the basics.
  • Seeing request rates and errors: application metrics with Prometheus, or OpenTelemetry, are lighter.
  • Canary releases: Argo Rollouts or Flagger can shift traffic using the ingress layer.

A mesh becomes a good answer when several of these hold at once: many services owned by many teams, a compliance or customer requirement for encrypted and authenticated east-west traffic, a need for consistent retries and timeouts, and a platform team with capacity to run it. If you are a handful of services on one cluster, a mesh is rarely the first investment. Our Kubernetes consulting work includes helping you reach that conclusion early.

Sidecar and ambient modes

Istio has two data-plane models. In sidecar mode, each pod gets an Envoy proxy. This is the established approach, with full per-workload features, but it consumes resources in every pod and requires restarts to upgrade proxies. In ambient mode, a node-level component handles secure transport and optional per-namespace waypoint proxies handle higher-layer features, which reduces per-pod overhead.

Ambient is attractive for cost and simplicity, but maturity and feature coverage have been evolving. Check the project’s current documentation against the features you rely on, such as specific routing or policy behaviour, before choosing. We usually test both with a representative service.

How we install and configure it

We install the control plane with Helm or the supported installation tooling, run it highly available, and use revisions so upgrades are canary-style. Traffic policy is declared in Kubernetes resources, and we favour the Kubernetes Gateway API where Istio supports it for ingress, because it is a standard rather than a vendor API.

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: payments
spec:
  mtls:
    mode: STRICT
---
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: allow-orders-to-payments
  namespace: payments
spec:
  selector:
    matchLabels:
      app: payments-api
  action: ALLOW
  rules:
    - from:
        - source:
            principals: ["cluster.local/ns/orders/sa/orders-api"]

This enforces mutual TLS in the namespace and permits only the orders service account to call the payments API. Apply STRICT after telemetry confirms every client is in the mesh; starting in PERMISSIVE mode avoids outages.

Security and access

The mesh issues short-lived workload identities, so authorisation can follow service identity rather than IP address. Protect the control plane with RBAC, restrict who can create routing and policy resources, and review where certificates originate; many teams integrate a corporate or cert-manager issued root rather than relying on the default. Egress should be explicit: decide whether unknown external destinations are allowed or blocked.

Cost and capacity

The cost of Istio is mostly operational. Sidecars add CPU and memory per pod, which scales with pod count, and the control plane needs headroom. Extra proxy hops add latency that is usually small but not zero. We do not publish numbers because they vary by workload; we measure them in staging and include them in capacity planning, including their effect on node counts under Karpenter or other autoscaling. The larger cost is skills: someone must be able to debug a failing request through a proxy.

Day-2 operations

  • Upgrades: use revision-based canary upgrades, move namespaces one at a time, and restart sidecar workloads to pick up new proxies. Skipping minor versions is a common source of trouble.
  • Observability: scrape proxy and control-plane metrics with Prometheus and Grafana, and use Kiali or traces to follow requests.
  • Debugging: istioctl analyze and istioctl proxy-status catch many configuration errors before users do.
  • Incident readiness: keep a documented way to bypass or disable injection for a namespace, and rehearse it with your SRE and incident response process.

Common failure modes

  • Enabling strict mTLS before every client is in the mesh, causing connection resets.
  • Jobs and init containers that start before the sidecar is ready, or never exit because the sidecar stays running.
  • Conflicting retries in the application and the mesh, multiplying load during an incident.
  • Under-sized control plane or proxy memory in large clusters.
  • Overlapping VirtualService or routing rules that behave unexpectedly.
  • Teams adopting the mesh for one feature and inheriting all of the complexity.

Alternatives and migration paths

If the honest answer is “not yet”, we put the building blocks in place that keep the door open: consistent service accounts, namespaces, TLS at the edge and good metrics. If you later adopt a mesh, those foundations make the rollout smaller. If you adopted Istio and it is not paying its way, removing it is possible namespace by namespace by disabling injection and rolling pods. For a candid review of your situation, book a consultation.

Official documentation: istio.io/latest/docs

How we work with Istio

  1. 01

    Challenge the need

    We ask which specific problem the mesh solves and whether simpler tools would do, and we document the answer either way.

  2. 02

    Choose the data plane

    We compare sidecar and ambient modes against your workloads, resource headroom and feature needs.

  3. 03

    Install and size

    The control plane is installed with Helm or the Istio operator tooling, with resources, high availability and revision-based upgrades planned from day one.

  4. 04

    Onboard namespaces gradually

    Workloads join the mesh one namespace at a time in permissive mTLS mode, with telemetry confirming traffic before enforcement.

  5. 05

    Enforce policy

    We move to strict mTLS and add authorisation policies, starting with deny-by-default for sensitive namespaces.

  6. 06

    Operate and upgrade

    Dashboards, alerts, canary control-plane upgrades and a runbook keep the mesh boring.

Istio compared with the alternatives

We recommend the tool that fits your team, not the one we know best. Here is when each option makes sense.

OptionChoose it when
IstioIstio is an open-source service mesh that adds mutual TLS, traffic management and telemetry between services without changing application code.
No meshChoose this for most small and mid-sized platforms. An ingress controller, Kubernetes network policies and TLS in your applications are cheaper to run and easier to debug.
LinkerdChoose it when you want mTLS and observability with a smaller feature set and a simpler operating model. Check the current licensing and release arrangements before committing.
Cilium service meshChoose it when you already use Cilium for networking and want mesh features on an eBPF data plane, accepting its different feature balance.
Managed meshes and cloud featuresChoose provider offerings when you want less to operate on a specific cloud, and are comfortable with that platform's coupling.

Tools we use alongside Istio

EnvoyKubernetes Gateway APIcert-managerPrometheusGrafanaKialiJaegerOpenTelemetryHelmArgoCDArgo RolloutsFlagger

Frequently asked questions

What does Istio do?
Istio is a service mesh. It manages how services in a cluster talk to each other: it encrypts traffic with mutual TLS, enforces who can call what, routes and shifts traffic by rule, applies timeouts and retries, and produces consistent metrics and traces. It does this in proxies alongside workloads, without changing application code.
Do I need a service mesh?
Often not. If you mainly need external ingress, namespace isolation and encrypted traffic, network policies, an ingress controller and application TLS are simpler. A mesh makes sense with many services, strict zero-trust or compliance demands, or a need for fine-grained traffic control, and when a team can own its operation.
Istio sidecar or ambient mode?
Sidecar mode injects a proxy into every pod, which gives rich per-workload features and a long track record at the cost of resources and restarts. Ambient mode uses shared node-level and optional waypoint proxies, reducing overhead. Evaluate ambient's current maturity for the features you need before choosing.
What is the overhead of running Istio?
There are three kinds: compute and memory for proxies, extra latency per hop, and operational effort for upgrades, debugging and policy. We do not quote figures because they depend on your traffic and configuration. Measure them in a staging environment with realistic load before committing.
How do you roll out mTLS safely?
Start with PeerAuthentication in permissive mode so both plain and mutual TLS are accepted. Onboard namespaces gradually, confirm via telemetry that traffic is encrypted, fix workloads that bypass the mesh, then switch to strict. Add authorisation policies after that, not at the same time.
Can Istio be upgraded without downtime?
Yes, with planning. Revision-based canary upgrades run two control planes side by side while namespaces move over one at a time. Sidecar workloads must restart to pick up the new proxy. We rehearse upgrades in staging and keep rollback by relabelling namespaces back to the old revision.

Talk to an engineer about Istio

Book a free 30-minute call. We review your current setup and tell you honestly whether and how we can help.

Written by Saddique Khan, DevOps / SRE / Cloud Consultant Engineer. Last updated 2026-10-09.