是否有顺序选择Ingress规则?

时间:2019-07-04 00:46:50

标签: kubernetes kubernetes-ingress heptio-contour

是否有进入Ingress规则规范的命令,即是否将遵守第一条合格规则?

遵循规范的目的是将所有没有标头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 Ingress控制器。

2 个答案:

答案 0 :(得分:0)

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

轮廓文件如何与Ingress一起工作,其文档尚不清楚。我认为Contour会使用其CRD IngressRoute来指定请求规则的工作方式。

所以我从offical kubernetes ingress rule推断出您的Ingress行为:

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

答案 1 :(得分:0)

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

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

代码

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

route.go tests看来,*的虚拟主机是如何处理默认主机的。

This sorting of virtualhosts希望总是将*放在正确的位置,以便按照您的描述将轮廓设置为默认值,但是我认为该配置还有一个接口可以应用于实际的代理过程envoy 。

因此,无论您以何种顺序输入Ingress,似乎(未经测试),contour都会为您将默认的主机路由排序为'*'

当您考虑轮廓时,这种方式很有意义,它还支持IngressRoute的自定义资源定义,该定义每个定义只允许一个虚拟主机。这些CRD作为一个组没有特定的顺序,因此需要进行排序。