在 Istio 服务网格内连接外部 MySQL 数据库
2023-06-15 09:27:48 博客园

为了方便理解,以 Istio 官方提供的 Bookinfo 应用示例为例,利用 ratings 服务外部 MySQL 数据库。


(资料图片仅供参考)

Bookinfo应用的架构图如下:

其中,包含四个单独的微服务:

productpage:调用 detailsreviews两个服务,用来生成页面。details:包含了书籍的信息。reviews:包含了书籍相关的评论。它还会调用 ratings 微服务。rating:包含了由书籍评价组成的评级信息。

其中,reviews服务有 3 个版本:

v1 版本不会调用 ratings服务。v2 版本会调用 ratings服务,并使用 1 到 5 个黑色星形图标来显示评分信息。v3 版本会调用 ratings服务,并使用 1 到 5 个红色星形图标来显示评分信息。准备 MySQL 数据库

创建一个名为 test数据库,执行以下SQL创建表和数据:

DROP TABLE IF EXISTS `ratings`;CREATE TABLE `ratings`  (  `ReviewID` int(11) NOT NULL,  `Rating` int(11) NULL DEFAULT 0,  PRIMARY KEY (`ReviewID`) USING BTREE) ENGINE = InnoDB;INSERT INTO ratings (ReviewID, Rating) VALUES (1, 2);INSERT INTO ratings (ReviewID, Rating) VALUES (2, 4);
创建ServiceEntry

执行以下命令创建ServiceEntry:

kubectl apply -f - <

其中,192.168.1.116是 MySQL 数据库的IP,3306是 MySQL 数据库的端口。

创建ratings服务

首先,执行以下命令,获取密码的Base64编码:

echo -n "OneMoreSociety" | base64

其中,OneMoreSociety是连接 MySQL 数据库的密码。

然后,执行以下命令,创建 ratings服务:

kubectl apply -f - <

其中,T25lTW9yZVNvY2lldHk=是连接 MySQL 数据库的密码的Base64编码。

修改路由规则

执行以下命令,把对 reviews服务的调用全部路由到 v2 版本上:

kubectl apply -f - <

执行以下命令,把对 ratings服务的调用全部路由到 v2-mysql 版本上:

kubectl apply -f - <
效果

访问 productpage页面,可以看到 Reviewer1 显示2星, Reviewer2 显示4星,和数据库中的数据一致,如下图:

在Kiali中也可以看到对应的拓扑结构,如下图:

文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。

流量转移

访问 MySQL 数据库时,所有流量都路由到v1版本,具体配置如下:

kubectl apply -f - <

访问 MySQL 数据库时,把50%流量转移到v2版本,具体配置如下:

kubectl apply -f - <

访问 MySQL 数据库时,所有流量都路由到v2版本,具体配置如下:

kubectl apply -f - <

最后,感谢你这么帅,还给我点赞

微信公众号:万猫学社

微信扫描二维码

关注后回复「电子书」

获取12本Java必读技术书籍

最新新闻: