Your Kubernetes App Works. But Do You Know What’s Happening Between Your Pods?
A beginner-friendly intro to Istio and why we use service mesh
Your Kubernetes App Works. But Do You Know What’s Happening Between Your Pods?
A beginner-friendly intro to Istio and why we use service mesh

You have got your app running on Kubernetes. Deployments, Services, maybe an Ingress. Things look good on the surface.
what actually happens when Pod A talks to Pod B?
Can you see that traffic? Can you control it? Can you retry automatically if a request fails? Can you encrypt it?
By default no. You can’t. Kubernetes handles scheduling and networking, but it has no opinion about how your services communicate with each other beyond basic routing.
That is exactly the gap a service mesh fills. And Istio is the most widely adopted one.
So What Is a Service Mesh?
Think of your microservices as people working in a large office building. Kubernetes is the building. It provides rooms (pods), hallways (networking), and a directory (DNS). But it doesn’t control how people talk to each other, whether conversations are private, or what happens if someone doesn’t pick up.
A service mesh is like adding a universal communication protocol to that building, every conversation is logged, secured, retried if needed, and observable from a central control room.
Technically, a service mesh is an infrastructure layer that handles service-to-service communication. Istio does this by injecting a lightweight proxy (called Envoy) as a sidecar container alongside every pod in your cluster.
The Sidecar Pattern — The Heart of Istio
Every time you deploy a pod in an Istio-enabled namespace, Istio automatically injects an Envoy sidecar container into it. You don’t write it. You don’t manage it. It just appears.
┌─────────────────────────────┐
│ Your Pod │
│ ┌─────────┐ ┌──────────┐ │
│ │ Your │ │ Envoy │ │
│ │ App │ │ Sidecar │ │
│ └────┬────┘ └────┬─────┘ │
│ │ │ │
└───────┼────────────┼────────┘
│ All traffic│
└────→───────┘
intercepted here
All inbound and outbound traffic from your app passes through this sidecar. Your application doesn’t know it’s there. But Istio does, and that’s where all the magic happens.
What Does Istio Actually Give You?
1. Observability(You See Everything!)
Without Istio, if a request fails between two services, you are digging through logs hoping someone thought to add tracing.
With Istio, every request is automatically tracked. You get:
- Metrics: request count, error rate, latency (P50, P99)
- Distributed tracing: follow a single request across microservices
- Service topology: a live map of which services talk to which
Tools like Kiali, Jaeger, and Grafana plug directly into Istio for visualisation.
2. Traffic Management — Control the Flow
Istio lets you control traffic routing with surgical precision using VirtualService and DestinationRule objects.
Want to send 90% of traffic to v1 of your service and 10% to v2 for a canary rollout?
Here you go:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
subset: v1
weight: 90
- destination:
host: my-service
subset: v2
weight: 10
That’s it. No code change. No custom load balancer config. Pure YAML.
You can also configure retries, timeouts, and circuit breaking the same way.
3. Security: mTLS by Default
Kubernetes networking is flat. Pod A can talk to Pod B without any authentication unless you explicitly set NetworkPolicies.
Istio enables mutual TLS (mTLS), both sides of every connection verify each other’s identity using certificates. Istio manages the certificates automatically via its control plane component called istiod.
Enable it mesh-wide with one object:
yaml
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
Now every pod-to-pod communication in your cluster is encrypted and authenticated. Zero code changes in your app.
When you deploy Istio,
istiodruns as a central control plane. You write YAML (VirtualServices, DestinationRules, PeerAuthentication, etc.) andistiodtranslates that into Envoy config and pushes it to every sidecar in real-time.
If plain Kubernetes is TCP/IP, it gets packets from A to B, then Istio is HTTPS + load balancing + observability + auth, applied uniformly across every service in your cluster without touching application code.
Should You Use It?
Istio is powerful, but it comes with real operational overhead. Here’s a quick gut-check:
Istio is worth it when you have:
- Many microservices talking to each other
- A need for zero-trust security between services
- Teams that need visibility into service-level traffic
- Canary deployments or A/B testing requirements
It might be overkill if:
- You have a monolith or 2–3 services
- Your team is still learning Kubernetes itself
- You can’t justify the extra CPU/memory overhead from sidecars
The shift from “my pods are running” to “I understand and control every connection between my pods” is a significant one. Istio is how production teams make that leap.
Start small, enable it on one namespace, and let the observability alone justify the investment!
메타데이터
- post_id
- 3ddd3ce2d961
- slug
- your-kubernetes-app-works-but-do-you-know-whats-happening-between-your-pods-3ddd3ce2d961
- url
- https://medium.com/@nirupamagr738/your-kubernetes-app-works-but-do-you-know-whats-happening-between-your-pods-3ddd3ce2d961
- canonical_url
- https://medium.com/@nirupamagr738/your-kubernetes-app-works-but-do-you-know-whats-happening-between-your-pods-3ddd3ce2d961
- author_url
- https://medium.com/@nirupamagr738
- status
- ok
- fetched_at
- 2026-06-13 07:35:29