首页 > 数码 正文

istio 1.10学习笔记05: 流量管理API资源对象虚拟服务和目标规则

时间:2023-09-27 作者:佚名

Istio通过流量管理API进行流量配置。流量管理API使用Kubernetes的CRDs(自定义资源定义)来声明。 本节学习在前面2节配置请求路由中用过的两个API资源:虚拟服务VirtualService和目标路由DestinationRule。

虚拟服务VirtualService

使用虚拟服务可以为一个或多个主机名(hostnames)指定流量行为。在虚拟机服务中使用路由规则(route)告诉Envoy如何发送虚拟服务的流量到适当的目标(destination)。 路由(route)的目标(destination)可以是同一服务的不同版本,也可以是完全不同的服务。

下面是一个典型的用例,将流量发送到被指定为服务子集的不同版本。客户端将虚拟服务视为一个单一实体将请求发送到虚拟服务reviews,然后Envoy根据虚拟服务规则将流量路由到不同版本,25%的流量调用转到reviews服务的v2版本。 这是一个金丝雀发布的场景,逐步增加发送到新版本服务的流量百分比。

apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 75 - destination: host: reviews subset: v2 weight: 25

虚拟服务有如下两个使用场景:

通过单个虚拟服务处理多个应用程序服务,例如配置一个虚拟服务处理Kubernetes特定命名空间中的所有服务。映射单一的虚拟服务到多个“真实”服务,可以在不需要客户适应转换的情况下,将单体应用转换为微服务构建的复合应用系统。和网关整合并配置流量规则来控制出入流量

再来看一下“基于用户身份进行请求路由”这个例子中创建的虚拟服务VirtualService,将根据请求是否来自特定的用户,把它们路由到服务的不同版本:

apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - match: - headers: end-user: exact: jason route: - destination: host: reviews subset: v2 - route: - destination: host: reviews subset: v3

hosts字段指定虚拟服务的主机,是路由规则的应用目标,是客户端向服务发送请求时使用的一个或多个地址,这里只有一个reivews。 虚拟服务的主机名hosts可以是IP地址,DNS名称或者依赖于平台的一个简称(例如Kubernetes服务的短名称),隐式或显式的指向一个完全限定域名(FQDN)。 也可以使用通配符*前缀来创建一组匹配所有服务的路由规则。虚拟服务的hosts字段实际上不必是istio服务注册的一部分,它只是虚拟的目标地址,这样就可以为没有路由到网格内部的虚拟主机建模。

http字段包含了虚拟服务的路由规则,用来描述匹配条件和路由行为。通过路由规则把HTTP1.1, HTTP2和gRPC等流量发送到hosts字段指定的目标。一个路由规则具有0个或多个匹配条件(match),并包含指定的请求要流向哪个目标地址(destination)。 示例中的第一个路由规则就有一个匹配条件,以match字段开始,通过使用headers, end-user, exact等字段匹配请求头end-user=jason的请求。 route部分的destination字段指定了符合此条件的流量的实际目标地址。与虚拟机服务的hosts字段不同,destination的host字段必须是存在于isito服务注册中心的实际目标地址, 否则Envoy不知道将请求发送到哪里。在本例中host为Kubernetes中的reviews服务名(这里使用的Kubernetes服务的短名称设置)。destination片段还指定了reviews这个Kubernetes服务子集subset。

路由规则在匹配时按从上到下的顺序选择。因此一般建议提供一个默认的“无条件”或基于权重的规则作为每个虚拟服务的最后一条路由规则,确保流经虚拟服务的流量至少能够匹配一条路由规则。

路由规则是将特定流量子集路由到指定目标地址的强大工具。可以在流量端口、header 字段、URI 等内容上设置匹配条件。 例如,下面这个虚拟服务让用户发送请求到两个独立的服务:ratings 和 reviews,就好像它们是http://bookinfo.com/这个更大的虚拟服务的一部分。 虚拟服务规则根据请求的URI和指向适当服务的请求匹配流量。

apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: bookinfo spec: hosts: - bookinfo.com http: - match: - uri: prefix: /reviews route: - destination: host: reviews - match: - uri: prefix: /ratings route: - destination: host: ratings ... http: - match: sourceLabels: app: reviews route:

路由规则的配置十分灵活,除了上面例子中已经展示的,还可以使用路由规则在流量上执行一些操作,例如添加删除header、重写URL、为调用这一目标地址的请求设置重试策略等。 关于VirtualService的更多内容可以查看官方的配置手册https://istio.io/latest/zh/docs/reference/config/networking/virtual-service。

目标规则DestinationRule

虚拟服务用来配置如何将流量路由到目标地址,而目标规则就是用来配置流量真实的目标地址上的。可以使用目标规则来指定命名的服务子集,例如按版本为所有给定服务的实例分组,然后可以在虚拟服务的路由规则中使用这些服务子集来控制到服务不同实例的流量。 使用目标规则还可以在调用这个目标服务或特定子集时定制Envoy的流量策略,例如负载均衡策略、TLS安全模式或熔断器设置。

