Contour 项目文章作者:Nick Young、Daneyon Hansen 和 Alex Xu
Gateway API 是 Kubernetes SIG-Network 社区的一个开源项目,目的是在 Kubernetes 集群内提供一个动态的、协调的服务网络所需资源的表示。它使用一组资源(GatewayClass、Gateway、HTTPPRoute、TCPRoute、Service 等)来建模许多不同类型的服务网络,这样实现者就可以编写控制器来实现 API 的全部或部分。
该 API 旨在支持的一个用例是传统的 Kubernetes Ingress(入口)。对于这个用例,Gateway API 旨在解决原始 Ingress 规范中的差距,这些差距已经由各个控制器以其他方式解决了,包括 Contour 自己的 HTTPProxy 资源。
Gateway API 和 HTTPProxy 都被设计为通过将必需的配置引入对象中成熟的字段来减少注释的蔓延,而不是通过注释传递所有内容。Gateway API 旨在成为一种跨实现标准,用于配置使用 Ingress 对象时需要注释的更高级特性。
然而,该 API 的范围比传统的第 7 层入口模型更广泛,该 API 旨在能够描述第 4 层流量,如直接 TCP 或 UDP 转发。因为 Contour 是一个第七层的控制器,我们正在实现描述第七层 HTTP 服务的 API 片段,实际上只是处理 HTTP 和 TLS 路由的对象。通过为 L4 和 L7 提供一组一致的 API,来自基础架构管理员管理网络的所有关键人物,通过 Kubernetes 管理员为他们的集群提供资源,到开发者配置他们的应用路由,都可以在统一的基础上工作。对于那些还没有准备好处理服务网格的复杂性的用户,Gateway API 还提供了合理水平的可定制性,可以在东西和南北流量中规定此流量流。
有关 Gateway API 及其创建的更多信息,请参阅Kubernetes.io 博客进一步解释。
Contour 团队从一开始就参与了 Gateway API 项目。我们对 Ingress API 及其局限性有丰富的经验,并且用我们自己的两个自定义资源来解决它们(HTTPProxy,以及现在已经删除的前任 IngressRoute)。当我们注意到 SIG-Network 开始着手发展 Ingress 和 Service 时,我们也加入了,希望能将我们的经验应用到上游。
最近,Contour 在不同规模的生产部署中得到了越来越多的应用,但对于大型企业来说,跨多个竖井(silo)采用不同的入口解决方案和网关解决方案并不罕见。我们使用 Gateway API 的目标是让这些大型企业标准化流量路由、启用自助服务和 API 发现,并帮助开发人员暴露他们的云原生应用程序。这将进一步增强安全性、遵从性、多租户等领域的能力。
我们贡献了反馈、设计和工程时间,并将继续这样做。Daneyon Hansen,我们红帽的维护者目前也是 Gateway API 项目的维护者。
我们相信,拥有一个以各种形式描述集群入口的全功能上游 API,对于 Kubernetes 网络生态系统来说是有益的,我们很高兴成为其创建的一部分。
Ingress v1 在这里会留著。在可预见的将来,该 API 不会消失,对于简单的入口需求,它仍然是一个很好的选择。
HTTPProxy 和 Gateway API 的第 7 层是针对类似的、更复杂的用例的,包括像流量分割和加权路由、速率限制和外部身份验证等特性。其中一些目前还不是 Gateway API 的一部分,但未来肯定会包括进来。
作为一个通用的指导方针,我们认为应该在上游最大程度地丰富核心 API 集,以保持一致性和透明度,并在有意义的情况下在下游保持更高级的功能。这使得 Contour 可以扩大其对 Kubernetes 部署的覆盖范围,同时保留其对 Envoy 开箱即用的控制平面。
同时,在 Gateway API 成熟之前,我们还在最新的 v1.14 版本中改进了对 ingress v1 的支持,允许使用IngressClass[1]资源过滤 ingress 资源,作为注释的更健壮的替代方法。作为其中的一部分,你可以根据Ingress v1 Spec[2]为 HTTP 请求指定不同的路径匹配模式,包括 Exact 路径匹配,将精确匹配请求路径,以及 Prefix 路径匹配,将匹配路径前缀(类似于 Contour 现在所做的)。
请收听我们的Kubecon Maintainer Track 环节[6],了解更多关于 Project Contour 的最新版本、路线图和我们对 Gateway API 的展望。
也请查看这个Gateway API 环节[7],深入了解 API 及其高级用例。
Nick Young,Contour 技术领导和 VMware 资深工程师 Daneyon Hansen,Contour 维护者和红帽首席软件工程师 Alex Xu,Contour 维护者和 VMware 产品经理
[1]
IngressClass: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class
[2]
Ingress v1 Spec: https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types
[3]
Contour Gateway API 文档: https://projectcontour.io/guides/gateway-api/
[4]
Gateway API 网站: https://gateway-api.sigs.k8s.io/
[5]
Gateway API Github 仓库: https://github.com/kubernetes-sigs/gateway-api
[6]
Kubecon Maintainer Track 环节: https://kccnceu2021.sched.com/event/iE8u
[7]
Gateway API 环节: https://sched.co/iE39
[8]
Contour 社区会议: https://projectcontour.io/community/
[9]
Kubernetes Slack: https://kubernetes.slack.com/messages/contour
[10]
GitHub: https://github.com/projectcontour/contour