Deploy a sample application

To play with Istio and demonstrate some of it's capabilities, you will deploy the example BookInfo application, which is included the Istio package.

What is the Bookinfo Application


This application is a polyglot composition of microservices are written in different languages and sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. Displayed on the page is a description of the book, book details (ISBN, number of pages, and so on), and a few book reviews.

The end-to-end architecture of the application is shown in the figure.


Figure: BookInfo deployed off the mesh


It’s worth noting that these services have no dependencies on Istio, but make an interesting service mesh example, particularly because of the multitude of services, languages and versions for the reviews service.

As shown in the figure below, proxies are sidecarred to each of the application containers.


Figure: BookInfo deployed on the mesh


Sidecars proxy can be either manually or automatically injected into the pods. Automatic sidecar injection requires that your Kubernetes api-server supports `admissionregistration.k8s.io/v1` or `admissionregistration.k8s.io/v1beta1` or `admissionregistration.k8s.io/v1beta2` APIs. Verify whether your Kubernetes deployment supports these APIs by executing:
1kubectl api-versions | grep admissionregistration

If your environment does NOT supports either of these two APIs, then you may use manual sidecar injection to deploy the sample app.

As part of Istio deployment in Previous chapter, you have deployed the sidecar injector.


Deploying Sample App with Automatic sidecar injection


Istio, deployed as part of this workshop, will also deploy the sidecar injector. Let us now verify sidecar injector deployment.
1kubectl -n istio-system get configmaps istio-sidecar-injector

Output:

1NAME DATA AGE
2istio-sidecar-injector 2 9h

NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector.

1kubectl get namespace -L istio-injection

Output:

1NAME STATUS AGE ISTIO-INJECTION
2default Active 1h enabled
3istio-system Active 1h disabled
4kube-public Active 1h
5kube-system Active 1h

Using Meshery, navigate to the Istio management page.

  1. Enter default in the Namespace field.
  2. Click the (+) icon on the Sample Application card and select BookInfo Application from the list.

This will do 3 things:

  1. Label default namespace for sidecar injection.
  2. Deploys all the BookInfo services in the default namespace.
  3. Deploys the virtual service and gateway needed to expose the BookInfo's productpage application in the default namespace.

Verify Bookinfo deployment

  1. Verify that the deployments are all in a state of AVAILABLE before continuing.
1watch kubectl get deployment
  1. Choose a service, for instance productpage, and view it's container configuration:
1kubectl get po
2
3kubectl describe pod productpage-v1-.....
  1. Examine details of the services:
1kubectl describe svc productpage

Next, you will expose the BookInfo application to be accessed external from the cluster.


Alternative: Manual installation

Follow this if the above steps did not work for you

Label namespace for injection

Label the default namespace with istio-injection=enabled

1kubectl label namespace default istio-injection=enabled
1kubectl get namespace -L istio-injection

Output:

1NAME STATUS AGE ISTIO-INJECTION
2default Active 1h enabled
3istio-system Active 1h disabled
4kube-public Active 1h
5kube-system Active 1h

Deploy BookInfo


Applying this yaml file included in the Istio package you collected in Getting Started will deploy the BookInfo app in you cluster.

1kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

Deploy Gateway and Virtual Service for BookInfo app

1kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml


Manual Sidecar Injection

Use this only when Automatic Sidecar injection doesn't work

To do a manual sidecar injection we will be using istioctl command:

1curl https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platform/kube/bookinfo.yaml | istioctl kube-inject -f - > newBookInfo.yaml

Observing the new yaml file reveals that additional container Istio Proxy has been added to the Pods with necessary configurations:

1image: docker.io/istio/proxyv2:1.3.0
2 imagePullPolicy: IfNotPresent
3 name: istio-proxy

We need to now deploy the new yaml using kubectl

1kubectl apply -f newBookInfo.yaml

To do both in a single command:

1kubectl apply -f <(curl https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platform/kube/bookinfo.yaml | istioctl kube-inject -f -)

Now continue to Verify Bookinfo deployment.

NEXT CHAPTER

Getting Started

Layer5, the cloud native management company

An empowerer of engineers, Layer5 helps you extract more value from your infrastructure. Creator and maintainer of cloud native standards. Maker of Meshery, the cloud native manager.