mirror of https://github.com/istio/istio.io.git
				
				
				
			update bookinfo.md (#511)
* update bookinfo.md * fix intelligent-routing guide and related tasks * minor fixes * nits * fix broken links
This commit is contained in:
		
							parent
							
								
									9d4dc380cf
								
							
						
					
					
						commit
						b11d3a3724
					
				|  | @ -1,6 +1,6 @@ | |||
| --- | ||||
| title: Bookinfo on Kubernetes | ||||
| overview: This sample deploys a simple application composed of four separate microservices which will be used to demonstrate various features of the Istio service mesh. | ||||
| title: Bookinfo Sample Application | ||||
| overview: This guide deploys a sample application composed of four separate microservices which will be used to demonstrate various features of the Istio service mesh. | ||||
| 
 | ||||
| order: 10 | ||||
| 
 | ||||
|  | @ -10,18 +10,12 @@ redirect_from: "/docs/samples/bookinfo.html" | |||
| --- | ||||
| {% include home.html %} | ||||
| 
 | ||||
| This sample deploys a simple application composed of four separate microservices which will be used | ||||
| This guide deploys a sample application composed of four separate microservices which will be used | ||||
| to demonstrate various features of the Istio service mesh. | ||||
| 
 | ||||
| ## Before you begin | ||||
| * If you use GKE, please ensure your cluster has at least 4 standard GKE nodes. | ||||
| 
 | ||||
| * Setup Istio by following the instructions in the | ||||
| [Installation guide]({{home}}/docs/setup/kubernetes/quick-start.html). | ||||
| 
 | ||||
| ## Overview | ||||
| 
 | ||||
| In this sample we will deploy a simple application that displays information about a | ||||
| In this guide we will deploy a simple application that 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. | ||||
|  | @ -45,34 +39,63 @@ The end-to-end architecture of the application is shown below. | |||
| <figcaption>BookInfo Application without Istio</figcaption></figure> | ||||
| 
 | ||||
| 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 interesting | ||||
| sevice mesh example, particularly because of the multitude of services, languages and versions | ||||
| for the reviews service. | ||||
| 
 | ||||
| ## Start the application | ||||
| ## Deploying the application | ||||
| 
 | ||||
| To run the sample with Istio requires no changes to the | ||||
| application itself. Instead, we simply need to configure and run the services in an | ||||
| Istio-enabled environment, with Envoy sidecars injected along side each service. | ||||
| The needed commands and configuration vary depending on the runtime environment | ||||
| although in all cases the resulting deployment will look like this: | ||||
| 
 | ||||
| <figure><img src="./img/bookinfo/withistio.svg" alt="BookInfo Application" title="BookInfo Application" /> | ||||
| <figcaption>BookInfo Application</figcaption></figure> | ||||
| 
 | ||||
| All of the microservices will be packaged with an Envoy sidecar that intercepts incoming | ||||
| and outgoing calls for the services, providing the hooks needed to externally control, | ||||
| via the Istio control plane, routing, telemetry collection, and policy enforcement | ||||
| for the application as a whole. | ||||
| 
 | ||||
| Before you begin, if you haven't already done so, setup Istio by following the instructions | ||||
| corresponding to your platform [installation guide]({{home}}/docs/setup/) and then | ||||
| run the application using the instructions in one of the following sections. | ||||
| 
 | ||||
| ### Running on Kubernetes | ||||
| 
 | ||||
| > Note: If you use GKE, please ensure your cluster has at least 4 standard GKE nodes. | ||||
| 
 | ||||
| 1. Change directory to the root of the Istio installation directory. | ||||
| 
 | ||||
| 1. Bring up the application containers: | ||||
| 
 | ||||
|    If you are using a cluster with | ||||
|    [automatic sidecar injection]({{home}}/docs/setup/kubernetes/automatic-sidecar-inject.html) | ||||
|    enabled, simply deploy the services using `kubectl`: | ||||
| 
 | ||||
|    ```bash | ||||
|    kubectl apply -f samples/bookinfo/kube/bookinfo.yaml | ||||
|    ``` | ||||
| 
 | ||||
|    If you are using [manual sidecar injection]({{home}}/docs/setup/kubernetes/manual-sidecar-inject.html), | ||||
|    use the folloiwng command instead: | ||||
| 
 | ||||
|    ```bash | ||||
|    kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml) | ||||
|    ``` | ||||
| 
 | ||||
|    The above command launches four microservices and creates the gateway | ||||
|    ingress resource as illustrated in the diagram below. | ||||
|    The reviews microservice has 3 versions: v1, v2, and v3. | ||||
|    The `istioctl kube-inject` command is used to manually modify the `bookinfo.yaml` | ||||
|    file before creating the deployments as documented [here]({{home}}/docs/reference/commands/istioctl.html#istioctl-kube-inject). | ||||
| 
 | ||||
|    Either of the above commands launches all four microservices and creates the gateway | ||||
|    ingress resource as illustrated in the above diagram. | ||||
|    All 3 versions of the reviews service, v1, v2, and v3, are started. | ||||
| 
 | ||||
|    > Note that in a realistic deployment, new versions of a microservice are deployed | ||||
|    over time instead of deploying all versions simultaneously. | ||||
| 
 | ||||
|    Notice that the `istioctl kube-inject` command is used to modify the `bookinfo.yaml` | ||||
|    file before creating the deployments. This injects Envoy into Kubernetes resources | ||||
|    as documented [here]({{home}}/docs/reference/commands/istioctl.html#istioctl-kube-inject). | ||||
|    Consequently, all of the microservices are now packaged with an Envoy sidecar | ||||
|    that manages incoming and outgoing calls for the service. The updated diagram looks | ||||
|    like this: | ||||
| 
 | ||||
|    <figure><img src="./img/bookinfo/withistio.svg" alt="BookInfo Application" title="BookInfo Application" /> | ||||
|    <figcaption>BookInfo Application</figcaption></figure> | ||||
| 
 | ||||
| 1. Confirm all services and pods are correctly defined and running: | ||||
| 
 | ||||
|    ```bash | ||||
|  | @ -142,19 +165,59 @@ This application is polyglot, i.e., the microservices are written in different l | |||
|    export GATEWAY_URL=$(kubectl get po -n istio-system -l istio=ingress -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}') | ||||
|    ``` | ||||
| 
 | ||||
| 1. Confirm that the BookInfo application is running with the following `curl` command: | ||||
| ### Running on Docker with Consul | ||||
| 
 | ||||
| 1. Change directory to the root of the Istio installation directory. | ||||
| 
 | ||||
| 1. Bring up the Istio control plane and the application containers: | ||||
| 
 | ||||
|     ```bash | ||||
|     docker-compose -f samples/bookinfo/consul/docker-compose.yaml up -d | ||||
|     ``` | ||||
| 
 | ||||
| 1. Confirm that all docker containers are running: | ||||
| 
 | ||||
|    ```bash | ||||
|    curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage | ||||
|    docker ps -a | ||||
|    ``` | ||||
| 
 | ||||
|    > If the `Istio-Pilot` container terminates, re-run the command from the previous step. | ||||
| 
 | ||||
| 1. Set the GATEWAY_URL: | ||||
| 
 | ||||
|    ```bash | ||||
|    200 | ||||
|    export GATEWAY_URL=localhost:9081 | ||||
|    ``` | ||||
|     | ||||
| 
 | ||||
| ## What's next | ||||
| 
 | ||||
| To confirm that the BookInfo application is running, run the following `curl` command: | ||||
| 
 | ||||
| ```bash | ||||
| curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage | ||||
| ``` | ||||
| ```bash | ||||
| 200 | ||||
| ``` | ||||
| 
 | ||||
| You can also point your browser to `http://$GATEWAY_URL/productpage` | ||||
| to view the Bookinfo web page. If you refresh the page several times, you should | ||||
| see different versions of reviews shown in productpage, presented in a round robin style (red | ||||
| stars, black stars, no stars), since we haven't yet used Istio to control the | ||||
| version routing. | ||||
| 
 | ||||
| You can now use this sample to experiment with Istio's features for | ||||
| traffic routing, fault injection, rate limitting, etc.. | ||||
| To proceed, refer to one or more of the [Istio Guides]({{home}}/docs/guides), | ||||
| depending on your interest. [Intelligent Routing]({{home}}/docs/guides/intelligent-routing.html) | ||||
| is a good place to start for beginners. | ||||
| 
 | ||||
| ## Cleanup | ||||
| 
 | ||||
| When you're finished experimenting with the BookInfo sample, you can | ||||
| uninstall it in a Kubernetes environment as follows: | ||||
| uninstall and clean it up using the following instructions. | ||||
| 
 | ||||
| ### Uninstall from Kubernetes environment | ||||
| 
 | ||||
| 1. Delete the routing rules and terminate the application pods | ||||
| 
 | ||||
|  | @ -169,16 +232,16 @@ uninstall it in a Kubernetes environment as follows: | |||
|    kubectl get pods          #-- the BookInfo pods should be deleted | ||||
|    ``` | ||||
| 
 | ||||
| If you are using the Docker Compose version of the demo, run the following | ||||
| command to clean up: | ||||
| ### Uninstall from Docker environment | ||||
| 
 | ||||
| 1. Showdown the application | ||||
| 
 | ||||
|   ```bash | ||||
|   docker-compose -f samples/bookinfo/consul/docker-compose.yaml down | ||||
|   ``` | ||||
| 
 | ||||
| ## What's next | ||||
| 2. Cleanup rules | ||||
| 
 | ||||
| Now that you have the BookInfo sample up and running, you can point your browser to `http://$GATEWAY_URL/productpage` | ||||
| to see the running application and use Istio to control traffic routing, inject faults, rate limit services, etc.. | ||||
| 
 | ||||
| To get started, check out the [request routing task]({{home}}/docs/tasks/request-routing.html). | ||||
|   ``` | ||||
|   TBD | ||||
|   ``` | ||||
|  |  | |||
|  | @ -1,59 +1,55 @@ | |||
| --- | ||||
| title: Intelligent Routing | ||||
| overview: This sample demonstrates how to use various traffic management capabilities of Istio service mesh running on Kubernetes. | ||||
| overview: This guide demonstrates how to use various traffic management capabilities of an Istio service mesh. | ||||
| 
 | ||||
| order: 20 | ||||
| draft: true | ||||
| layout: docs | ||||
| type: markdown | ||||
| --- | ||||
| {% include home.html %} | ||||
| 
 | ||||
| This sample demonstrates how to use various traffic management capabilities | ||||
| of Istio service mesh running on Kubernetes. | ||||
| 
 | ||||
| ## Before you begin | ||||
| * Describe installation options. | ||||
| 
 | ||||
| * Install Istio control plane in a Kubernetes cluster by following the quick start instructions in the | ||||
| [Installation guide]({{home}}/docs/setup/kubernetes/quick-start.html). | ||||
| This guide demonstrates how to use various traffic management capabilities | ||||
| of an Istio service mesh. | ||||
| 
 | ||||
| ## Overview | ||||
| 
 | ||||
| Placeholder. | ||||
| Deploying a microservice-based application in an Istio service mesh allows one | ||||
| to externally control service monitoring and tracing, request (version) routing, resiliency testing, | ||||
| security and policy enforcement, etc., in a consistent way across the services, | ||||
| for the application as a whole. | ||||
| 
 | ||||
| ## Application Setup | ||||
| In this guide, we will use the [Bookinfo sample application]({{home}}/docs/guides/bookinfo.html) | ||||
| to show how operators can dynamically configure request routing and fault injection | ||||
| for a running application. | ||||
| 
 | ||||
| 1. Steps | ||||
| ## Before you begin | ||||
| 
 | ||||
| * Install the Istio control plane by following the instructions | ||||
|   corresponding to your platform [installation guide]({{home}}/docs/setup/). | ||||
| 
 | ||||
| * Run the Bookinfo sample application by following the applicable | ||||
|   [application deployment instructions]({{home}}/docs/guides/bookinfo.html#deploying-the-application). | ||||
| 
 | ||||
| ## Tasks | ||||
| 
 | ||||
| 1. [Request routing]({{home}}/docs/tasks/request-routing.html). | ||||
| 1. [Request routing]({{home}}/docs/tasks/traffic-management/request-routing.html) This task will first | ||||
|    direct all incoming traffic for the Bookinfo application to the v1 version of the | ||||
|    `reviews` service. It will then send traffic only from a specific test user to version v2, | ||||
|    leaving all other users unaffected. | ||||
| 
 | ||||
| 1. [Fault injection]({{home}}/docs/tasks/fault-injection.html). | ||||
| 1. [Fault injection]({{home}}/docs/tasks/traffic-management/fault-injection.html) We will now use Istio to | ||||
|    test the resiliency of the Bookinfo application by injecting an artificial delay in | ||||
|    requests between the `reviews:v2` and `ratings` services. Observing the resulting behavior | ||||
|    as the test user, we will notice that the v2 version of the `reviews` service has a bug. | ||||
|    Note that all other users are unaware of this testing against the live system. | ||||
| 
 | ||||
| 1. [Version migration]({{home}}/docs/tasks/traffic-management/version-migration.html) Finally, we will | ||||
|    use Istio to gradually migrate traffic for all users from to a v3 version of | ||||
|    the `reviews` service, one which includes the fix for the bug discovered in v2. | ||||
| 
 | ||||
| ## Cleanup | ||||
| 
 | ||||
| When you're finished experimenting with the BookInfo sample, you can | ||||
| uninstall it as follows in a Kubernetes environment: | ||||
| 
 | ||||
| 1. Delete the routing rules and terminate the application pods | ||||
| 
 | ||||
|    ```bash | ||||
|    samples/bookinfo/kube/cleanup.sh | ||||
|    ``` | ||||
| 
 | ||||
| 1. Confirm shutdown | ||||
| 
 | ||||
|    ```bash | ||||
|    istioctl get route-rules   #-- there should be no more routing rules | ||||
|    kubectl get pods           #-- the BookInfo pods should be deleted | ||||
|    ``` | ||||
| 
 | ||||
| If you are using the Docker Compose version of the demo, run the following | ||||
| command to clean up: | ||||
| 
 | ||||
|   ```bash | ||||
|   docker-compose -f samples/bookinfo/consul/docker-compose.yaml down | ||||
|   ``` | ||||
| 
 | ||||
| uninstall it by following the | ||||
| [Bookinfo cleanup instructions]({{home}}/docs/guides/bookinfo.html#cleanup) | ||||
| corresponding to your environment. | ||||
|  |  | |||
|  | @ -219,16 +219,16 @@ You can now deploy your own application or one of the sample applications provid | |||
| installation like [BookInfo]({{home}}/docs/guides/bookinfo.html). | ||||
| Note: the application must use HTTP/1.1 or HTTP/2.0 protocol for all its HTTP traffic because HTTP/1.0 is not supported. | ||||
| 
 | ||||
| If you have the Istio-Initializer as shown above installed, you can deploy the application directly via | ||||
| `kubectl create`, the Istio-Initializer will automatically inject Envoy containers in your application pods: | ||||
| If you started the Istio-Initializer, as shown above, you can deploy the application directly using | ||||
| `kubectl create`. The Istio-Initializer will automatically inject Envoy containers into your application pods: | ||||
| 
 | ||||
| ```bash | ||||
| kubectl create -f <your-app-spec>.yaml | ||||
| ``` | ||||
| 
 | ||||
| If you do not have the Istio-Initializer as shown above installed, when deploying the application, you must | ||||
| If you do not have the Istio-Initializer installed, you must | ||||
| use [istioctl kube-inject]({{home}}/docs/reference/commands/istioctl.html#istioctl-kube-inject) to | ||||
| automatically inject Envoy containers in your application pods: | ||||
| manuallly inject Envoy containers in your application pods before deploying them: | ||||
| 
 | ||||
| ```bash | ||||
| kubectl create -f <(istioctl kube-inject -f <your-app-spec>.yaml) | ||||
|  |  | |||
|  | @ -105,7 +105,7 @@ continue without any errors. | |||
| 
 | ||||
|   However, we already have this fix running in v3 of the reviews service, so we can simply | ||||
|   fix the problem by migrating all | ||||
|   traffic to `reviews:v3` as described in the [request routing task](./request-routing.html). | ||||
|   traffic to `reviews:v3` as described in the [version migration](./version-migration.html). | ||||
| 
 | ||||
|   (Left as an exercise for the reader - change the delay rule to | ||||
|   use a 2.8 second delay and then run it against the v3 version of reviews.) | ||||
|  | @ -114,8 +114,6 @@ continue without any errors. | |||
| 
 | ||||
| * Learn more about [fault injection]({{home}}/docs/concepts/traffic-management/fault-injection.html). | ||||
| 
 | ||||
| * Limit requests to the BookInfo `ratings` service with Istio [rate limiting]({{home}}/docs/tasks/policy-enforcement/rate-limiting.html). | ||||
| 
 | ||||
| * If you are not planning to explore any follow-on tasks, refer to the | ||||
|   [BookInfo cleanup]({{home}}/docs/guides/bookinfo.html#cleanup) instructions | ||||
|   to shutdown the application and cleanup the associated rules. | ||||
|  |  | |||
|  | @ -19,6 +19,13 @@ This task shows you how to configure dynamic request routing based on weights an | |||
| 
 | ||||
| * Deploy the [BookInfo]({{home}}/docs/guides/bookinfo.html) sample application. | ||||
| 
 | ||||
| > Note: This task assumes you are deploying the application on Kubernetes. | ||||
|   All of the example commands are using the Kubernetes version of the rule yaml files | ||||
|   (e.g., `samples/bookinfo/kube/route-rule-all-v1.yaml`). If you are running this | ||||
|   task in a different environment, change `kube` to the directory that corresponds | ||||
|   to your runtime (e.g., samples/bookinfo/consul/route-rule-all-v1.yaml for | ||||
|   the Consul-based runtime). | ||||
| 
 | ||||
| ## Content-based routing | ||||
| 
 | ||||
| Because the BookInfo sample deploys 3 versions of the reviews microservice, | ||||
|  | @ -28,7 +35,8 @@ star ratings. | |||
| This is because without an explicit default version set, Istio will | ||||
| route requests to all available versions of a service in a random fashion. | ||||
| 
 | ||||
| > Note: This task assumes you don't have any routes set yet. If you've already created conflicting route rules for the sample, you'll need to use `replace` rather than `create` in one or both of the following commands. | ||||
| > Note: This task assumes you don't have any routes set yet. If you've already created conflicting route rules for the sample, | ||||
|   you'll need to use `replace` rather than `create` in one or both of the following commands. | ||||
| 
 | ||||
| 1. Set the default version for all microservices to v1. | ||||
| 
 | ||||
|  | @ -38,6 +46,7 @@ route requests to all available versions of a service in a random fashion. | |||
| 
 | ||||
|    > Note: In a Kubernetes deployment of Istio, you can replace `istioctl` | ||||
|    > with `kubectl` in the above, and for all other CLI commands. | ||||
|    > Note, however, that `kubectl` currently does not provide input validation. | ||||
| 
 | ||||
|    You can display the routes that are defined with the following command: | ||||
| 
 | ||||
|  | @ -120,11 +129,6 @@ route requests to all available versions of a service in a random fashion. | |||
|    istioctl create -f samples/bookinfo/kube/route-rule-reviews-test-v2.yaml | ||||
|    ``` | ||||
| 
 | ||||
|    > Note: In a Consul-based setup, use the following command: | ||||
|      ```bash | ||||
|      istioctl create -f samples/bookinfo/consul/consul-reviews-v1.yaml | ||||
|      ``` | ||||
| 
 | ||||
|    Confirm the rule is created: | ||||
| 
 | ||||
|    ```bash | ||||
|  | @ -163,48 +167,7 @@ services. You then set a rule to selectively send traffic to version v2 of the r | |||
| on a header (i.e., a user cookie) in a request. | ||||
| 
 | ||||
| Once the v2 version has been tested to our satisfaction, we could use Istio to send traffic from | ||||
| all users to v2, optionally in a gradual fashion by using a sequence of rules with weights less | ||||
| than 100 to migrate traffic in steps, for example 10, 20, 30, ... 100%. | ||||
| 
 | ||||
| If you now proceed to the [fault injection task](./fault-injection.html), you will see | ||||
| that with simple testing, the v2 version of the reviews service has a bug, which is fixed in v3. | ||||
| So after exploring that task, you can route all user traffic from `reviews:v1` | ||||
| to `reviews:v3` in two steps as follows: | ||||
| 
 | ||||
| 1. First, transfer 50% of traffic from `reviews:v1` to `reviews:v3` with the following command: | ||||
| 
 | ||||
|    ```bash | ||||
|    istioctl replace -f samples/bookinfo/kube/route-rule-reviews-50-v3.yaml | ||||
|    ``` | ||||
| 
 | ||||
|    Notice that we are using `istioctl replace` instead of `create`. | ||||
| 
 | ||||
| 2. To see the new version you need to either Log out as test user "jason" or delete the test rules | ||||
| that we created exclusively for him: | ||||
| 
 | ||||
|    ```bash | ||||
|    istioctl delete routerule reviews-test-v2 | ||||
|    ``` | ||||
| 
 | ||||
|    You should now see *red* colored star ratings approximately 50% of the time when you refresh | ||||
|    the `productpage`. | ||||
| 
 | ||||
|    > Note: With the Envoy sidecar implementation, you may need to refresh the `productpage` multiple times | ||||
|    > to see the proper distribution. You can modify the rules to route 90% of the traffic to v3 to see red stars more often. | ||||
| 
 | ||||
| 3. When version v3 of the reviews microservice is stable, route 100% of the traffic to `reviews:v3`: | ||||
| 
 | ||||
|    ```bash | ||||
|    istioctl replace -f samples/bookinfo/kube/route-rule-reviews-v3.yaml | ||||
|    ``` | ||||
| 
 | ||||
|    > Note: In a Consul-based setup, use the following command: | ||||
|      ```bash | ||||
|      istioctl replace -f samples/bookinfo/consul/consul-reviews-v3.yaml | ||||
|      ``` | ||||
| 
 | ||||
|    You can now log in to the `productpage` as any user and you should always see book reviews | ||||
|    with *red* colored star ratings for each review. | ||||
| all users to v2, optionally in a gradual fashion. We'll explore this in a separate task. | ||||
| 
 | ||||
| ## What's next | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,90 @@ | |||
| --- | ||||
| title: Configuring Request Routing | ||||
| overview: This task shows you how to configure dynamic request routing based on weights and HTTP headers. | ||||
| 
 | ||||
| order: 10 | ||||
| 
 | ||||
| layout: docs | ||||
| type: markdown | ||||
| --- | ||||
| {% include home.html %} | ||||
| 
 | ||||
| This task shows you how to gradually migrate traffic from an old to new version of a service. | ||||
| With Istio, we can migrate the traffic in a gradual fashion by using a sequence of rules | ||||
| with weights less than 100 to migrate traffic in steps, for example 10, 20, 30, ... 100%. | ||||
| For simplicity this task will migrate the traffic from `reviews:v1` to `reviews:v3` in just | ||||
| two steps: 50%, 100%. | ||||
| 
 | ||||
| ## Before you begin | ||||
| 
 | ||||
| * Setup Istio by following the instructions in the | ||||
|   [Installation guide]({{home}}/docs/setup/). | ||||
| 
 | ||||
| * Deploy the [BookInfo]({{home}}/docs/guides/bookinfo.html) sample application. | ||||
| 
 | ||||
| > Note: This task assumes you are deploying the application on Kubernetes. | ||||
|   All of the example commands are using the Kubernetes version of the rule yaml files | ||||
|   (e.g., `samples/bookinfo/kube/route-rule-all-v1.yaml`). If you are running this | ||||
|   task in a different environment, change `kube` to the directory that corresponds | ||||
|   to your runtime (e.g., samples/bookinfo/consul/route-rule-all-v1.yaml for | ||||
|   the Consul-based runtime). | ||||
| 
 | ||||
| ## Weight-based version routing | ||||
| 
 | ||||
| 1. Set the default version for all microservices to v1. | ||||
| 
 | ||||
|    ```bash | ||||
|    istioctl create -f samples/bookinfo/kube/route-rule-all-v1.yaml | ||||
|    ``` | ||||
| 
 | ||||
| 1. Confirm v1 is the active version of the `reviews` service by opening http://$GATEWAY_URL/productpage in your browser. | ||||
| 
 | ||||
|    You should see the BookInfo application productpage displayed. | ||||
|    Notice that the `productpage` is displayed with no rating stars since `reviews:v1` does not access the ratings service. | ||||
| 
 | ||||
|    > Note: If you previously ran the [request routing](./request-routing.html) task, you may need to either log out | ||||
|      as test user "jason" or delete the test rules that were created exclusively for him: | ||||
| 
 | ||||
|      ```bash | ||||
|      istioctl delete routerule reviews-test-v2 | ||||
|      ``` | ||||
| 
 | ||||
| 1. First, transfer 50% of the traffic from `reviews:v1` to `reviews:v3` with the following command: | ||||
| 
 | ||||
|    ```bash | ||||
|    istioctl replace -f samples/bookinfo/kube/route-rule-reviews-50-v3.yaml | ||||
|    ``` | ||||
| 
 | ||||
|    Notice that we are using `istioctl replace` instead of `create`. | ||||
| 
 | ||||
| 1. Refresh the `productpage` in your browser and you should now see *red* colored star ratings approximately 50% of the time. | ||||
| 
 | ||||
|    > Note: With the current Envoy sidecar implementation, you may need to refresh the `productpage` very many times | ||||
|    > to see the proper distribution. You can modify the rules to route 90% of the traffic to v3 to see red stars more often. | ||||
| 
 | ||||
| 1. When version v3 of the `reviews` microservice is considered stable, we can route 100% of the traffic to `reviews:v3`: | ||||
| 
 | ||||
|    ```bash | ||||
|    istioctl replace -f samples/bookinfo/kube/route-rule-reviews-v3.yaml | ||||
|    ``` | ||||
| 
 | ||||
|    You can now log into the `productpage` as any user and you should always see book reviews | ||||
|    with *red* colored star ratings for each review. | ||||
| 
 | ||||
| ## Understanding what happened | ||||
| 
 | ||||
| In this task we migrated traffic from an old to new version of the `reviews` service using Istio's | ||||
| weighted routing feature. Note that this is very different than version migration using deployment features | ||||
| of container orchestration platforms, which use instance scaling to manage the traffic. | ||||
| With Istio, we can allow the two versions of the `reviews` service to scale up and down independently, | ||||
| without affecting the traffic distribution between them. | ||||
| For more about version routing with autoscaling, check out [Canary Deployments using Istio]({{home}}/blog/canary-deployments-using-istio.html). | ||||
| 
 | ||||
| 
 | ||||
| ## What's next | ||||
| 
 | ||||
| * Learn more about [request routing]({{home}}/docs/concepts/traffic-management/rules-configuration.html). | ||||
| 
 | ||||
| * If you are not planning to explore any follow-on tasks, refer to the | ||||
|   [BookInfo cleanup]({{home}}/docs/guides/bookinfo.html#cleanup) instructions | ||||
|   to shutdown the application and cleanup the associated rules. | ||||
		Loading…
	
		Reference in New Issue