mirror of https://github.com/istio/istio.io.git
118 lines
5.1 KiB
Markdown
118 lines
5.1 KiB
Markdown
---
|
|
title: Integrating Virtual Machines
|
|
overview: This sample deploys the Bookinfo services across Kubernetes and a set of virtual machines, and illustrates how to use the Istio service mesh to control this infrastructure as a single mesh.
|
|
|
|
order: 60
|
|
layout: docs
|
|
type: markdown
|
|
---
|
|
{% include home.html %}
|
|
|
|
This sample deploys the Bookinfo services across Kubernetes and a set of
|
|
Virtual Machines, and illustrates how to use Istio service mesh to control
|
|
this infrastructure as a single mesh.
|
|
|
|
> Note: this guide is still under development and only tested on Google Cloud Platform.
|
|
On IBM Cloud or other platforms where overlay network of Pods is isolated from VM network,
|
|
VMs cannot initiate any direct communication to Kubernetes Pods even when using Istio.
|
|
|
|
## Overview
|
|
|
|
{% include figure.html width='80%' ratio='56.78%'
|
|
img='./img/mesh-expansion.svg'
|
|
alt='Bookinfo Application with Istio Mesh Expansion'
|
|
title='Bookinfo Application with Istio Mesh Expansion'
|
|
caption='Bookinfo Application with Istio Mesh Expansion'
|
|
%}
|
|
|
|
<!-- source of the drawing https://docs.google.com/drawings/d/1gQp1OTusiccd-JUOHktQ9RFZaqREoQbwl2Vb-P3XlRQ/edit -->
|
|
|
|
|
|
## Before you begin
|
|
|
|
* Setup Istio by following the instructions in the
|
|
[Installation guide]({{home}}/docs/setup/kubernetes/quick-start.html).
|
|
|
|
* Deploy the [Bookinfo]({{home}}/docs/guides/bookinfo.html) sample application (in the `bookinfo` namespace).
|
|
* Create a VM named 'vm-1' in the same project as Istio cluster, and [Join the Mesh]({{home}}/docs/setup/kubernetes/mesh-expansion.html).
|
|
|
|
## Running mysql on the VM
|
|
|
|
We will first install mysql on the VM, and configure it as a backend for the ratings service.
|
|
|
|
On the VM:
|
|
```bash
|
|
sudo apt-get update && sudo apt-get install -y mariadb-server
|
|
sudo mysql
|
|
# Grant access to root
|
|
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
|
|
quit;
|
|
sudo systemctl restart mysql
|
|
```
|
|
You can find details of configuring mysql at [Mysql](https://mariadb.com/kb/en/library/download/).
|
|
|
|
On the VM add ratings database to mysql.
|
|
```bash
|
|
# Add ratings db to the mysql db
|
|
curl -q https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/src/mysql/mysqldb-init.sql | mysql -u root -ppassword
|
|
```
|
|
To make it easy to visually inspect the difference in the output of the bookinfo application, you can change the ratings that are generated by using the following commands
|
|
```bash
|
|
# To inspect the ratings
|
|
mysql -u root -ppassword test -e "select * from ratings;"
|
|
+----------+--------+
|
|
| ReviewID | Rating |
|
|
+----------+--------+
|
|
| 1 | 5 |
|
|
| 2 | 4 |
|
|
+----------+--------+
|
|
# To change the ratings
|
|
mysql -u root -ppassword test -e "update ratings set rating=1 where reviewid=1;select * from ratings;"
|
|
+----------+--------+
|
|
| ReviewID | Rating |
|
|
+----------+--------+
|
|
| 1 | 1 |
|
|
| 2 | 4 |
|
|
+----------+--------+
|
|
```
|
|
|
|
## Find out the IP address of the VM that will be used to add it to the mesh
|
|
|
|
On the VM:
|
|
```bash
|
|
hostname -I
|
|
```
|
|
|
|
## Registering the mysql service with the mesh
|
|
On a host with access to `istioctl` commands, register the VM and mysql db service
|
|
```bash
|
|
istioctl register -n vm mysqldb <ip-address-of-vm> 3306
|
|
```
|
|
Sample output:
|
|
```
|
|
$ istioctl register -n vm mysqldb 10.150.0.5 3306
|
|
I1108 20:17:54.256699 40419 register.go:43] Registering for service 'mysqldb' ip '10.150.0.5', ports list [{3306 mysql}]
|
|
I1108 20:17:54.256815 40419 register.go:48] 0 labels ([]) and 1 annotations ([alpha.istio.io/kubernetes-serviceaccounts=default])
|
|
W1108 20:17:54.573068 40419 register.go:123] Got 'services "mysqldb" not found' looking up svc 'mysqldb' in namespace 'vm', attempting to create it
|
|
W1108 20:17:54.816122 40419 register.go:138] Got 'endpoints "mysqldb" not found' looking up endpoints for 'mysqldb' in namespace 'vm', attempting to create them
|
|
I1108 20:17:54.886657 40419 register.go:180] No pre existing exact matching ports list found, created new subset {[{10.150.0.5 <nil> nil}] [] [{mysql 3306 }]}
|
|
I1108 20:17:54.959744 40419 register.go:191] Successfully updated mysqldb, now with 1 endpoints
|
|
```
|
|
|
|
Note that the 'mysqldb' virtual machine does not need and should not have special Kubernetes privileges.
|
|
|
|
## Using the mysql service
|
|
|
|
The ratings service in bookinfo will use the DB on the machine. To verify that it works, create version 2 of the ratings service that uses the mysql db on the VM. Then specify route rules that force the review service to use the ratings version 2.
|
|
```bash
|
|
# Create the version of ratings service that will use mysql back end
|
|
istioctl kube-inject -n bookinfo -f samples/bookinfo/kube/bookinfo-ratings-v2-mysql-vm.yaml | kubectl apply -n bookinfo -f -
|
|
|
|
# Create route rules that will force bookinfo to use the ratings back end
|
|
istioctl create -n bookinfo -f samples/bookinfo/kube/route-rule-ratings-mysql-vm.yaml
|
|
```
|
|
|
|
You can verify the output of bookinfo application is showing 1 star from Reviewer1 and 4 stars from Reviewer2 or change the ratings on your VM and see the results.
|
|
|
|
You can also find some troubleshooting and other information in the [RawVM MySQL](https://github.com/istio/istio/blob/master/samples/rawvm/README.md) document in the meantime.
|