Prerequisites

To go through the Istio in practice tutorials we will need a running instance of a Kubernetes cluster and Istio.

1. Kubernetes Cluster

All cloud providers have managed Kubernete scluster offering we can use to install Istio service mesh.

We can also run a Kubernetes cluster locally on your computer using one of the following platforms:

When using a local Kubernetes cluster, make sure your computer meets the minimum requirements for Istio installation (e.g. 16384 MB RAM and 4 CPUs). Also, ensure the Kubernetes cluster version is v1.19.0 or higher.

Install Kubernetes CLI

If you need to install the Kubernetes CLI, follow these instructions.

We can run kubectl version to check if the CLI is installed. You should see the output similar to this one:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T21:51:49Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:23:04Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}

2. Install Istio with Tetrate Istio Distro

Tetrate Istio Distro is the easiest way to get started with Istio. After you’ve set up your Kubernetes cluster, you can download Tetrate Istio Distro:

curl -sL https://istio.tetratelabs.io/getmesh/install.sh | bash

Finally, to install the demo profile of Istio, use the following command:

getmesh istioctl install --set profile=demo

3. Label the namespace for Istio sidecar injection

We need to label the namespace where we want Istio to inject the sidecar proxies to Kubernetes deployments automatically.

To label the namepace, we can use the kubectl label command and label the namespace (default in our case) with a label called istio-injection=enabled:

kubectl label namespace default istio-injection=enabled

4. Install Hello world application (OPTIONAL)

As a sample to deploy on your cluster, you can use the Hello World Web application. You can pull the image from gcr.io/tetratelabs/hello-world:1.0.0, and use the commands below to create a Kubernetes deployment and Service.

kubectl create deploy helloworld --image=gcr.io/tetratelabs/hello-world:1.0.0 --port=3000

Copy the below YAML to helloworld-svc.yaml and deploy it using kubectl apply -f helloworld-svc.yaml.

apiVersion: v1
kind: Service
metadata:
  name: helloworld
  labels:
    app: helloworld
spec:
  ports:
    - name: http
      port: 80
      targetPort: 3000
  selector:
    app: helloworld

To access the service from an external IP, we also need a Gateway resource:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: public-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - '*'

Save the above YAML to gateway.yaml and deploy it using kubectl apply -f gateway.yaml.

We can now access the deployed Hello World web application through the external IP address. You can get the IP address using this command:

kubectl get svc istio-ingressgateway -n istio-system  -o jsonpath='{.status.loadBalancer.ingress[0].ip}'