系列文章:html
总目录索引:九析带你轻松完爆 istio 服务网格系列教程程序员
目录
web
1 前言正则表达式
2 邀约api
3 Routing Rule 语法tomcat
4 Routing Rule 优先级运维
5 Routing Rule 匹配规则/条件ide
5.1 基于 HttpMatchRequest测试
5.2 基于权重spa
6 流量操做(HTTPRoute)
1 前言
若是你对博客有任何疑问,请告诉我。
2 邀约
你能够从 b 站搜索 “九析”,获取免费的、更生动的视频资料:
3 Routing Rule 语法
在上节中介绍了 Virtual Service 的概念,并运行了一个简单的样例,你们应该对 Virtual Service 有了一个大体的了解。
Virutal Service 中最重要的概念就是路由规则(Routing Rule),注意跟 Istio traffic management 中的另一个概念——目的地规则(Destination Rule)区分,前者是一个逻辑概念,然后者则跟 Virtual Service 同样,是实际能够部署到 K8S 上的 Istio 资源。
在解释路由规则以前,这里先举一个例子:
又到了招聘的高峰期,HR 陆续招聘了一批校园毕业生。招聘结束后,这些毕业生要分配到具体的工做岗位。分配的规则以下:
1、986 学校毕业的学生分配到基础平台组
2、普通学校毕业的学生分配到交易平台组
3、黑马程序员毕业的学生分配到运维平台组
上面的例子提到了两个概念。一:匹配规则(或匹配条件);二:路由目的地。这其实也就是这节介绍的主角 Routing Rule,Routing Rule 这两个单词就完美的包含了上面两个概念。
下面再接着看代码,加深一下理解:
语法简单解释以下,大意也就是匹配 XX 规则就路由到 OO,若是不匹配规则就路由到 SY(有点 if...else... 的味道):
match...route destination.../ route destination ...
固然这里有一点须要澄清,就是匹配条件并不是强制,也就是说路由规则不必定非要有匹配项(match),仅有路由也是能够的。
翻看第二十章运行本人设计的用例,执行命令和执行结果以下截图所示:
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 路由规则。