为什么要对 Envoy xDS API 进行版本控制?有什么好处?

Envoy 是一个平台,需要允许其 API 不断发展以包含新功能、改进人机工程学并解决新用例。同时,我们需要一种严谨的方法来拒绝过时的功能并删除不再维护的 API 及其支持代码。如果我们不这样做,从长远来看我们将失去为用户提供可靠的、可维护、可扩展的代码库和 API 集的能力。

我们曾针对在各个发行版之间的 重大更改 制定了相关政策,而 API版本控制策略 则对此做了进一步提升,明确说明了 API 的有保证的多年支持窗口,当考虑支持一系列 Envoy 版本时,该窗口为控制平面作者提供了可预测的时钟。

对于 v3 xDS API,简要列出了与 v2 相比所做的主要改进:

  • 软件包的组织得到了改进,以反映相关 API 的更合理的分组:

    • 现在所有软件包通过末尾的 vN 进行版本控制。这允许对主要版本进行类型级别的标识。

    • xDS服务端点/传输和配置在 envoy.serviceenvoy.config

    • 扩展现在反映了 envoy.extensions 下的 Envoy 源代码树布局。

  • 正则表达式 std::regex 已从 API 中删除,以支持 RE2。前者具有危险的安全隐患。

  • 扩展的配置 google.protobuf.Struct 已从 API 中删除,这有利于类型化配置。也为扩展的多个实例提供了更好的支持,例如,在过滤器链中,并且扩展实例的命名更加灵活。

  • 从 API 中删除了 60 多个不赞成使用的字段。

  • 建立了用于 API 版本支持的工具和流程。现在,这已经反映在引导程序 Node 中,它提供了控制平面可以依赖于客户端协商的 API 支持的长期概念。