Skip to main content
Installing Istio with Helm is a reliable way to get the control plane and gateway running in your cluster. This guide walks through a minimal, reproducible workflow: add the Istio Helm repo, install the three required charts (base, istiod, gateway), verify CRDs, enable automatic sidecar injection for a namespace, deploy a sample workload, and extract/modify Helm values for customization. Prerequisites
  • A Kubernetes cluster (start from a clean cluster to follow this demo).
  • kubectl configured to talk to the cluster.
  • Helm installed on the control plane or a machine with cluster access.
Verify your cluster has only default workloads:
Confirm Helm is available:
Add and update the Istio Helm repository:
Verify the repository was added:
What we will install
  • istio/base — installs CustomResourceDefinitions (CRDs) and base resources.
  • istio/istiod — the control plane (istiod replaces older Pilot/Galley components).
  • istio/gateway — the ingress gateway (can be installed into istio-system or a separate namespace).
Steps
  1. Install the Istio base chart (creates istio-system and installs CRDs)
Confirm the CRDs are present:
The image shows a terminal window with commands related to installing Istio using Helm and checking custom resource definitions (CRDs) with kubectl. It confirms Istio's successful installation and lists several CRDs with their creation timestamps.
The base chart is required because it installs the Istio CustomResourceDefinitions (CRDs). Without these CRDs you cannot create many Istio resources.
Always install the istio/base chart before istiod or gateway. Installing the control plane without CRDs can cause resources to be invalid or fail to create.
  1. Install the control plane (istiod)
For small clusters, reduce CPU request for the Pilot component to avoid scheduling pressure:
Check the istiod pod is running:
Sample helm install output (trimmed for clarity):
  1. Install the ingress gateway
You can install the gateway into istio-system or a separate namespace (e.g., istio-ingress). Here we install into istio-system:
Verify both the gateway and istiod are running:
Optional diagnostics: run istioctl analyze to catch common issues (if istioctl is installed).
  1. Enable automatic sidecar injection
Label the namespace where you want Istio to automatically inject the Envoy sidecar. This example enables injection in the default namespace. Check existing labels:
Label the namespace:
Confirm the label:
  1. Deploy a sample workload (Redis) to validate sidecar injection
Create a simple Redis pod in the labeled namespace:
Describe the redis pod and confirm both containers are present (application + Istio sidecar):
The image shows a terminal window displaying Kubernetes container details, including information about two containers: one running Redis and another running an Istio proxy.
  1. Inspect and customize Helm chart values
To review default chart values before customizing or upgrading, extract them to files:
Edit istiod.yaml or gateway.yaml to change settings such as image tags, resources, or gateway configuration. Example snippet from a values file:
Apply your custom values when upgrading the release:
This updates the existing release using your modified configuration. References Summary You have now installed Istio via Helm (base, istiod, and gateway), verified CRDs, enabled automatic sidecar injection for a namespace, deployed a sample workload to verify injection, and exported chart values for customization. Adjust values and resource requests as needed for production environments.

Watch Video

Practice Lab