更新/迁移到 Envoy 1.17 - Amazon App Mesh
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

更新/迁移到 Envoy 1.17

带有 SPIRE 的密钥发现服务

如果您使用带 App Mesh 的 SPIRE(SPIFFE 运行时系统环境)向您的服务分发信任证书,请确认您使用的是版本至少为 0.12.0SPIRE 代理(2020 年 12 月发布)。这是之后第一个可以支持 Envoy 版本的版本 1.16

正则表达式更改

从 Envoy 1.17 开始,App Mesh 将 Envoy 配置为默认使用 RE2 正则表达式引擎。对于大多数用户来说,这种变化是显而易见的,但是路由或网关路由中的匹配不再允许在正则表达式中进行正向或反向引用。

正向和负向展望

正向 — 正向前看是一个带括号的表达式,开头为:?=

(?=example)

它们在进行字符串替换时最有用,因为它们允许匹配字符串而不必在匹配中消耗字符。由于 App Mesh 不支持替换正则表达式字符串,因此我们建议您将其替换为常规匹配项。

(example)

负向 — 负向前看是一个带括号的表达式,开头为:?!

ex(?!amp)le

带圆括号的表达式用于断言表达式的部分与给定输入不匹配。在大多数情况下,您可以将它们替换为零的量词。

ex(amp){0}le

如果表达式本身是一个字符类,则可以 ? 使用否定整个类并将其标记为可选。

prefix(?![0-9])suffix => prefix[^0-9]?suffix

根据您的用例,您可能还可以更改路线来处理此问题。

{ "routeSpec": { "priority": 0, "httpRoute": { "match": { "headers": [ { "name": "x-my-example-header", "match": { "regex": "^prefix(?!suffix)" } } ] } } } } { "routeSpec": { "priority": 1, "httpRoute": { "match": { "headers": [ { "name": "x-my-example-header", "match": { "regex": "^prefix" } } ] } } } }

第一个路由匹配会查找以“prefix”开头但后面不是“suffix”的标头。第二条路由的作用是匹配所有其他以“prefix”开头的标头,包括那些以“suffix”结尾的标头。取而代之的是,也可以将其逆转,以消除负向前看。

{ "routeSpec": { "priority": 0, "httpRoute": { "match": { "headers": [ { "name": "x-my-example-header", "match": { "regex": "^prefix.*?suffix" } } ] } } } } { "routeSpec": { "priority": 1, "httpRoute": { "match": { "headers": [ { "name": "x-my-example-header", "match": { "regex": "^prefix" } } ] } } } }

此示例反转路由,为以“suffix”结尾的标头提供更高的优先级,而所有其他以“prefix”开头的标头在优先级较低的路由中都匹配。

反向引用

反向引用是一种通过向前一个带括号的组重复来编写较短表达式的方法。他们有这样的表格。

(group1)(group2)\1

反斜杠后 \ 跟一个数字充当表达式中第 n 个带括号的组的占位符。在此示例中,\1 被用作第二次写入 (group1) 的替代方式。

(group1)(group2)(group1)

只需将反向引用替换为所引用的组即可将其删除,如示例所示。