简介:Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动。
一、流量管理
1、虚拟服务
虚拟服务在使Istio的流量管理变得灵活和强大方面发挥着关键作用。他们通过将客户从真正实现它们的目标工作负载中发送请求的位置之间去耦合,来实现这一点。虚拟服务还提供了一种丰富的方法,用于指定用于将流量发送到那些工作负载的不同流量路由规则。
如果没有虚拟服务,Envoy会使用循环负载平衡在所有服务实例之间分配流量,如简介中所述。您可以通过了解工作负载来改善这种行为。例如,某些代表不同的版本。这在A / B测试中很有用,您可能需要基于不同服务版本之间的百分比配置流量路由,或将流量从内部用户引导到一组特定实例。
使用虚拟服务,可以为一个或多个主机名指定流行为。您在虚拟服务中使用路由规则,该规则告诉Envoy如何将虚拟服务的流量发送到适当的目的地。路由目的地可以是相同服务的版本,也可以是完全不同的服务的版本。
例子:将流量发送到指定为服务子集的服务的不同版本。客户端将请求发送到虚拟服务主机,就好像它是单个实体一样,然后Envoy根据虚拟服务规则将流量路由到不同版本:例如,“ 20%的呼叫转到新版本”或“呼叫这些用户转到版本2”。例如,这使您可以创建“金丝雀”部署,逐步增加发送到新服务版本的流量百分比。流量路由与实例部署完全分开,这意味着可以完全根据流量负载来扩展和缩小实现新服务版本的实例的数量,而无需完全引用流量路由。相比之下,像Kubernetes这样的容器编排平台仅支持基于实例扩展的流量分配,这很快变得复杂。
虚拟服务其他作用:
- 通过单个虚拟服务处理多个应用程序服务。例如,如果您的网格使用Kubernetes,则可以配置虚拟服务以处理特定名称空间中的所有服务。将单个虚拟服务映射到多个“真实”服务在帮助将单片应用程序转换为由不同微服务构建的复合服务时特别有用,而无需该服务的使用者适应过渡。您的路由规则可以指定“对monolith.com的这些URI的调用转到微服务A”,依此类推。
- 结合网关配置流量规则,以控制入口和出口流量。
在某些情况下,您还需要配置目标规则以使用这些功能,因为这些是您指定服务子集的位置。在单独的对象中指定服务子集和其他特定于目标的策略,使您可以在虚拟服务之间清晰地重用它们。
2、目标规则
除虚拟服务外,目的地规则也是Istio流量路由功能的关键部分。您可以将虚拟服务视为如何将流量路由到给定的目的地,然后使用目的地规则来配置该目的地的流量。在评估虚拟服务路由规则之后,将应用目标规则,因此它们将应用于流量的“真实”目标。特别是,您可以使用目标规则来指定命名的服务子集,例如按版本对所有给定服务的实例进行分组。然后,您可以在虚拟服务的路由规则中使用这些服务子集,以控制流向服务的不同实例的流量。使用目标规则,您还可以在调用整个目标服务或特定服务子集时自定义Envoy的流量策略,例如首选的负载平衡模型,TLS安全模式或断路器设置。
默认情况下,Istio使用循环负载平衡策略,其中实例池中的每个服务实例依次获得一个请求。 Istio还支持以下模型,您可以在目标规则中为对特定服务或服务子集的请求指定这些模型。
- 随机:将请求随机转发到池中的实例。
- 加权:根据特定百分比将请求转发到池中的实例。
- 最少请求:将请求转发到请求数量最少的实例。
3、网关
使用网关来管理网格的入站和出站流量,让您指定要进入或离开网格的流量。网关配置适用于在网格边缘运行的独立Envoy代理,而不是与服务工作负载一起运行的sidecar Envoy代理。与其他控制进入系统的流量的机制(例如Kubernetes Ingress API)不同,Istio网关使您可以充分利用Istio流量路由的强大功能和灵活性。您可以执行此操作,因为Istio的网关资源仅允许您配置4-6层负载平衡属性,例如要公开的端口,TLS设置等。然后,您没有将应用程序层流量路由(L7)添加到相同的API资源,而是将常规Istio虚拟服务绑定到网关。这样,您就可以像管理Istio网格中的任何其他数据平面流量一样,基本上管理网关流量。
网关主要用于管理入口流量,但是您也可以配置出口网关。出口网关使您可以为离开网状网络的流量配置专用的出口节点,从而限制可以或应该访问外部网络的服务,或者启用对出口流量的安全控制以增加网状网络的安全性。您还可以使用网关来配置纯内部代理。
Istio提供了一些预配置的网关代理部署(istio-ingressgateway和istio-egressgateway),您可以使用-如果您使用我们的演示安装,则两者都部署,而只有入口网关是使用默认配置文件部署的。您可以将自己的网关配置应用于这些部署,也可以部署和配置自己的网关代理。
4、服务条目
可以使用服务条目将条目添加到Istio内部维护的服务注册表中。添加服务条目后,Envoy代理可以将流量发送到服务,就好像它是网格中的服务一样。通过配置服务条目,您可以管理在网格外部运行的服务的流量,包括以下任务:
- 重定向和转发外部目标的流量,例如从网络使用的API或旧基础结构中服务的流量。
- 为外部目标定义重试,超时和故障注入策略。
- 通过将虚拟机添加到网格中,在虚拟机(VM)中运行网格服务。
- 在逻辑上将来自其他群集的服务添加到网格,以在Kubernetes上配置多群集Istio网格。
您无需为要使用网格服务的每个外部服务添加服务条目。默认情况下,Istio将Envoy代理配置为将请求传递给未知服务。但是,您不能使用Istio功能来控制到未在网格中注册的目标的流量。