Bookinfo con una Virtual Machine

Este ejemplo despliega la aplicación Bookinfo a través de Kubernetes con un Service ejecutándose en una Virtual Machine (VM), e ilustra cómo controlar esta infraestructura como una sola malla.

Visión general

Bookinfo ejecutándose en VMs
Bookinfo ejecutándose en VMs

Antes de comenzar

Ejecutar MySQL en la VM

Primero instalaremos MySQL en la VM, y lo configuraremos como un backend para el Service ratings. Todos los comandos a continuación deben ejecutarse en la VM.

Instala mariadb:

$ sudo apt-get update && sudo apt-get install -y mariadb-server
$ sudo sed -i '/bind-address/c\bind-address  = 0.0.0.0' /etc/mysql/mariadb.conf.d/50-server.cnf

Configura la autenticación:

$ cat <<EOF | sudo mysql
# Grant access to root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
# Grant root access to other IPs
CREATE USER 'root'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit;
EOF
$ sudo systemctl restart mysql

Puedes encontrar detalles sobre configurar MySQL en Mysql.

En la VM agrega la base de datos ratings a mysql.

$ curl -LO https://raw.githubusercontent.com/istio/istio/release-1.27/samples/bookinfo/src/mysql/mysqldb-init.sql
$ mysql -u root -ppassword < mysqldb-init.sql

Para facilitar la inspección visual de la diferencia en la salida de la aplicación Bookinfo, puedes cambiar las calificaciones que se generan usando los siguientes comandos para inspeccionar las calificaciones:

$ mysql -u root -ppassword test -e "select * from ratings;"
+----------+--------+
| ReviewID | Rating |
+----------+--------+
|        1 |      5 |
|        2 |      4 |
+----------+--------+

y para cambiar las calificaciones

$ mysql -u root -ppassword test -e  "update ratings set rating=1 where reviewid=1;select * from ratings;"
+----------+--------+
| ReviewID | Rating |
+----------+--------+
|        1 |      1 |
|        2 |      4 |
+----------+--------+

Exponer el Service mysql a la mesh

Cuando la Virtual Machine se inicia, se registrará automáticamente en la mesh. Sin embargo, al igual que cuando se crea un Pod, aún necesitamos crear un Service antes de poder acceder a él fácilmente.

$ cat <<EOF | kubectl apply -f - -n vm
apiVersion: v1
kind: Service
metadata:
  name: mysqldb
  labels:
    app: mysqldb
spec:
  ports:
  - port: 3306
    name: tcp
  selector:
    app: mysqldb
EOF

Usar el Service mysql

El Service ratings en Bookinfo usará la DB en la máquina. Para verificar que funciona, crea la versión 2 del Service ratings que usa la base de datos mysql en la VM. Luego especifica reglas de enrutamiento que fuerzan al Service review a usar la versión 2 de ratings.

Zip
$ kubectl apply -n bookinfo -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2-mysql-vm.yaml@

Crea reglas de enrutamiento que forzarán a Bookinfo a usar el backend ratings:

Zip
$ kubectl apply -n bookinfo -f @samples/bookinfo/networking/virtual-service-ratings-mysql-vm.yaml@

Puedes verificar que la salida de la aplicación Bookinfo muestra 1 estrella de Reviewer1 y 4 estrellas de Reviewer2 o cambiar las calificaciones en tu VM y ver los resultados.

Alcanzar los Services de Kubernetes desde la Virtual Machine

En el ejemplo anterior, tratamos nuestra Virtual Machine solo como un servidor. También podemos llamar sin problemas a los Services de Kubernetes desde nuestra Virtual Machine:

$ curl productpage.bookinfo:9080/productpage
...
<title>Simple Bookstore App</title>
...

El DNS proxying de Istio configura automáticamente el DNS para la Virtual Machine, permitiéndonos hacer llamadas a los hostnames de Kubernetes.

Limpieza

¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!