默认情况下,Istio使用轮询(ROUND_ROBIN)的负载均衡策略,实例池中的每个实例依次获取请求。Istio同时支持如下的负载均衡模型,可以在目标规则DestinationRule中为流向某个特定服务或服务子集的流量指定这些模型。

随机(RANDOM):请求以随机的方式转到池中的实例。权重:请求根据指定的百分比转到实例。最少请求(LEAST_CONN):请求被转到最少被访问的实例

在下面的示例中,目标规则为my-svc目标服务的3个子集配置了负载均衡策略,v1,v3为RANDOM,v2为ROUND_ROBIN:

apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: my-destination-rule spec: host: my-svc trafficPolicy: loadBalancer: simple: RANDOM subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 trafficPolicy: loadBalancer: simple: ROUND_ROBIN - name: v3 labels: version: v3

每个子集都是基于一个或多个labels定义的,在Kubernetes中它是附加到像Pod这种对象上的键/值对。这些标签应用于Kubernetes服务的Deployment并作为metadata来识别不同的版本。

总结

本节学习了Isito流量管理API的两个资源对象VirtualService和DestinationRule。 虚拟服务用来配置如何将流量路由到目标地址,虚拟服务的路由规则可以在流量端口、header 字段、URI 等内容上设置匹配条件,将流量到路由到适当的目标,同时还可以使用路由规则在流量上执行一些操作,例如添加删除header、重写URL、为调用这一目标地址的请求设置重试策略等。 目标规则是应用在目标地址上的规则,使用目标规则可以在调用这个目标服务或特定子集时定制Envoy的流量策略,例如负载均衡策略、TLS安全模式或熔断器设置。

参考https://istio.io/latest/zh/docs/concepts/traffic-managementhttps://istio.io/latest/zh/docs/reference/config/networking/virtual-servicehttps://istio.io/latest/zh/docs/reference/config/networking/destination-rule/

本文信息为网友自行发布旨在分享与大家阅读学习,文中的观点和立场与本站无关,如对文中内容有异议请联系处理。

本文链接:https://www.paituo.cc/tech/1043884.html

  • 小编推荐

    mpg播放器能够在哪些设备上使用 MPG格式用什么播放器

    mpg播放器能够在哪些设备上使用,简介如下MPG播放器是人们在生活中常常使用的一种播放器,它是一种主流的数字媒体播放器,能够解码MPEG-1、MPEG-2、MPEG-4和AVC等格式的影片和音乐等多媒体...

    用电脑时候鼠标不动了怎么办灯也不亮

    本文讲述用电脑时候鼠标不动了怎么办灯也不亮,简介如下 有些小伙伴在使用电脑的时候发现自己的鼠标不动了,不知道怎么办?今天这篇文章就来教教大家鼠标不动了怎么办灯也不亮。鼠标不动了灯也不亮了,一般是以下原因造成的:1...

    进程和线程的区别是什么有什么区别

    本文讲述进程和线程的区别是什么有什么区别,简介如下 想知道进程和线程的区别是什么?有什么区别,在知道区别的前提下需要先了解进程和线程分别是什么,才能更好的了解他们的区别在哪里。什么是进程进程的定义: 进程是程序...

    M.2固态硬盘需要装散热片吗以及M.2

    本文讲述M.2固态硬盘需要装散热片吗以及M.2SSD装散热马甲降温效果明显吗,简介如下 大家都知道电脑在运行的时候会发出热量,同时在读取、写入数据的时候也会产生热量,那么M.2固态硬盘需要加入散热吗?这里小编为大家带来最新的资讯。 M.2固态硬盘...

    vscode怎么新建html文件

    本文讲述vscode怎么新建html文件vscode设置快速生成html文件的两种方法,简介如下vscode怎么新建html文件?刚刚接触这款编程软件的小伙伴可能不是很会操作,最近就有很多小伙伴在问vscode怎么新建html文件,有没有快捷方法,今天系统...

    教你设置路由器上网设置

    本文讲述教你设置路由器上网设置,简介如下 路由器网线连接一头连接路由器的WAN口,另一头连接宽带光猫的千兆端口1口,(有的光猫只有1.2.3.4那么你就插1口)如图所示范如果你的路由器已经设置好了,忘...

    电脑微信字体大小怎么设置方法怎么调

    本文讲述电脑微信字体大小怎么设置方法怎么调,简介如下最近小编在使用电脑电脑微信字体大小怎么设置方法?具体步骤如下:1.如图所示,想要改变微信聊天字体;2.点击开始,打开控制面板;3.点击个性化;4.点击左下角显示...

    vscode和visualstudio两款编程软件区别是什么

    本文讲述vscode和visualstudio两款编程软件区别是什么,简介如下 vscode和visualstudio区别是什么?vscode和visualstudio都是比较好用的编程软件,很多小伙伴知道vscode和visualstu...