请求路由
此页面描述了如何在Istio服务网格中的服务之间路由请求。
服务模型和服务版本
如Pilot中所述,Pilot维护特定网格中服务的规范表示。服务的Istio模型独立于它在底层平台(Kubernetes,Mesos,Cloud Foundry等)中的表示方式。特定于平台的适配器负责使用平台中找到的元数据中的各种字段填充内部模型表示。
Istio引入了服务版本的概念,这是一种通过版本(v1
,v2
)或环境(staging
,prod
)细分服务实例的更细粒度的方法。这些变体不一定是不同的API版本:它们可以是对同一服务的迭代更改,部署在不同的环境(prod,staging,dev等)中。使用它的常见方案包括A / B测试或金丝雀推出。Istio的流量路由规则可以引用服务版本,以提供对服务之间流量的额外控制。
服务之间的沟通
服务版本
如上图所示,服务的客户端不了解服务的不同版本。他们可以使用服务的主机名/ IP地址继续访问服务。特使边车/代理拦截并转发客户与服务之间的所有请求/响应。
Envoy根据运营商使用Pilot指定的路由规则动态确定其实际的服务版本选择。该模型使应用程序代码能够脱离其依赖服务的演变,同时还提供其他好处(参见混音器)。路由规则允许Envoy根据标准选择版本,例如标题,与源/目的地相关联的标签,和/或分配给每个版本的权重。
Istio还为同一服务版本的多个实例的流量提供负载平衡。您可以在Discovery和Load-Balancing中找到更多相关信息。
Istio不提供DNS。应用程序可以尝试使用底层平台中存在的DNS服务(kube-dns,mesos-dns等)来解析FQDN。
入口和出口
Istio假定进入和离开服务网格的所有流量都通过Envoy代理进行转换。通过在服务前部署Envoy代理,运营商可以为面向用户的服务进行A / B测试,部署金丝雀服务等。同样,通过边车Envoy将流量路由到外部Web服务(例如,访问Maps API或视频服务API),运营商可以添加故障恢复功能,如超时,重试,断路器等,并获取详细信息与这些服务的连接的指标。
请求流程
https://istio.io/docs/concepts/traffic-management/request-routing/