This guide walks through installing Istio into a Kubernetes cluster using Helm. The steps follow the required sequence to get Istio running with theDocumentation Index
Fetch the complete documentation index at: https://notes.kodekloud.com/llms.txt
Use this file to discover all available pages before exploring further.
demo profile while keeping the control plane footprint minimal for test environments.
Prerequisites:
- A Kubernetes cluster with
kubectlconfigured. - Helm installed on the machine performing the installation.
Prerequisite check
Start by confirming there are no user workloads (you should typically only see system namespaces on a fresh cluster):kube-system and other default namespaces.
1) Ensure Helm is available and add the Istio Helm repo
Verify Helm is installed and working:2) Install the Istio base chart (CRDs)
Istio’sbase chart installs the CustomResourceDefinitions (CRDs) required by the rest of Istio. Verify there are no CRDs present before installation:
Install the
istio-base chart before any other Istio components. The CRDs must exist prior to installing the control plane or data plane charts.istio-base into the istio-system namespace (create it if needed). This example uses version 1.26.3. The base chart only installs CRDs — the profile settings are applied when installing istiod:
3) Install the Istio control plane (istiod)
Installistiod into the istio-system namespace. To reduce resource usage for testing, override the Pilot (istiod) resource requests to small values and use the demo profile:
4) Install the Istio gateway (ingress)
Install the gateway (ingress) component. You can install it intoistio-system or a separate namespace such as istio-ingress. This example installs the gateway into istio-system:
istio-system namespace; you should now see both istio-ingress and istiod:
5) Namespace labeling for automatic sidecar injection
Istio can inject sidecar proxies into pods automatically when a namespace is labeled withistio-injection=enabled. If you want automatic sidecar injection for a namespace, label it.
Labeling a namespace enables automatic injection of the Istio sidecar proxy into pods created in that namespace.
istioctl is not installed, you’ll see an error like:
default namespace:
default namespace for sidecar injection:
6) Deploy a sample workload to verify sidecar injection
Create a simple Redis pod to validate that Istio injects the sidecar proxy:redis) and the Istio sidecar (istio-proxy):
7) Inspect and customize Helm chart values
To review the default configurable values for a chart before customizing, usehelm show values and redirect output to a file. For example:
istiod.yaml and gateway.yaml containing all configurable values for the charts. Edit these files to change image tags, resource requests/limits, or other chart settings.
Example directory listing after generating the files:
helm upgrade:
istiod release and applies your custom configuration from the values file.
8) Quick command reference
| Task | Command |
|---|---|
| List all pods across namespaces | kubectl get pods -A |
| Verify Helm is installed | helm version |
| Add Istio Helm repo | helm repo add istio https://istio-release.storage.googleapis.com/charts |
| Install istio-base (CRDs) | helm install istio-base istio/base --namespace istio-system --create-namespace --version 1.26.3 |
| Install istiod (control plane) | (see install block above) |
| Install gateway | helm install istio-ingress istio/gateway --namespace istio-system --version 1.26.3 |
| Label namespace for sidecar injection | kubectl label ns default istio-injection=enabled |
| Generate chart values file | helm show values istio/istiod > istiod.yaml |
| Upgrade with custom values | helm upgrade istiod istio/istiod -n istio-system -f istiod.yaml |
9) Summary
- Add the Istio Helm repository and update it.
- Install
istio-basefirst to create the required CRDs. - Install
istiod(control plane) using thedemoprofile and, if needed, reduced resource requests for testing. - Install the gateway (ingress) chart.
- Label namespaces where you want automatic sidecar injection:
istio-injection=enabled. - Use
helm show valuesto fetch default chart values, edit them, and apply changes withhelm upgrade -f <values.yaml>.
Links and references
- Istio documentation: https://istio.io/latest/docs/
- Helm documentation: https://helm.sh/docs/
- Kubernetes kubectl reference: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
- Example Istio Helm charts:
https://istio-release.storage.googleapis.com/charts