5.5.1 出口安全

Istio为集群中的工作负载提供了多种安全方式与外部服务进行通信。如果你的应用程序本身已经建立了与外部服务的安全行为,那么你也希望在Istio中保持相同的行为。具体来说,Istio支持以下两种解决方案:

·工作负载可以建立与外部服务的TLS连接,并且希望基于IP将流量列入白名单。

解决方案:配置includeIPRanges。此解决方案通过修改集群中所有工作负载的iptables配置来生效。例如,如果你打算允许来自集群的所有外部流量,则只需配置includeIPRanges包含所有集群pod和虚拟服务IP即可。然后,目的地IP超出范围的所有请求都将绕过Envoy代理。如果你希望缩小绕过Envoy的目标IP的范围,需要使用标志:excludeIPRanges来明确指定这些IP范围。注意:由于控制基于IP,因此它并不总是可靠的,因为外部服务可能会随时间改变IP地址。

·工作负载可以建立与外部服务的TLS连接,并且希望根据服务名称将流量列入白名单。

解决方案:基于Envoy SNI路由。此解决方案是基于Istio的VirtualService与Envoy SNI(SNI指服务名称指示)路由功能的。例如,VirtualService指定SNI主机为“www.google.com”的TLS请求被路由到目标“www.google.com”。名为“google”的ServiceEntry定义了目标“www.google.com”的端口号、协议等。Istio Pilot将Istio配置转换为Envoy xDS配置,并将它们传播到每个Envoy代理。你可能想问,我们为什么要在这里使用SNI?这是因为Envoy没有终止工作负载的TLS连接,Envoy不知道工作负载想要调用什么服务。SNI允许工作负载在TLS握手阶段以纯文本形式指定目标服务名称。这使Envoy能够检查流量目的地,并将流量路由到外部主机。