Deploying Bookinfo

This page explains how to deploy a sample application to Anthos Service Mesh. If you haven't installed Anthos Service Mesh, see the Installation guides section to choose the guide that is right for you.

Several sample applications come with the Anthos Service Mesh the installation. This guide walks you through deploying the BookInfo sample. This is a simple mock bookstore application made up of four services that provide a web product page, book details, reviews (with several versions of the review service), and ratings—all managed using Anthos Service Mesh. You can find the source code and all the other files used in this example in your Anthos Service Mesh installation's directory in samples/bookinfo.

Deploying the application

Use the following steps to deploy the BookInfo application's services with the sidecar proxies injected alongside each service.

  1. On the command line on the computer where you installed Anthos Service Mesh, go to the root of the Anthos Service Mesh installation directory.

  2. Enable automatic sidecar injection. Use the following command to locate the label on istiod, which contains the revision label value to use in later steps.

    kubectl -n istio-system get pods -l app=istiod --show-labels

    The output looks similar to the following:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-173-3-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-173-3,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-173-3-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-173-3,istio=istiod,pod-template-hash=5788d57586
    

    In the output, under the LABELS column, note the value of the istiod revision label, which follows the prefix istio.io/rev=. In this example, the value is asm-173-3.

  3. Apply the revision label to namespaces. In the following command, NAMESPACE is the name of the namespace where you want sidecar injection to occur, and REVISION is the value of the istiod revision label that you noted in the previous step.

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
    
  4. Deploy your application using kubectl:

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
  5. Confirm that the application has been deployed correctly by running the following commands:

    kubectl get services
    Output:
    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    and

    kubectl get pod
    Output:
    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
  6. Finally, define the ingress gateway routing for the application:

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

Validating the application deployment

To see if the BookInfo application is working, you need to send traffic to the ingress gateway.

  • If you installed Anthos Service Mesh on GKE on VMware, get the external IP address for the ingress gateway that you configured after installing Anthos Service Mesh

  • If you installed Anthos Service Mesh on GKE, get the external IP address of the ingress gateway as follows:

    kubectl get svc istio-ingressgateway -n istio-system
    
    Output:
    NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE
    istio-ingressgateway   LoadBalancer   10.19.247.233   35.239.7.64   80:31380/TCP,443:31390/TCP,31400:31400/TCP   27m

    In this example, the IP address of the ingress service is 35.239.7.64.

Trying the application

  1. Check that the BookInfo app is running with curl:

    curl -I http://EXTERNAL_IP/productpage

    If the response shows 200, it means the application is working properly with Anthos Service Mesh.

  2. To view the BookInfo web page, enter the following address in your browser

    http://EXTERNAL_IP/productpage

    If you refresh the page several times, you should see different versions of reviews shown in the product page, presented in a round robin style (red stars, black stars, no stars).

Now that you have an application that is generating traffic, you can explore the Anthos Service Mesh pages in the Google Cloud console to see metrics and the other observability features.

What's next

Learn more about the Bookinfo sample.

Cleaning up

When you are finished experimenting with the Bookinfo sample, remove it from your cluster.

  1. Uninstall Bookinfo using the following script:

    samples/bookinfo/platform/kube/cleanup.sh
  2. Confirm shutdown:

    kubectl get services
    kubectl get pods

    The Bookinfo pods should be deleted.