This page explains how to deploy a sample application to demonstrate 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 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
Enabling sidecar auto-injection
To enable automatic sidecar injection (auto-injection) for the sample application, you have to add a revision label to the sample's namespace. The label that you add depends on whether you deployed the Anthos Service Mesh Google-managed control plane or installed the in-cluster control plane. The revision label is used by the sidecar injector webhook to associate injected sidecars with a particular control plane revision.
Use the following command to locate the label on
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-195-2,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-195-2,istio=istiod,pod-template-hash=5788d57586
In the output, under the
LABELScolumn, note the value of the
istiodrevision label, which follows the prefix
istio.io/rev=. In this example, the value is
Apply the revision label to the default namespace. In the following command,
REVISIONis the value of the
istiodrevision label that you noted in the previous step.
kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
You can ignore the message
"istio-injection not found"in the output. That means that the namespace didn't previously have the
istio-injectionlabel, which you should expect in new installations of Anthos Service Mesh or new deployments. Because auto-injection fails if a namespace has both the
istio-injectionand the revision label, all
kubectl labelcommands in the Anthos Service Mesh documentation include removing the
asm-managed revision label to the
kubectl label namespace default istio-injection- istio.io/rev=asm-managed --overwrite
You can ignore the message
"istio-injection not found" in the
output. That means that the namespace didn't previously have the
istio-injection label, which you should expect in new
installations of Anthos Service Mesh or new deployments. Because auto-injection fails
if a namespace has both the
istio-injection and the revision label,
kubectl label commands in the Anthos Service Mesh documentation
include removing the
Deploying the application
Now that auto-injection is enabled on the
default namespace, when you deploy
the BookInfo application's services, sidecar proxies are injected alongside each
On the command line on the computer where you installed Anthos Service Mesh, go to the root of the Anthos Service Mesh installation directory. If you need to, download the installation file.
Deploy your application to the default namespace using
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Confirm that the application has been deployed correctly by running the following commands:
kubectl get services
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
kubectl get pod
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
Finally, define the ingress gateway routing for the application:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
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 Anthos clusters 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 service istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 22.214.171.124 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
In this example, the IP address of the ingress service is
Trying the application
Check that the BookInfo app is running with
curl -I http://EXTERNAL_IP/productpage
If the response shows
200, it means the application is working properly with Anthos Service Mesh.
To view the BookInfo web page, enter the following address in your browser:
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 Cloud Console to see metrics and the other observability features.
When you are finished experimenting with the Bookinfo sample, remove it from your cluster.
Uninstall Bookinfo using the following script:
kubectl get virtualservices #-- there should be no virtual services kubectl get destinationrules #-- there should be no destination rules kubectl get gateway #-- there should be no gateway kubectl get pods #-- the Bookinfo pods should be deleted