Movatterモバイル変換


[0]ホーム

URL:


Bookinfo Application

This example deploys a sample application composed of four separate microservices usedto demonstrate various Istio features.

If you installed Istio using theGetting Startedinstructions, you already have Bookinfo installed and you can skip most of these stepsand go directly toDefine the service versions.

The application displays information about abook, similar to a single catalog entry of an online book store. Displayedon the page is a description of the book, book details (ISBN, number ofpages, and so on), and a few book reviews.

The Bookinfo application is broken into four separate microservices:

There are 3 versions of thereviews microservice:

The end-to-end architecture of the application is shown below.

Bookinfo Application without Istio
Bookinfo Application without Istio

This application is polyglot, i.e., the microservices are written in different languages.It’s worth noting that these services have no dependencies on Istio, but make an interestingservice mesh example, particularly because of the multitude of services, languages and versionsfor thereviews service.

Before you begin

If you haven’t already done so, setup Istio by following the instructionsin theinstallation guide.

Istio supports the KubernetesGateway API and intends to make it the default API for traffic management in the future.The following instructions allow you to choose to use either the Gateway API or the Istio configuration API when configuringtraffic management in the mesh. Follow instructions under either theGateway API orIstio APIs tab,according to your preference.

Note that the Kubernetes Gateway API CRDs do not come installed by default on most Kubernetes clusters, so make sure they areinstalled before using the Gateway API:

$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \  kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/experimental-install.yaml

Deploying the application

To run the sample with Istio requires no changes to theapplication itself. Instead, you simply need to configure and run the services in anIstio-enabled environment, with Envoy sidecars injected along side each service.The resulting deployment will look like this:

Bookinfo Application
Bookinfo Application

All of the microservices will be packaged with an Envoy sidecar that intercepts incomingand outgoing calls for the services, providing the hooks needed to externally control,via the Istio control plane, routing, telemetry collection, and policy enforcementfor the application as a whole.

Start the application services

If you use GKE, please ensure your cluster has at least 4 standard GKE nodes. If you use Minikube, please ensure you have at least 4GB RAM.
  1. Change directory to the root of the Istio installation.

  2. The default Istio installation usesautomatic sidecar injection.Label the namespace that will host the application withistio-injection=enabled:

    $ kubectl label namespace default istio-injection=enabled
  3. Deploy your application using thekubectl command:

    Zip
    $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo.yaml@

    The command launches all four services shown in thebookinfo application architecture diagram.All 3 versions of the reviews service, v1, v2, and v3, are started.

    In a realistic deployment, new versions of a microservice are deployedover time instead of deploying all versions simultaneously.
  4. Confirm all services and pods are correctly defined and running:

    $ kubectl get servicesNAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGEdetails       ClusterIP   10.0.0.31    <none>        9080/TCP   6mkubernetes    ClusterIP   10.0.0.1     <none>        443/TCP    7dproductpage   ClusterIP   10.0.0.120   <none>        9080/TCP   6mratings       ClusterIP   10.0.0.15    <none>        9080/TCP   6mreviews       ClusterIP   10.0.0.170   <none>        9080/TCP   6m

    and

    $ kubectl get podsNAME                             READY     STATUS    RESTARTS   AGEdetails-v1-1520924117-48z17      2/2       Running   0          6mproductpage-v1-560495357-jk1lz   2/2       Running   0          6mratings-v1-734492171-rnr5l       2/2       Running   0          6mreviews-v1-874083890-f0qf0       2/2       Running   0          6mreviews-v2-1343845940-b34q5      2/2       Running   0          6mreviews-v3-1813607990-8ch52      2/2       Running   0          6m
  5. To confirm that the Bookinfo application is running, send a request to it by acurl command from some pod, forexample fromratings:

    $ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"<title>Simple Bookstore App</title>

Determine the ingress IP and port

Now that the Bookinfo services are up and running, you need to make the application accessible from outside of yourKubernetes cluster, e.g., from a browser. A gateway is used for this purpose.

  1. Create a gateway for the Bookinfo application:

    Create anIstio Gateway using the following command:

    Zip
    $ kubectl apply -f @samples/bookinfo/networking/bookinfo-gateway.yaml@gateway.networking.istio.io/bookinfo-gateway createdvirtualservice.networking.istio.io/bookinfo created

    Confirm the gateway has been created:

    $ kubectl get gatewayNAME               AGEbookinfo-gateway   32s

    Followthese instructions to set theINGRESS_HOST andINGRESS_PORT variables for accessing the gateway. Return here, when they are set.

  2. SetGATEWAY_URL:

    $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

Confirm the app is accessible from outside the cluster

To confirm that the Bookinfo application is accessible from outside the cluster, run the followingcurl command:

$ curl -s "http://${GATEWAY_URL}/productpage" | grep -o "<title>.*</title>"<title>Simple Bookstore App</title>

You can also point your browser tohttp://$GATEWAY_URL/productpageto view the Bookinfo web page. If you refresh the page several times, you shouldsee different versions of reviews shown inproductpage, presented in a round robin style (redstars, black stars, no stars), since we haven’t yet used Istio to control theversion routing.

Define the service versions

Before you can use Istio to control the Bookinfo version routing, you need to define the availableversions.

Istio usessubsets, indestination rules,to define versions of a service.Run the following command to create default destination rules for the Bookinfo services:

Zip
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
Thedefault anddemoconfiguration profiles haveauto mutual TLS enabled by default.To enforce mutual TLS, use the destination rules insamples/bookinfo/networking/destination-rule-all-mtls.yaml.

Wait a few seconds for the destination rules to propagate.

You can display the destination rules with the following command:

$ kubectl get destinationrules -o yaml

What’s next

You can now use this sample to experiment with Istio’s features fortraffic routing, fault injection, rate limiting, etc.To proceed, refer to one or more of theIstio Tasks,depending on your interest.Configuring Request Routingis a good place to start for beginners.

Cleanup

When you’re finished experimenting with the Bookinfo sample, uninstall and cleanit up using the following command:

Zip
$ @samples/bookinfo/platform/kube/cleanup.sh@
Was this information useful?
Do you have any suggestions for improvement?

Thanks for your feedback!

[8]ページ先頭

©2009-2026 Movatter.jp