> ## Documentation Index
> Fetch the complete documentation index at: https://notes.kodekloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Customize Istio Installation

> Guide to customizing Istio installations with IstioOperator examples for profiles, components, meshConfig, proxy values, Helm alternatives, install upgrade uninstall commands and validation steps

You can (and often should) customize Istio installs rather than relying on defaults. Istio provides several installation profiles (for example: `demo`, `ambient`, `default`, `minimal`, `remote`, `empty`, `preview`) that determine which control-plane components are included.

<Frame>
  <img src="https://mintcdn.com/kodekloud-c4ac6d9a/_Iw_8KKCVf_JueUq/images/Prep-Course-Istio-Certified-Associate-ICA-Certification/Installation-Configuration/Customize-Istio-Installation/istio-profiles-component-mapping-table.jpg?fit=max&auto=format&n=_Iw_8KKCVf_JueUq&q=85&s=4ed1c882aa17f57604cbca7663b488d6" alt="A slide showing a table titled &#x22;Istio Profiles&#x22; that maps core components to different installation profiles with green checkmarks indicating which components are included. Rows list components like istio-egressgateway, istio-ingressgateway, istiod, CNI and Ztunnel while columns show profiles such as default, demo, minimal, remote, empty, preview and ambient." width="1920" height="1080" data-path="images/Prep-Course-Istio-Certified-Associate-ICA-Certification/Installation-Configuration/Customize-Istio-Installation/istio-profiles-component-mapping-table.jpg" />
</Frame>

