First steps with Istio on Kubernetes on Minikube on Windows 10 image 139

First steps with Istio on Kubernetes on Minikube on Windows 10

In this article, I discuss my steps to get going with Istio [service mesh] on Kubernetes running on Minikube on Windows 10. Unfortunately, I have ran into an issue with Istio. This article describes the steps leading up to the issue. I will continue with the article once the issue is resolved. For now, it is a dead end street.

Note: my preparations – install Minikube and Kubernetes on Windows 10 are described in this previous article:

Clone Git repository with samples

git clone

Start minikube

set MINIKUBE_HOME=C:\Users\lucas_j\.minikube

minikube start


Run Bookinfo

cd c:\data\bookinfo\istio\samples\bookinfo\kube

kubectl apply -f bookinfo.yaml


Show productpage. First find port on which product page is exposed:


productpage is a service of type ClusterIP, which is only available inside the cluster – which is not good for me.

So to expose the service to outside the cluster:

kubectl edit svc productpage

and in the editor that pops up, change the type from ClusterIP to NodePort:


After changing the type and saving the change, get services indicates the port on which the productpage service is now exposed:


So now we can go to URL:


Installing Istio into the Kubernetes Cluster

Now that we’ve seen the app, we’ll adjust our deployment slightly to make it work with Istio. We first need to install Istio in our cluster. To see all of the metrics and tracing features in action, we also install the optional Prometheus, Grafana, and Zipkin addons.

First, download Istio for Windows from and extract the contents of the zip file.


Add the directory that contains the client binary istioctl.exe to the PATH variable.


Open a new command line window. Navigate to the installation location of Istio.

To install Istio to the minikube Kubernetes cluster:

kubectl apply -f install/kubernetes/istio.yaml


ending with:


To verify the success of the installation:

kubectl get svc -n istio-system


On Minikube – that does not support services of type LoadBalancer – the external IP for the istio-ingress will stay on pending. You must access the application using the service NodePort, or use port-forwarding instead.

Check on the pods:

kubectl get pods -n istio-system


On the dashboard, when I switch to the istio-system Namespace, I can see more details 


When I try to run istio commands, I run into issues:

istio version


panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x30 pc=0x121513f]

goroutine 1 [running]:
main.getDefaultNamespace(0x14b878a, 0xd, 0x0, 0x0)

I am not sure yet what is the underlying cause and if there is a solution. The issue report seems related – perhaps.

The next command I tried was:

kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)

this one fails with: the system cannot find the file specified


I do not know where to get more detailed logging about what happens prior to the exception.

Note: I decided to give an earlier version of Istios a try: 0.2.7. This worked flawlessly.

Switching to Istio 0.2.7

So again the Istio installation steps – this time for 0.2.7:

(first I have to remove Istio from minikube: in directory c:\ProgramFiles\Kubernetes\istio-0.2.9

kubectl delete -f install/kubernetes/istio-auth.yaml

and remove the 0.2.9 directory and PATH setting

Add c:\ProgramFiles\Kubernetes\istio-0.2.7 to PATH

Try istioctl:


And install isthio on Minikube:



Install Book Info Application and inject Istio

To install the Bookinfo application and inject Istio into it, I first take the original yaml –  bookinfo.yaml – and have istio inject its interception logic and save the result to a temporary file (bi2.yaml). Note: it is important to pass the correct location of the .kube/config file – because the default value is not applicable to my environment:

istioctl kube-inject –kubeconfig “C:\Users\lucas_j\.kube\config”   -f samples/bookinfo/kube/bookinfo.yaml > bi2.yaml

Next I install the application plus Istio injection stuff into Minikube:

kubectl apply -f bi2.yaml


Create ingress.yaml file:

Apply yaml file:

kubectl create -f ingress.yaml


Enable Ingress addon on minikube (see

minikube addons enable ingress


apiVersion: extensions/v1beta1

kind: Ingress


name: bookinfo

annotations: /



serviceName: default-http-backend

servicePort: 80


– host:



– path: /productpage


serviceName: productpage

servicePort: 9080

Create ingres based on this file:

kubectl create -f ingress.yaml

Check on the ingres:

kubectl describe ing  bookinfo


curl -L –resolve


Edit hosts file:


and now


Visualizing in Dashboard

Based on

Install Prometheus

kubectl apply -f install/kubernetes/addons/prometheus.yaml


To view Istio metrics in a graphical dashboard install the Grafana add-on.

kubectl apply -f install/kubernetes/addons/grafana.yaml


Verify that the service is running in your cluster.

kubectl -n istio-system get svc grafana


kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0]}’


kubectl -n istio-system port-forward  grafana-2894277879-b9ljj 3000:3000




Git Repository for Istio – with samples: 

Guide for Istio introduction – Managing microservices with the Istio service mesh – 

Installation of Istio into Kubernetes Cluster –

Tutorial  Istio is not just for microservices  –

Istio: Traffic Management for your Microservices –

Istio Guide – getting started with sample application Bookinfo –

On Ingress on Minikube:

On line course:

One Response

  1. Sibendu Das October 26, 2017