系列文章:
总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 邀约
3 介绍
4 灰度
5 destination rule 样例
5.1 客户端资源文件
5.2 deployment 资源文件
5.3 service 资源文件
5.4 Istio virtual service 资源文件
5.5 Istio destination rule 资源文件
6 Istio 注入
7 验证 destination rule
1 前言
如果你对博客有任何疑问,请告诉我。
2 邀约
你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:
3 介绍
在上章节介绍了一个使用 Virtual Service 实现按权重(weight)分配流量的例子。整个过程如下架构图所示:
整个流控过程仅仅添加了一个 virtual service 就得以解决,有关 virtual service 的代码如下所示:
但是上面这种方案在于调用方通过两层服务才能调用到最终的 Pod(比如:客户端需要通过 web-svc 和 nginx-svc 才能最终调用到 Nginx Pod)。能不能仅仅只通过一层服务就能达到这样的效果呢?(即:只通过 web-svc)。答案是必须可以。
4 灰度
其实上面的样例非常山寨,导致根本就没有实际工作场景可以复制,仅仅只是为了展示独立 virtual service 功能。
但是按权重分配流量确是工作中常见的需求,比如灰度、金丝雀、蓝绿发布等。
灰度,意味着做事并没有那么敞亮,比如,你想跟一个心仪的女子上演一幕东京爱情故事,你的做法大概是跟她暧昧、爱抚、亲吻、最后进行爱的鼓掌。整个过程的本质就是完成一次状态转移,即从孤军奋战式撸管状态转移到团队协作式鼓掌状态。
灰度发布的过程跟上面的过程比较类似,都是亦步亦趋,循循善诱的过程。即:将版本 v1 的服务变更到版本 v2,但是却并不采用刚烈的极端做法。具体做法是先切 20% 流量给版本 v2,观察一阵子没啥异常事情发生,就再切 20% 流量,然后逐步切换剩下的其他流量,最终完成整个版本的替换以及所有用户流量的转移。
5 destination rule 样例
下面介绍使用 virtual service + destination rule 来实现灰度发布。有关 destination rule 的理论在下章节介绍。整个样例的架构图如下:
样例所需要的资源文件介绍如下:
# 客户端,用来访问 httpd-v1 和 httpd-v2 的容器资源文件
jiuxi-client.yaml
# deployment,声明并定义 httpd 的资源文件
jiuxi-deploy.yaml
# service,关联 httpd pod 的资源文件
jiuxi-svc.yaml
# Istio virtual service,声明流量路由和权重的资源文件
jiuxi-vs.yaml
# Istio destination rule,定义流量路由的资源文件
jiuxi-dr.yaml
5.1 客户端资源文件
jiuxi-client.yaml:
5.2 deployment 资源文件
jiuxi-deploy.yaml:
5.3 service 资源文件
jiuxi-svc.yaml:
5.4 Istio virtual service 资源文件
jiuxi-vs.yaml:
5.5 Istio destination rule 资源文件
jiuxi-dr.yaml:
6 Istio 注入
要使得 virtual service 和 destination rule 生效,必须要保证通讯双方都处于 Istio 服务网格之内,即:必须经过 Istio 的注入,执行语句如下:
istioctl kube-inject -f jiuxi-client.yaml | kubectl apply -f -
istioctl kube-inject -f jiuxi-deploy.yaml | kubectl apply -f -
7 验证 destination rule
登入 busybox client 容器,访问 jiuxi-svc,发现 dr 已经生效,截图如下:
自此,九析带你轻松完爆了 Istio destination rule 实例。