服务网格的范围限定

为了编排服务网格,Istio 控制平面(Istiod)会读取各种配置,包括核心 Kubernetes 类型如 ServiceNode,以及 Istio 自身的类型如 Gateway。这些配置随后会发送到数据平面(更多信息请参见 Architecture)。

默认情况下,控制平面会读取所有命名空间中的所有配置。每个代理实例也会接收所有命名空间的配置。这包括未加入网格的工作负载的信息。

这种默认行为确保开箱即用的正确性,但会带来可扩展性方面的代价。每条配置都需要消耗一定的资源(主要是 CPU 和内存)来维护和保持更新。在大规模环境下,限制配置范围以避免过度资源消耗是至关重要的。

目录

范围限定机制

Istio 提供了几种工具来帮助控制配置的范围,以满足不同的使用场景。根据需求,这些工具可以单独使用,也可以组合使用。

  • Sidecar 提供了一种机制,使特定工作负载能够导入一组配置
  • exportTo 提供了一种机制,将配置导出到一组工作负载
  • discoverySelectors 提供了一种机制,使 Istio 完全忽略一组配置

常见问题解答

如果我连接到范围之外的服务,会发生什么?

当连接到通过某种范围限定机制被排除的服务时,数据平面将不会知道该目标的任何信息,因此该流量将被视为未匹配流量

Gateway 呢?

虽然 Gateways 会遵循 exportTodiscoverySelectors,但 Sidecar 对象不会影响 Gateways。然而,与 sidecar 不同,gateway 默认并不拥有整个集群的配置。相反,每条配置都是显式附加到 gateway 上的,这在很大程度上避免了此类问题。

不过,目前 数据平面配置中的一部分(在 Envoy 术语中称为“cluster”)总是会发送整个集群的配置,即使它没有被显式引用。