Ingress Path Matching
正则表达式支持
!!! 重要 spec.rules.host
字段不支持正则表达式和通配符。 必须使用完整的主机名
ingress controller在spec.rules.http.paths.path
字段中支持 不区分大小写 的正则表达式。 可以通过将nginx.ingress.kubernetes.io/use-regex
注释设置为true
来启用(默认为false
)。
查看use-regex
的 描述 获取更多信息.
前面的入口定义将转换为test.com
服务器的NGINX配置中的以下location块:
Path Priority
在NGINX中,正则表达式遵循 首次匹配 策略。 为了实现更精确的路径匹配,在将路径作为位置块写入NGINX模板之前,ingress-nginx首先将路径按降序排序。
在你使用正则表达式之前请查看 warning.
Example
创建以下两个入口定义:
ingress controller将在test.com
服务器的NGINX模板中按长度降序定义以下位置块:
以下请求URI将与相应的位置块匹配:
test.com/foo/bar/1
匹配~* ^/foo/bar/.+
将被路由到 service 3.test.com/foo/bar/
匹配~* ^/foo/bar/
将被路由到 service 2.test.com/foo/bar
匹配~* ^/foo/bar
将被路由到 service 1.
重要提醒:
如果
use-regex
或rewrite-target
被一个给定的host使用, 然后不区分大小写的正则表达式 location modifier will be enforced on ALL paths for a given host regardless of what Ingress they are defined on.
Warning
下面的示例描述了一种可能导致不必要的路径匹配行为的情况。
这种情况是预料之中的,这是NGINX针对使用正则表达式的路径的第一个匹配策略的结果 location modifier. For more information about how a path is chosen, please read the following article: "Understanding nginx Server and Location Block Selection Algorithms".
Example
定义以下入口:
ingress controller将在NGINX模板中为test.com
服务器定义以下位置块(按此顺序):
请求 test.com/foo/bar/bar
将匹配 ^/foo/[A-Z0-9]{3}
location 块而不是最长的完全匹配路径.
Last updated