Istio
Install Istio CLI:
curl -L https://istio.io/downloadIstio | sh -
cd istio-*/bin
export PATH=$PWD:$PATH
Install Istio with a minimal profile (to keep it light for KIND):
istioctl install --set profile=demo -y
Enable sidecar injection:
kubectl config set-context --current --namespace=default
kubectl label namespace default istio-injection=enabled
Install Gateway CRDs
kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
{ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.1" | kubectl apply -f -; }
Deploy sample apps (e.g., Bookinfo):
cd ..
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Expose App with Kuberneted Gateway
kubectl apply -f samples/bookinfo/gateway-api/bookinfo-gateway.yaml
Change Service to NodePort
kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=NodePort -n default --overwrite
Validate
kubectl get gateway
Access the endpoint using port-forward as
kubectl patch svc bookinfo-gateway-istio -n default \
-p '{"spec": {"type": "NodePort", "ports": [{"port": 80, "targetPort": 80, "nodePort": 30300, "protocol": "TCP", "name": "http"}]}}'
Open your browser and navigate to http://localhost:30300/productpage to view the Bookinfo application.
Observability with Kiali, Prometheus and Grafana
Setup observability addons including Prometheus, Grafana, Jaeger
kubectl apply -f samples/addons
kubectl rollout status deployment/kiali -n istio-system
Patch the Observability services with NodePort Configs
✅ Grafana → NodePort 30500
kubectl -n istio-system patch svc grafana \
-p '{"spec": {"type": "NodePort", "ports": [{"port": 3000, "targetPort": 3000, "nodePort": 30500}]}}'
✅ Kiali → NodePort 30600
kubectl -n istio-system patch svc kiali \
-p '{"spec": {"type": "NodePort", "ports": [{"port": 20001, "targetPort": 20001, "nodePort": 30600}]}}'
✅ Zipkin → NodePort 30700
kubectl -n istio-system patch svc zipkin \
-p '{"spec": {"type": "NodePort", "ports": [{"port": 9411, "targetPort": 9411, "nodePort": 30700}]}}'
✅ Loki → NodePort 30800
kubectl -n istio-system patch svc loki \
-p '{"spec": {"type": "NodePort", "ports": [{"port": 3100, "targetPort": 3100, "nodePort": 30800}]}}'
Access the observability dashboards at
- Grafana
- Kiali
- Zipkin
- Loki
Load Test
export GATEWAY_URL=165.22.218.103:30300
for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done
Reference
Istio Setup : Getting Started Grafana : Visualizing Metrics with Grafana Kiali: Visualizing Your Mesh