使用虛擬機的 Bookinfo

此範例會在 Kubernetes 上部署 Bookinfo 應用程式,並在虛擬機器 (VM) 上執行一項服務,並說明如何將此基礎結構作為單一網格進行控制。

概觀

Bookinfo running on VMs
在 VM 上執行的 Bookinfo

開始之前

在虛擬機上執行 MySQL

我們將首先在 VM 上安裝 MySQL,並將其設定為評分服務的後端。以下所有命令都應在 VM 上執行。

安裝 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 的詳細資訊。

在 VM 上將評分資料庫新增至 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 中的評分服務將使用機器上的資料庫。為了驗證它是否正常運作,請建立評分服務的第 2 版,使用 VM 上的 mysql 資料庫。然後指定路由規則,強制評論服務使用評分服務的第 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 星,或者更改您的 VM 上的評分並查看結果。

從虛擬機存取 Kubernetes 服務

在上面的例子中,我們將虛擬機視為僅僅是一台伺服器。我們也可以從虛擬機無縫地調用 Kubernetes 服務

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

Istio 的 DNS 代理會自動為虛擬機配置 DNS,使我們可以調用 Kubernetes 主機名稱。

清理

  • 按照 Bookinfo 清理中的步驟刪除 Bookinfo 範例應用程式及其配置。

  • 刪除 mysqldb 服務

    $ kubectl delete service mysqldb
    
  • 按照 虛擬機解除安裝中的步驟清理 VM。

這些資訊有用嗎?
您有任何改進建議嗎?

感謝您的回饋!