ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第二十一章 九析带你轻松完爆 service mesh - Istio 路由规则

2020-04-09 23:57:09  阅读:424  来源: 互联网

标签:完爆 匹配 九析 service svc Rule Routing 规则 路由


系列文章:


总目录索引:九析带你轻松完爆 istio 服务网格系列教程

目录

1 前言

2 邀约

3 Routing Rule 语法

4 Routing Rule 优先级

5 Routing Rule 匹配规则/条件

    5.1 基于 HttpMatchRequest

    5.2 基于权重

6 流量操作(HTTPRoute)


1 前言

        如果你对博客有任何疑问,请告诉我。1.png


2 邀约

        你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:clipboard2.png


3 Routing Rule 语法

        在上节中介绍了 Virtual Service 的概念,并运行了一个简单的样例,大家应该对 Virtual Service 有了一个大致的了解。

        Virutal Service 中最重要的概念就是路由规则(Routing Rule),注意跟 Istio traffic management 中的另外一个概念——目的地规则(Destination Rule)区分,前者是一个逻辑概念,而后者则跟 Virtual Service 一样,是实际可以部署到 K8S 上的 Istio 资源。

        在解释路由规则之前,这里先举一个例子:

        又到了招聘的高峰期,HR 陆续招聘了一批校园毕业生。招聘结束后,这些毕业生要分配到具体的工作岗位。分配的规则如下:

一、986 学校毕业的学生分配到基础平台组

二、普通学校毕业的学生分配到交易平台组

三、黑马程序员毕业的学生分配到运维平台组

        上面的例子提到了两个概念。一:匹配规则(或匹配条件);二:路由目的地。这其实也就是这节介绍的主角 Routing Rule,Routing Rule 这两个单词就完美的包含了上面两个概念。

下面再接着看代码,加深一下理解:clipboard3.png

        语法简单解释如下,大意也就是匹配 XX 规则就路由到 OO,如果不匹配规则就路由到 SY(有点 if...else... 的味道):

match...route destination.../ route destination ...

        当然这里有一点需要澄清,就是匹配条件并非强制,也就是说路由规则不一定非要有匹配项(match),仅有路由也是可以的。

        翻看第二十章运行本人设计的用例,执行命令和执行结果如下截图所示:clipboard4.png


4 Routing Rule 优先级

        路由规则从上到下按顺序进行评估,其中 Virtual Service 定义的第一个路由规则具有最高优先级。当然这里建议在每个虚拟服务中提供默认的“无条件”或者基于权重(weight)的规则来作为最后一个规则,以确保到虚拟服务的流量始终具有至少一条匹配的路由。


5 Routing Rule 匹配规则/条件

5.1 基于 HttpMatchRequest

        匹配规则/条件从关键字 match 开始,针对某些匹配条件,可以选择使用精确值(exact),前缀(prefix)或正则表达式来选择它们。 有关匹配条件字段及其可能值的完整列表可在 HTTPMatchRequest 找到。

        http 匹配条件样例资源文件如下,该样例中指明请求 uri 在忽略大小写的情况下,前缀如果是 /ratings/v2/,并且 http header 中 end-user 字段的值为 jason,就路由到命名空间为 prod 的名称为 ratings 的服务去:

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:  

    name: ratings-route

spec:  

    hosts:  

    - ratings.prod.svc.cluster.local  

    http:  

    - match:    

       - headers:        

            end-user:          

                exact: jason      

          uri:        

            prefix: "/ratings/v2/"      

          ignoreUriCase: true    

       route:    

       - destination:        

            host: ratings.prod.svc.cluster.local

5.2 基于权重

        路由规则除了基于 HTTPMatchRequest 匹配之外,还可以基于权重(weight),通过权重就可以轻松完爆 A/B 测试和金丝雀(Canary)发布了。权重设置如下所示:

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

    name: web-vs-svc

spec:

    hosts:

    - web-svc

    http:

    - route:

        - destination:

            host: httpd-svc

            weight: 20

        - destination:

            host: tomcat-svc

            weight: 80


6 流量操作(HTTPRoute)

        可以使用路由规则对流量做一些操作:

附加或者删除标题

重写 URL

为路由目的地设置重试策略

        有关流量操作的例子如下:

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

    name: web-vs-svc

spec:

    hosts:

    - web-svc

    http:

    - match:

       - uri:

            prefix: /index.html

          rewrite:

            uri: /index.html

          route:

          - destination:

                host: tomcat-svc

        有关流量操作的更多信息,可以参考 HTTPRoute

        自此,九析带你轻松完爆 Istio 路由规则。

标签:完爆,匹配,九析,service,svc,Rule,Routing,规则,路由
来源: https://blog.51cto.com/14625168/2486095

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有