Kubernetes Ingress 和 IngressRoute 有什么区别?

What is the difference between a Kubernetes Ingress and a IngressRoute?

我仍在学习 kubernetes,我偶然发现了对象 'Ingress' 和 'IngressRoute'。这两个对象有什么不同? IngressRoute 是否取代了 'old' Ingress?我是 运行 带有 Traefik 2.1 的 Kubernetes Cluster V1.17。我的 IngressRoute 工作正常,但我也找到了解释如何定义入口的博客。

Ingress 是一个共享抽象,可以由许多提供程序(Nginx、ALB、Traefik、HAProxy 等)实现。它特别是对相当简单的 HTTP 反向代理的抽象,可以根据主机名和路径前缀进行路由。因为它必须是共享的东西,这意味着处理特定于提供者的设置的配置很尴尬。提供者方面的一些团队已经决定共享抽象的好处不值得实现的复杂性,并且已经做了他们自己的东西,到目前为止 Contour 和 Traefik 都将它们命名为 IngressRoute 但除了相似的命名之外没有任何联系。

Contour 很好地处理了这个问题并允许两个系统共存,Traefik 团队无视我们的警告并且基本上将 Ingress 削弱到香草配置只是因为他们看不到支持它有任何好处。你能说我对此很咸吗?因为我绝对是。

基本上 Ingress 是官方的东西,但它并不完美,有些人正在尝试做一个新的、更好的东西,但进展并不顺利。

ingressRoute 是 Traefik 特有的。它不是 Kubernetes 原生的。它是一个自定义资源定义,允许您利用 Kubernetes ingress 资源

中未公开的 Traefik 功能

Traefik docs解释了这背后的原因。

...the community expressed the need to benefit from Traefik features without resorting to (lots of) annotations, we ended up writing a Custom Resource Definition (alias CRD in the following) for an IngressRoute type...