是否有选择入口规则的顺序?



是否有入口规则规范的顺序,即第一个合格规则是否会得到遵守?

遵循规范的目的是路由所有没有标头的请求Host: foo.comHost: bar.com,并将它们路由到 service3。我不确定该规范在语法上是否正确,更重要的是,它是否能达到预期的目的?

spec:
rules:
- host: foo.com
http:
paths:
- backend:
serviceName: service1
servicePort: http
path: /
- host: bar.com
http:
paths:
- backend:
serviceName: service2
servicePort: http
path: /a/b/c
- http:
paths:
- path: /a/b/c
backend:
serviceName: service3
servicePort: http

不要认为这很重要,但我使用的是轮廓入口控制器。

我不熟悉 Contour,我只是快速浏览文档。

Contour 如何与Ingress规则一起工作从其文档中不清楚。我认为 Contour 使用其 CRDIngressRoute来指定请求规则的工作原理。

所以我从正式的 kubernetes 入口规则推断出你的Ingress行为:

  • 带有host: foo.com的请求将路由到service1service3
  • 带有host: bar.com的请求将路由到service2service3
  • 其他请求将路由到service3

您以语法正确的方式创建的内容,应该将http://*/a/b/chttp://*/a/b/c/*路由到大多数入口控制器中的service3

入口定义只是提供给入口控制器的数据。将数据转换为配置的实现特定于入口控制器的。

法典

等高线路由配置看起来以"虚拟主机"名称为根。在route.go代码中,我看不到对"无虚拟主机"情况的任何处理。

从 route.go 测试来看,看起来虚拟主机*是默认主机的处理方式。

正如您所描述的那样,虚拟主机的这种排序有望始终将*放在正确的位置,以便轮廓默认,但我认为还有一个接口可以将此配置应用于 envoy,即实际的代理过程。

因此,看起来(未经测试)无论您以什么顺序输入Ingress定义,contour 都会为您整理出默认主机路由为"*">

当您考虑 contour 还支持IngressRoute的自定义资源定义时,这种定义是有意义的,该定义只允许一个虚拟主机。这些 CRD 作为一个组没有特定的排序,因此需要排序。

最新更新