系列文章:


总目录索引:九析带你轻松完爆 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 前言

        如果你对博客有任何疑问,请告诉我。第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第1张图片


2 邀约

        你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第2张图片


3 介绍

        在上章节介绍了一个使用 Virtual Service 实现按权重(weight)分配流量的例子。整个过程如下架构图所示:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第3张图片

        整个流控过程仅仅添加了一个 virtual service 就得以解决,有关 virtual service 的代码如下所示:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第4张图片

        但是上面这种方案在于调用方通过两层服务才能调用到最终的 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 的理论在下章节介绍。整个样例的架构图如下:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第5张图片

        样例所需要的资源文件介绍如下:

# 客户端,用来访问 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:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第6张图片

5.2 deployment 资源文件

        jiuxi-deploy.yaml:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第7张图片

5.3 service 资源文件

        jiuxi-svc.yaml:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第8张图片

5.4 Istio virtual service 资源文件

        jiuxi-vs.yaml:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第9张图片

5.5 Istio destination rule 资源文件

        jiuxi-dr.yaml:第二十二章 九析带你轻松完爆 Istio - destination rule 实例_第10张图片


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 实例_第11张图片

        自此,九析带你轻松完爆了 Istio destination rule 实例。