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
Antes de comenzar
Configura Istio siguiendo las instrucciones en la guía de instalación de Virtual Machine.
Despliega la aplicación de ejemplo Bookinfo (en el namespace
bookinfo
).Crea una VM y agrégala al namespace
vm
, siguiendo los pasos en Configurar la Virtual Machine.
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.
$ 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:
$ 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
Elimina la aplicación de ejemplo
Bookinfo
y su configuración siguiendo los pasos en limpieza deBookinfo
.Elimina el Service
mysqldb
:$ kubectl delete service mysqldb
Limpia la VM siguiendo los pasos en desinstalación de Virtual Machine.