Istio 中包含有四种流量管理配置资源,分别是 VirtualService
、DestinationRule
、ServiceEntry
、以及 Gateway
。下面会讲一下这几个资源的一些重点。在网络参考中可以获得更多这方面的信息。
在请求被 VirtualService
路由之后,DestinationRule
配置的一系列策略就生效了。这些策略由服务属主编写,包含断路器、负载均衡以及 TLS 等的配置内容。
DestinationRule
还定义了对应目标主机的可路由 subset
(例如有命名的版本)。VirtualService
在向特定服务版本发送请求时会用到这些子集。
规则评估的第一步,是确认 VirtualService
中所请求的主机相对应的路由规则(如果有的话),这一步骤决定了将请求发往目标服务的哪一个 subset
(就是特定版本)。下一步,被选中的 subset
如果定义了策略,就会开始是否生效的评估。
Service Entries
Istio 内部会维护一个服务注册表,可以用 ServiceEntry
向其中加入额外的条目。通常这个对象用来启用对 Istio 服务网格之外的服务发出请求。例如下面的 ServiceEntry
可以用来允许外部对 *.foo.com
域名上的服务主机的调用。
ServiceEntry
的配置不仅限于外部服务,他可以有两种类型:网格内部和网格外部。网格内的条目和其他的内部服务类似,用于显式的将服务加入网格。可以用来把服务作为服务网格扩展的一部分加入不受管理的基础设置(例如加入到基于 Kubernetes 的服务网格中的虚拟机)中。网格外的条目用于表达网格外的服务。对这种条目来说,双向 TLS 认证是禁止的,策略实现需要在客户端执行,而不像内部服务请求中的服务端执行。
Gateway
Gateway 为 HTTP/TCP 流量配置了一个负载均衡,多数情况下在网格边缘进行操作,用于启用一个服务的 Ingress 流量。
和 Kubernetes Ingress 不同,Istio Gateway
只配置四层到六层的功能(例如开放端口或者 TLS 配置)。绑定一个 VirtualService
到 Gateway
上,用户就可以使用标准的 Istio 规则来控制进入的 HTTP 和 TCP 流量。
总结:(1)VirtualService设置host主机的服务选择哪个subset,subset通过DestinationRule来定义路由规则。则通过VirtualService匹配subset,DestinationRule中定义subset定义的路由。
(2)可以不指定VirtualService直接定义DestinationRule规则,而生效的是全局的非subset中的规则。(因为只有VirtualService指定的subset才有意义)
(3)
Service Entries适用于进行访问服务网格外面服务而设计的
(4)Gateway是为了管理访问服务负载均衡而设计的,需绑定到VirtualService