Skip to main content
🎤 Luca Berton is speaking at Red Hat Summit & KubeCon EU 2026!Learn more →
Back to Blog

Istio Service Mesh Beginner Guide

Istio adds mTLS, traffic management, and observability to your Kubernetes services without code changes. Learn the core concepts, installation, and practical.

Luca BertonMarch 28, 20262 min read

Istio intercepts all network traffic between your Kubernetes services and adds security, observability, and traffic control — without changing application code.

What Istio Does

When you install Istio, every pod gets a sidecar proxy (Envoy). All traffic flows through these proxies:

Service A → Envoy Proxy → Network → Envoy Proxy → Service B

The proxies handle: - mTLS — automatic encryption between services - Traffic routing — canary releases, A/B testing, fault injection - Observability — request metrics, distributed tracing, access logs - Resilience — retries, timeouts, circuit breaking

Installation

bash
# Install istioctl
curl -L https://istio.io/downloadIstio | sh -

# Install Istio with the default profile
istioctl install --set profile=default -y

# Enable sidecar injection for a namespace
kubectl label namespace production istio-injection=enabled

# Restart pods to inject sidecars
kubectl rollout restart deployment -n production

After this, every new pod in the production namespace gets an Envoy sidecar automatically.

Related Course

Master this topic with hands-on labs

Go beyond reading — build real projects in sandboxed environments with expert video guidance.

Browse Courses →

Automatic mTLS

With Istio installed, all service-to-service traffic is encrypted:

yaml
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: production
spec:
  mtls:
    mode: STRICT

STRICT mode means unencrypted traffic is rejected. Every service identity is verified through certificates managed by Istio. No application changes needed.

Traffic Management

Canary Releases

Route 10% of traffic to a new version:

yaml
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: my-app
spec:
  hosts: ["my-app"]
  http:
    - route:
        - destination:
            host: my-app
            subset: stable
          weight: 90
        - destination:
            host: my-app
            subset: canary
          weight: 10
---
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: my-app
spec:
  host: my-app
  subsets:
    - name: stable
      labels:
        version: v1
    - name: canary
      labels:
        version: v2

Gradually shift traffic from 10% to 100% as you gain confidence.

Fault Injection

Test resilience by injecting failures:

yaml
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: payment-service
spec:
  hosts: ["payment-service"]
  http:
    - fault:
        delay:
          percentage:
            value: 10
          fixedDelay: 5s
        abort:
          percentage:
            value: 5
          httpStatus: 503
      route:
        - destination:
            host: payment-service

10% of requests get a 5-second delay. 5% get a 503 error. This tests how your application handles slow or failing dependencies.

Timeouts and Retries

yaml
http:
  - timeout: 3s
    retries:
      attempts: 3
      perTryTimeout: 1s
      retryOn: 5xx,reset,connect-failure
    route:
      - destination:
          host: payment-service
Stay Updated

Get weekly IT automation tips

Docker, Ansible, Terraform, MLOps — curated insights delivered to your inbox. No spam.

Subscribe Free →

Observability

Istio generates metrics for every request without application instrumentation:

bash
# Install Kiali dashboard
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.22/samples/addons/kiali.yaml

# Access the dashboard
istioctl dashboard kiali

Kiali shows a real-time service graph: which services talk to which, request rates, error rates, and latency — all derived from Envoy proxy data.

The Cost of Istio

Istio adds complexity and resource overhead:

  • Memory: Each Envoy sidecar uses 50-100MB
  • Latency: 1-3ms per hop (two proxies per request)
  • Operational complexity: Control plane, CRDs, certificate management

For a cluster with 100 pods, that is 5-10GB of additional memory just for sidecars.

When to Use Istio

Good fit: - Microservices needing mTLS (compliance, zero-trust) - Complex traffic routing (canary, A/B, blue-green) - Organizations needing service-level observability without code changes - Multi-team clusters where network policies alone are insufficient

Overkill for: - Small clusters (< 20 services) - Monolithic applications - Teams without Kubernetes networking expertise - Environments where Cilium's eBPF mesh is sufficient

Consider Cilium's sidecar-free mesh or Linkerd (lighter weight) if Istio's feature set exceeds your needs.

---

Ready to go deeper? Master Kubernetes networking with hands-on courses at CopyPasteLearn.

Ready to learn by doing?

Stop reading tutorials — start building. Expert video courses with hands-on labs in real sandboxed environments.

Share this article
LB
Luca Berton

Docker Captain, IT automation expert, Red Hat Summit & KubeCon speaker. Building hands-on education for DevOps engineers at CopyPasteLearn.

Related Articles

Explore topics

Browse more articles on the topics covered here.