Local Development using Istio on Kind

This document outlines the setup for a local developer environment running a Kind (Kubernetes in Docker) cluster with Istio installed.
Overview
The environment is managed by a single script, manage-cluster.sh, which automates the creation, configuration, and teardown of the entire stack. This setup is ideal for testing and developing with Istio service mesh on a local machine.
The script handles the following:
- Kind Cluster Creation: Sets up a multi-node Kubernetes cluster.
- Istio Installation: Installs a specific version of Istio.
- Bookinfo Deployment: Deploys the standard Istio Bookinfo demo application.
- External Access: Configures
cloud-provider-kindto enable access to services from outside the cluster.
Prerequisites
Ensure the following tools are installed on your macos machine. Althought it should be possible with slight modification to run on Windows with WSL2 or Linux.
- Hardware: At least 16GB of RAM.
- Package Manager: Homebrew
- Go: Version
1.24 - Container Runtime: Rancher Desktop Version
1.19.3 - CLI Tools:
kubectlkindistioctl(Version1.26.2)
Getting Started
The entire setup is orchestrated by the manage-cluster.sh script. This script automates the creation of the Kind cluster, the installation of Istio, the deployment of the Bookinfo application, and the setup of the cloud provider.
Cluster Configuration
The Kind cluster is configured using the kind-config.yaml file and consists of:
- 1 control-plane node
- 2 worker nodes
The cluster runs a Kubernetes version supported by Kind, such as v1.33.1.
Istio and Bookinfo
- Istio: The script installs Istio version
1.26.2. - Bookinfo Application: The reference
bookinfo.yamlapplication is deployed to thedefaultnamespace for demonstration purposes.
External Access with Cloud Provider KIND
To expose the Istio Ingress Gateway to your local machine, the manage-cluster.sh script installs and runs cloud-provider-kind. This tool provides load-balancer functionality for Kind clusters, simulating a cloud environment.
The script automates the installation of the cloud-provider-kind binary. You can view the full script here: manage-cluster.sh.
Cluster Management
The manage-cluster.sh script simplifies the lifecycle of the local environment. Note: sudo is required to start
Start the Cluster
To create and configure the entire environment, run:
./manage-cluster.sh start
This command will:
- Create the Kind cluster.
- Install
cloud-provider-kind. - Install Istio
1.26.2. - Deploy the Bookinfo application.
As the script runs, it will prompt for a password as the cloud-provider-kind requires sudo to execute.
sudo cloud-provider-kind &
Destroy the Cluster
To tear down the cluster and remove all associated resources, run:
./manage-cluster.sh destroy
Accessing the Bookinfo Application
Once the cluster is running and cloud-provider-kind is active, you can access the Bookinfo application.
External Access (Recommended)
After running the start script, the Istio Ingress Gateway service will be assigned an external IP address. You can find this IP by running:
kubectl get svc -n istio-system istio-ingressgateway
EXTERNAL_IP=\$(kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
curl -s http://\${EXTERNAL_IP}/productpage | grep -o '<title>.*</title>'
Success! Received response:
<title>Simple Bookstore App</title>
Internal Access (Alternative)
If you choose not to run cloud-provider-kind to externalize the service, you can still verify access from within the cluster.
Deploy a temporary pod for testing:
kubectl run curl-pod --image=curlimages/curl -- sleep infinityExecute a
curlcommand from the pod to theproductpage:kubectl exec curl-pod -- curl -s http://istio-ingressgateway.istio-system/productpage | grep -o '<title>.*</title>'This should return
<title>Simple Bookstore App</title>.