上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1.1 请求路由和流量转移
Istio为了控制服务请求,引入了服务版本(Version)的概念,可以通过版本标签对服务进行区分。版本标签的设置是非常灵活的,可以根据服务的迭代编号进行定义(如v1、v2版本),也可以根据部署环境进行定义(如dev、staging、production),还可以是自定义的任何用于区分服务的某种标记。通过版本标签,Istio就可以灵活地定义路由规则,实现流量控制,例如,上面提到的金丝雀发布这类应用场景可以很容易实现了。
图2-2所示为使用服务版本实现路由分配的例子。服务版本定义了版本号(v1.5、v2.0-alpha)和环境(us-prod、us-staging)两种信息。Service B包含了4个Pod,其中3个部署在生产环境的v1.5版本中,而Pod4部署在预生产环境的v2.0-alpha版本中。运维人员可以根据服务版本指定路由规则,使99%的流量流向v1.5版本,而1%的流量流向v2.0-alpha版本。
Istio除了能控制上面介绍的服务间的流量,还能控制与网格边界交互的流量,在系统的入口和出口处部署Sidecar代理,让所有流入和流出的流量都由代理进行转发。负责流量流入和流出的代理被称为入口网关和出口网关,它们把守着流入和流出网格的流量。图2-3所示为入口网关和出口网关在请求流中的位置,有了它们,就可以控制出入网格的流量了。
Istio还能设置流量策略。比如,可以对连接池的相关属性进行设置,通过修改最大连接等参数,实现对请求负载的控制;也可以对负载均衡策略进行设置,在轮询、随机、最少访问等方式之间进行切换;还可以对异常探测策略进行设置,将满足异常条件的实例从负载均衡池中删除,以保证服务的稳定性。
图2-2
图2-3