我的控制平面需要支持哪些 xDS 传输和资源版本?

如果控制平面以给定的 API 主版本服务于一组众所周知的客户端,则它仅需要支持该版本(传输版本和资源版本)。然而,即使在这种相对基本的情况下,如果这组客户端跨越了一个主版本或者控制面希望从 v2/v3 迁移,则仍需要考虑部署客户端和服务端的二进制文件。

解决此问题的一种方法是为 v2 和 v3 传输版本的管理服务器添加临时支持(请参阅 https://github.com/envoyproxy/go-control-plane )。对于资源而言,消息是弃用的二进制的兼容模块或者是在主版本之间的新字段。如果控制面不在发出有弃用字段的资源时,则可以根据客户端请求的资源对URL类型进行简单替换,为 v2 和 v3 提供相同的资源。典型的推出顺序可能类似于:

  1. 同时支持 v2 和 v3 的并带有带有 v2 管理服务器的客户端正在开发。客户端引导程序将引用 v2 API 传输端点。

  2. 推出了同时支持 v2 和 v3 API 的管理服务器。v2 和 v3 传输端点均受支持,而返回资源中的普通 URL 替换足以将请求的 v2 或 v3 资源类型 URL 与控制平面中的现有 v2 资源进行匹配。 当返回 v3 请求指向 xDS 资源带有 ConfigSource 消息的资源时,必须将 transport_api_versionresource_api_version 设置为 v3 。此时不能使用任何已弃用的v2字段或新的v3字段。

  3. 客户端引导程序已升级到 v3 API 传输版本和 v3 API 资源版本。

  4. 在管理服务器中删除了对 v2 的支持。管理服务器仅在内部移动到 v3,并且可以支持较新的字段。

url 版本迁移的另一种方法是启用对混合类型 url 的支持,该混合类型 url 受运行时防护程序*envoy.reloadable_features.enable_type_url_downgrade_and_upgrade* 的保护。客户端可以使用 v2 资源类型 url 发送发现请求,并使用 v3 资源类型 url 处理发现响应。客户端还可以使用 v3 资源类型 url 发送发现请求,并使用 v2 资源类型 url 处理发现响应。url 类型的升级和降级是自动执行的。如果您的管理服务器不同时支持 v2/v3 ,则可以启用具有 url 升级和降级功能的客户端。这些客户端可以与专门支持 v2 或 v3 的管理服务器混合使用。就像第一种方法一样,此时不能使用任何已弃用的 v2 字段或新的 v3 字段。

如果你以服务的形式开发一个受控的控制面,你可能需要支持各种客户端版本。在这种情况下,你将需要对多个主要 API 传输版本和资源版本进行长期的支持。支持这个需求的策略描述在 这里