This project demonstrates a simple implementation of gRPC with Istio Service Mesh on a local Minikube Kubernetes cluster. Applications are containerized using Docker, and Istio is used as a gateway and load balancer.
- Go compiler installed
- Operating System: Windows 10 (with WSL2)
- Minikube version: v1.19.0
- Docker Desktop version: 3.3.2 (Engine: v20.10.5)
- Istio version: 1.9.4
Install and enable Windows Subsystem for Linux (WSL2):
🔗 WSL2 Setup Guide
- Open Docker Dashboard → Settings → Enable WSL2 integration
- Ensure Ubuntu is selected/enabled
- Install Ubuntu from Microsoft Store
- Launch Ubuntu and complete initial setup
- Clone or download this repository
- Navigate to the project folder in WSL terminal via VSCode or command line:
cd /path/to/project
wsl
Run these commands in the WSL terminal:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
Set the driver to Docker:
minikube config set driver docker
Start the Kubernetes cluster:
minikube start --memory=4096 --cpus=4
Follow steps 1–5 here:
🔗 Istio Getting Started Guide
Add a namespace label for automatic Envoy sidecar injection:
kubectl label namespace default istio-injection=enabled
- Copy the
istio-yaml/
folder from this repo into theistio-1.9.4
directory (or your version)
Run from within the istio-1.9.4
directory:
kubectl apply -f istio-yaml/grpc.yaml
Check pod status:
kubectl get pods
Run this in a new terminal (keep it running):
minikube tunnel
In a new terminal, run:
go run client.go
You’ve successfully set up Istio Service Mesh with gRPC and Minikube on your local Windows machine!
├── client.go
├── server.go
├── proto/
├── Dockerfile
├── istio-yaml/
└── README.md
- Replace version numbers according to your installed versions
- Ensure Docker and Minikube are correctly communicating
- Minikube tunnel must remain running for the service to be accessible
Feel free to open an issue or PR for improvements!