更新/迁移到 Envoy 1.17 - AWS App Mesh

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

更新/迁移到 Envoy 1.17

秘密发现服务与 SPIRE

如果您将SPIRE(SPIFFE运行时环境)与 App Mesh 配合使用,将信任证书分发给您的服务,请确认您使用的SPIRE代理版本0.12.0至少为(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)

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