Bookinfo 与虚拟机

此示例跨 Kubernetes 部署 Bookinfo 应用程序,其中一项服务在虚拟机 (VM) 上运行,并说明如何将此基础架构作为单个服务网格进行控制。

概述

Bookinfo running on VMs
在虚拟机上运行 Bookinfo

开始之前

在虚拟机上运行 MySQL

我们首先将在虚拟机上安装 MySQL,并将其配置为评分服务的后端。以下所有命令都应在虚拟机上运行。

安装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

设置身份验证

$ 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

您可以在Mysql上找到有关配置 MySQL 的详细信息。

在虚拟机上,将评分数据库添加到 mysql。

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

为了便于直观地检查 Bookinfo 应用程序输出的差异,您可以使用以下命令更改生成的评分来检查评分

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

以及更改评分

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

将 mysql 服务暴露给服务网格

虚拟机启动后,将自动注册到服务网格中。但是,就像创建 Pod 一样,在轻松访问它之前,我们仍然需要创建一个服务。

$ 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

使用 mysql 服务

Bookinfo 中的评分服务将使用机器上的数据库。为了验证其是否有效,请创建使用虚拟机上 mysql 数据库的评分服务的版本 2。然后指定路由规则,强制审查服务使用评分版本 2。

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

创建路由规则,强制 Bookinfo 使用评分后端

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

您可以验证 Bookinfo 应用程序的输出是否显示 Reviewer1 的 1 星和 Reviewer2 的 4 星,或者更改虚拟机上的评分并查看结果。

从虚拟机访问 Kubernetes 服务

在上面的示例中,我们将虚拟机视为仅服务器。我们还可以从虚拟机无缝调用 Kubernetes 服务

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

Istio 的DNS 代理会自动为虚拟机配置 DNS,使我们能够调用 Kubernetes 主机名。

清理

  • 按照Bookinfo清理中的步骤删除Bookinfo示例应用程序及其配置。

  • 删除mysqldb服务

    $ kubectl delete service mysqldb
    
  • 按照虚拟机卸载中的步骤清理虚拟机。

这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!