Guide to installing and validating Istio on Kubernetes using istioctl or Helm, enabling sidecar injection, deploying the Bookinfo sample, and troubleshooting configuration
This guide walks through installing Istio on a Kubernetes cluster (EKS, GKE, AKS, or local clusters such as kind or Minikube). It covers the two common installation methods—istioctl and Helm—and shows how to enable sidecar injection (automatic and manual), deploy the Bookinfo sample, and validate your installation.Key topics:
Prerequisites
Downloading and configuring istioctl
Installing kubectl (if needed)
Installation profiles
Installing Istio with istioctl
Enabling automatic sidecar injection
Manual (offline) sidecar injection
Installing Istio with Helm
Validation and analysis
Prerequisites
Requirement
Why it’s needed
A running Kubernetes cluster and an authenticated kubeconfig
Istio runs on top of Kubernetes and needs API access
kubectl
To interact with cluster resources
istioctl (or Helm)
istioctl simplifies installation and validation. Helm is an alternative installer.
Always verify the istioctl client version and whether Istio pods are running. istioctl reports the client version even when Istio is not yet installed in the cluster.
Installation methods
Method
When to use
istioctl
Recommended for single-command installs and built-in validation (istioctl install, istioctl analyze)
Helm
Use when you need to integrate with existing Helm-based workflows or customize chart values at install time
Istio provides multiple installation profiles (default, demo, minimal, remote, empty, preview, ambient). Each profile includes a different set of core components (istiod, ingress/egress gateways, CNI, ztunnel, etc.). For most labs we’ll use the demo profile (feature-rich, good for learning) or the ambient profile (sidecar-less ambient mesh).
Quick reference: when to use each profile
Profile
Use case
demo
Learning, labs, and examples (includes most components)
The simplest way to install Istio with the demo profile:
istioctl install --set profile=demo -y
Sample successful output:
✓ Istio core installed✓ Istiod installed✓ Egress gateways installed✓ Ingress gateways installed✓ Installation completePlease verify that Istio is running: kubectl get pods -n istio-systemNAME READY STATUS RESTARTS AGEistio-egressgateway-6db9994577-sn95p 1/1 Running 0 79sistio-ingressgateway-58649bfdf4-cs4fk 1/1 Running 0 79sistiod-dd4b7db5-nxrjv 1/1 Running 0 111s
Note: Installing Istio adds the control plane and gateway resources to the cluster. It does not automatically inject sidecars into existing workloads unless you enable injection or redeploy those workloads.
Istio injects an Envoy sidecar container into pod definitions for classic sidecar-based deployments. To enable automatic sidecar injection for a namespace, label that namespace:
NAME STATUS AGE LABELSdefault Active 20h istio-injection=enabled,kubernetes.io/metadata.name=default
After labeling a namespace, existing pods must be recreated (restart or reapply manifests) for the sidecar to be injected.
Note: The Ambient profile implements a sidecar-less ambient mesh. If you install Istio using the ambient profile, automatic sidecar injection (the istio-injection label) does not inject Envoy sidecars. The namespace labeling below applies to classic sidecar-based profiles such as demo or default.
After a Helm install, the resulting cluster resources and runtime behavior are equivalent to an istioctl installation; you can inspect pods and services with kubectl.
Use these istioctl commands to validate and analyze Istio configuration and your installation:
# Validate an Istio YAML fileistioctl validate filename.yaml# Verify the control plane installationistioctl verify-install# Analyze Istio configuration in all namespacesistioctl analyze -A# Or analyze a specific namespaceistioctl analyze -n default
istioctl analyze is especially helpful: it reports configuration problems, missing references, and other issues that can prevent Istio features from working correctly. Run it regularly during development and labs.
That covers the core steps for installing Istio with istioctl or Helm, enabling sidecar injection (automatic or manual), and validating your installation. Practice these commands in a terminal to become comfortable with Istio installation and troubleshooting.