2

是否有入口规则规范的命令,即第一个排位赛规则会得到遵守吗?

遵循规范的目的是路由所有没有标头的请求Host: foo.com并将Host: 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 Ingress 控制器。

4

2 回答 2

0

您在语法上正确创建的内容应该在大多数入口控制器中路由http://*/a/b/chttp://*/a/b/c/*到达。service3

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

代码

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

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

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

所以看起来(没有测试)无论你把Ingress定义放在什么顺序,contour都会为你整理出默认的主机路由为'*'

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

于 2019-07-05T00:29:58.320 回答
0

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

Contour 如何使用Ingress规则在其文档中并不清楚。我认为 Contour 更喜欢使用其 CRDIngressRoute来指定请求规则的工作方式。

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

  • 请求host: foo.com将路由到service1service3
  • 请求host: bar.com将路由到service2service3
  • 其他请求将路由到service3
于 2019-07-04T04:40:55.453 回答