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

# Deploy Istio over Kubernetes

> Deploy Istio Pilot and Istio Proxy over Kubernetes using Minimus images in a minikube environment

This guide walks you through the steps to deploy Istio Pilot and Istio Proxy over Kubernetes in a minikube environment. Minikube is a local Kubernetes setup that requires only Docker or a Virtual Machine environment which makes it ideal for testing.

This setup automatically injects Istio sidecars into application pods, enabling service mesh features like traffic management, security, and observability. For the backend, we will use the [Minimus Darkhttpd image](https://images.minimus.io/gallery/images/darkhttpd/lines/latest) to deploy a simple HTTP server. For the frontend, we will use the [Minimus BusyBox image](https://images.minimus.io/gallery/images/busybox/lines/latest) to call the backend every 10 seconds.

<Steps>
  <Step title="Set up minikube">
    If you already have a Kubernetes cluster available, you can skip this step. Otherwise, install a single node cluster using minikube to set up a testing environment.

    Follow the [minikube get started guide](https://minikube.sigs.k8s.io/docs/start/?arch=%2Fwindows%2Fx86-64%2Fstable%2F.exe+download) to deploy a cluster, install kubectl, and test that everything is working. The instructions are platform-specific and provided for Windows, MacOS, and Linux.
  </Step>

  <Step title="Fetch the example Kubernetes YAML configuration files">
    The configurations are based on our general [NGINX guide](/guides/nginx). To simplify the process we provide example configuration files in our [GitHub repo](https://github.com/minimusio/examples/tree/main/nginx-k8s).

    Save the example yaml files to your project folder:

    * [backend.yaml](https://github.com/minimusio/examples/blob/main/istio/backend.yaml)
    * [frontend.yaml](https://github.com/minimusio/examples/blob/main/istio/frontend.yaml)
  </Step>

  <Step title="Create cluster secret">
    To avoid using a Minimus token in plaintext, we will create a Kubernetes Secret containing the credentials needed to pull images from the Minimus registry.

    1. Copy a token from your [Minimus console](https://images.minimus.io/manage/tokens).
    2. Create a Docker auth JSON by executing the following command. Add the token from the previous step as your password:

       ```bash theme={null}
       kubectl -n istio-system create secret docker-registry my-registry-secret \
          --docker-server=reg.mini.dev \
          --docker-username=minimus \
          --docker-password={minimus_token}
       ```
    3. Check that the secret with the name `my-registry-secret` was successfully created:

       ```bash theme={null}
       kubectl -n istio-system get secrets
       ```
  </Step>

  <Step title="Deploy Istio">
    Run the following command from the project directory to deploy your NGINX container:

    ```bash theme={null}
        helm install istiod istio/istiod -n istio-system \
        --set global.proxy.image=istio-proxy \
        --set pilot.image=istio-pilot \
        --set global.hub=reg.mini.dev \
        --set global.tag=latest \
        --set global.imagePullSecrets[0]=my-registry-secret
    ```
  </Step>

  <Step title="Deploy application">
    Run the following command from the project directory to deploy the frontend and backend apps. The period at the end of the command applies all YAML files in the current directory:

    ```bash theme={null}
    kubectl apply -f .
    ```
  </Step>

  <Step title="Check the logs">
    Run the following command to check the logs:

    ```bash theme={null}
    kubectl -n istio-system istiod-pod-number logs -f
    ```

    Look for the string below to make sure that the two endpoints were created: `XDS: Pushing Services:19 ConnectedEndpoints:2 Version:2025-08-10T07:38:55Z/6`

    Check the frontend logs:

    ```bash theme={null}
    kubectl -n istio-system frontend-pod-number logs -f
    ```

    You should see calls to the backend pod:

    ```
    Calling backend...
    Hello World - Sun Aug 10 07:38:39 UTC 2025
    ```
  </Step>
</Steps>