Previously `istioctl` included a subcommand that emitted a full IstioOperator manifest for a given profile. That helper was removed—today you author the IstioOperator resource yourself. The IstioOperator CR is the canonical way to customize control-plane installs; many examples are available in the official docs: [https://istio.io/latest/docs/setup/install/operator/](https://istio.io/latest/docs/setup/install/operator/).

Below are practical examples and notes you can reuse. They show the most common customizations you will need for installs, upgrades, exam tasks, and day-to-day operations.

## Minimal IstioOperator skeleton

Start from a small, clear IstioOperator manifest and adjust as needed:

```yaml theme={null}
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: default
  hub: docker.io/istio
  tag: 1.18.2
  components:
    base:
      enabled: true
    cni:
      enabled: false
    ingressGateways:
    - enabled: true
      name: istio-ingressgateway
    egressGateways:
    - enabled: false
      name: istio-egressgateway
    istiodRemote:
      enabled: false
    pilot:
      enabled: true
  meshConfig:
    defaultConfig:
      proxyMetadata: {}
    enablePrometheusMerge: true
  values: {}
```

You can also apply single-value overrides directly on the `istioctl` command line:

```bash theme={null}
# Set a single values key during installation
istioctl install --set values.pilot.traceSampling=0.1
```

## Disabling Pilot (istiod)

If you need to disable Pilot (istiod) entirely, set `pilot.enabled: false`. This is rarely recommended unless you fully understand the consequences.

```yaml theme={null}
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    pilot:
      enabled: false
```

<Callout icon="warning" color="#FF6B6B">
  Disabling Pilot (istiod) removes the control-plane component that distributes service discovery and configuration to Envoy sidecars. Only disable it if you have an alternative management/control-plane strategy.
</Callout>

<Callout icon="lightbulb" color="#1CB2FE">
  Note: Pilot/istiod is the control-plane component that distributes service discovery and configuration to proxies (Envoy). The data plane proxy itself is `proxyv2` (Envoy).
</Callout>

## Adjusting Pilot (istiod) resources and autoscaling

You can override Kubernetes resources and HPA settings for components using the `k8s` block under each component. Example for Pilot:

```yaml theme={null}
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    pilot:
      k8s:
        resources:
          requests:
            cpu: 1000m   # override from default 500m
            memory: 4096Mi
        hpaSpec:
          minReplicas: 2   # override default 1
          maxReplicas: 10  # override default 5
```

Then install or upgrade using that file:

```bash theme={null}
# Install with a custom IstioOperator file
istioctl install -f samples/operator/pilot-k8s.yaml

# Or upgrade an existing install using a modified IstioOperator file
istioctl upgrade -f default.yaml
```

## Example: custom profile, hub, tag, and revision

On the exam you may be asked to install a specific profile (for example `minimal` or `empty`), set `hub`/`tag`, and use `revision` for control-plane revisioning:

```yaml theme={null}
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: empty
  hub: docker.io/istio
  tag: 1.19.6
  revision: 1-19-6
  components:
    pilot:
      enabled: true
      namespace: istio-control
      k8s:
        overlays:
        - kind: Deployment
          name: istiod
          patches:
          - path: /spec/template/spec/containers/0/args/30
            value: "60m"
```

## Key areas of an IstioOperator

The IstioOperator CR has three primary areas you should know. The table below summarizes their purpose and common examples.

| Area                 | Purpose                                                                                    | Example                                                                     |
| -------------------- | ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- |
| `global` / top-level | Set profile, image registry/hub, tag, revision, and global namespace                       | `profile: empty`, `hub: docker.io/istio`, `tag: 1.19.6`, `revision: 1-19-6` |
| `meshConfig`         | Control-plane and proxy configuration (access logs, tracing, proxy defaults)               | `meshConfig.accessLogFile: /dev/stdout`, `enableTracing: true`              |
| `components`         | Enable/disable control-plane components and customize their Kubernetes resources via `k8s` | `ingressGateways`, `egressGateways`, `pilot`, `cni`                         |

## meshConfig and enabling gateways

A typical customization enabling an egress gateway and setting `meshConfig` values:

```yaml theme={null}
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: default
  hub: gcr.io/istio-testing
  tag: latest
  revision: 1-8-0
  meshConfig:
    accessLogFile: /dev/stdout
    enableTracing: true
  components:
    egressGateways:
    - name: istio-egressgateway
      enabled: true
```

## Proxy-related defaults (values)

Many proxy-related defaults are configured under the `values` section. Example:

```yaml theme={null}
values:
  proxy:
    autoInject: enabled
    clusterDomain: cluster.local
    componentLogLevel: misc:error
    enableCoreDump: false
    excludeIPRanges: ""
    excludeInboundPorts: ""
    excludeOutboundPorts: ""
    image: proxyv2
    includeIPRanges: '*'
    logLevel: warning
    privileged: false
    readinessFailureThreshold: 30
    readinessInitialDelaySeconds: 1
    readinessPeriodSeconds: 2
    resources:
      limits:
        cpu: 2000m
        memory: 1024Mi
      requests:
        cpu: 100m
        memory: 128Mi
```

## Helm alternative

If you prefer Helm, inspect default chart values, edit them, and install/upgrade with `-f`:

```bash theme={null}
# Dump chart values to files
helm show values istio/base > istio_base.yaml
helm show values istio/istiod > istiod.yaml
helm show values istio/gateway > istio_gateway.yaml

# Install using customized values
helm install istio-base istio/base -n istio-system -f istio_base.yaml
helm install istiod istio/istiod -n istio-system -f istiod.yaml
```

To update an existing installation, either:

* Modify your IstioOperator and run `istioctl upgrade -f <file>`, or
* Use `helm upgrade` for Helm-based installs.

## Typical install output

When installing with `istioctl install -f default.yaml`, you should see output like:

```bash theme={null}
$ istioctl install -f default.yaml

✓ Istio core installed
✓ Istiod installed
✓ Egress gateways installed
✓ Ingress gateways installed
✓ Installation complete
```

## Uninstall

To remove Istio and purge state:

```bash theme={null}
# istioctl uninstall (purge state)
istioctl uninstall --purge

# Helm uninstall example for a specific release
helm uninstall istio-ingress -n istio-ingress
```

## Quick validation commands

After installing or upgrading, validate the control plane and gateways:

```bash theme={null}
# Check istio-system pods
kubectl get pods -n istio-system

# Inspect istiod deployment and pods
kubectl get deploy -n istio-system istiod
kubectl get pods -n istio-system -l app=istiod

# Check ingress/egress gateways
kubectl get svc -n istio-system
```

## Study and practice tips

* For the Istio Certified Associate (ICA) exam, practice creating a small IstioOperator manifest, change one option (for example enable an egress gateway or adjust Pilot CPU/memory), and apply it with `istioctl install -f` or `istioctl upgrade -f`.
* Review the Istio docs operator guide and examples: [https://istio.io/latest/docs/setup/install/operator/](https://istio.io/latest/docs/setup/install/operator/)
* Try both `istioctl` and Helm workflows so you're comfortable with either during real-world tasks or exam scenarios.

## Links and references

* [Istio Operator installation docs](https://istio.io/latest/docs/setup/install/operator/)
* [Istio installation concepts](https://istio.io/latest/docs/setup/additional-setup/overview/)
* [Kubernetes Documentation](https://kubernetes.io/docs/)

<CardGroup>
  <Card title="Watch Video" icon="video" cta="Learn more" href="https://learn.kodekloud.com/user/courses/istio-certified-associate/module/65ee174b-536e-4657-9b6f-85c90c7612da/lesson/3f6daee7-6e1d-485b-b175-97c15083d129" />
</CardGroup>
