是否有进入Ingress规则规范的命令,即是否将遵守第一条合格规则?
遵循规范的目的是将所有没有标头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控制器。
答案 0 :(得分:0)
我不熟悉Contour,我只是快速浏览了文档。
轮廓文件如何与Ingress
一起工作,其文档尚不清楚。我认为Contour会使用其CRD IngressRoute
来指定请求规则的工作方式。
所以我从offical kubernetes ingress rule推断出您的Ingress
行为:
host: foo.com
的请求将路由到service1
或service3
host: bar.com
的请求将路由到service2
或service3
service3
答案 1 :(得分:0)
您在语法上正确创建的内容应在大多数入口控制器中将http://*/a/b/c
和http://*/a/b/c/*
路由到service3
。
入口定义只是提供给入口控制器的数据。将该数据转换为config 的实现是特定于入口控制器的。
轮廓路由配置看起来以“虚拟主机”名称为根。在route.go
code中,看不到“无虚拟主机”情况的任何处理。
从route.go tests看来,*
的虚拟主机是如何处理默认主机的。
This sorting of virtualhosts希望总是将*
放在正确的位置,以便按照您的描述将轮廓设置为默认值,但是我认为该配置还有一个接口可以应用于实际的代理过程envoy 。
因此,无论您以何种顺序输入Ingress
,似乎(未经测试),contour都会为您将默认的主机路由排序为'*'
当您考虑轮廓时,这种方式很有意义,它还支持IngressRoute
的自定义资源定义,该定义每个定义只允许一个虚拟主机。这些CRD作为一个组没有特定的顺序,因此需要进行排序。