前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >超越 Gateway API:深入探索 Envoy Gateway 的扩展功能(未完成)

超越 Gateway API:深入探索 Envoy Gateway 的扩展功能(未完成)

作者头像
赵化冰
发布2024-09-02 11:17:57
1600
发布2024-09-02 11:17:57
举报
文章被收录于专栏:赵化冰的技术博客

本文是我在 2024 年 8 月于香港举行的 Kubecon China 上的技术分享:Gateway API and Beyond: Introducing Envoy Gateway’s Gateway API Extensions 的内容总结。

Envoy Gateway 作为 Envoy 的 Ingress Gateway 实现,全面支持了 Gateway API 的所有能力。除此之外,基于 Gateway API 的扩展机制,Envoy Gateway 还提供了丰富的流量管理、安全性、自定义扩展等 Gateway API 中不包含的增强功能。本文将介绍 Envoy Gateway 的 Gateway API 扩展功能,并深入探讨这些功能的应用场景。

Kubernets Ingerss 的现状与问题

Ingress 是 Kubernetes 中定义集群入口流量规则的 API 对象。Ingress API 为用户提供了定义 HTTP 和 HTTPS 路由规则的能力,但是 Ingress API 的功能有限,只提供了按照 Host、Path 进行路由和 TLS 卸载的基本功能。这些功能在实际应用中往往无法满足复杂的流量管理需求,导致用户需要通过 Annotations 或者自定义 API 对象来扩展 Ingress 的功能。

例如,一个很常见的需求是采用正则表达式对请求的 Path 进行匹配,但是 Ingress API 只支持 Prefix 和 Exact 两种 Path 匹配方式,无法满足这个需求。

为了处理这个简单的需求,一些 Ingress Controller 实现提供了 Annotations 来支持正则表达式 Path 匹配,例如 Nginx Ingress Controller 的 nginx.org/path-regex Annotation。

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    nginx.org/path-regex: "case_sensitive"
spec:
  rules:
  - http:
      paths:
      - path: "/tea/[A-Z0-9]+"
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: "/coffee/[A-Z0-9]+"
        backend:
          serviceName: coffee-svc
          servicePort: 80

另外一些 Ingress Controller 实现则在 Ingess API 之外定义了自己的 API 对象,例如 Traefik 的 采用 IngressRoute 来支持正则表达式 Path 匹配。

代码语言:javascript
复制
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: cafe-ingress
  namespace: default
spec:
  routes:
    - match: "PathPrefix(`^/tea/[A-Z0-9]+`)"
      kind: Rule
      services:
        - name: tea-svc
          port: 80
    - match: "PathRegexp(`^/coffee/[A-Z0-9]+`)"
      kind: Rule
      services:
        - name: coffee-svc
          port: 80

不管是通过 Annotations,还是自定义 API 对象,这两种方式导致 Ingress API 的可移植性变差,用户在不同的 Ingress Controller 之间切换时,需要重新学习和配置不同的 API 对象。分裂的 Ingress API 也不利于社区的统一和发展,给 Kubernetes 社区带来了维护和扩展的困难。

Gateway API:下一代 Ingress API

为了解决 Ingress API 的问题,Kubernetes 社区提出了 Gateway API,Gateway API 是一个新的 API 规范,旨在提供一个统一的、可扩展的、功能丰富的 API 来定义集群入口流量规则。

相对于 Ingress API,Gateway API 提供了更丰富的功能:Gateway API 定义了多种资源对象,包括 Gateway、HTTPRoute、GRPCRoute、TLSRoute、TCPRoute、UDPRoute 等。对流量路由也提供了更多的配置选项,例如 Path 匹配、Header 匹配、Host 匹配、TLS 配置、流量拆分、请求重定向等功能。原来很多需要通过 Annotations 或者自定义 API 对象来扩展的功能,现在都可以直接通过 Gateway API 来实现。

例如,下面的 Gateway API 对象定义了一个 HTTPRoute,用于实现上面例子中的正则表达式 Path 匹配。

代码语言:javascript
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: cafe-httproute
spec:
  parentRefs:
    - name: eg
  rules:
    - matches:
        - path:
            type: RegularExpression
            value: "^/tea/[A-Z0-9]+"
      backendRefs:
        - name: tea-svc
          port: 80
    - matches:
        - path:
            type: RegularExpression
            value: "^/coffee/[A-Z0-9]+"
      backendRefs:
        - name: coffee-svc
          port: 80

任何一个标准,不管定义得多么完善,理论上都只能是其所有实现的最小公约数。Gateway API 也不例外。Gateway API 作为一个通用的 API 规范,为了保持通用性,对一些和实现强相关的功能无法提供直接的支持。例如,虽然请求限流、权限控制等功能在实际应用中非常重要,但是不同的数据平面如 Envoy,Nginx 等的实现方式各有不同,因此 Gateway API 无法提供一个通用的规范来支持这些功能。Ingress API 就是由于这个原因,导致了 Annotations 和自定义 API 对象的泛滥。

Gateway API 中创新的地方在于,它提供了 Policy Attachment 扩展机制,允许用户在不修改 Gateway API 的情况下,通过关联自定义的 Policy 对象到 Gateway 和 xRoute 等资源对象上,以实现对流量的自定义处理。Policy Attachment 机制为 Gateway API 提供了更好的可扩展性,使得 Gateway API 可以支持更多的流量管理、安全性、自定义扩展等功能。此外,Gateway API 还支持将自定义的 Backend 对象关联到 HTTPRoute 和 GRPCRoute 等资源对象上,以支持将流量路由到自定义的后端服务。

通过这些扩展机制,Gateway API 既保持了 Gateway,HTTPRoute 等核心资源对象的通用性,保证了不同实现之间对核心功能的兼容性,又为不同实现在 Gateway API 的基础上进行功能扩展提供了一个统一的规范。Envoy Gateway 正是采用了 Gateway API 的扩展机制,在全面支持了 Gateway API 的所有能力基础上,提供了更为丰富的流量管理、安全性、自定义扩展等功能。

Envoy Gateway 的 Gateway API 扩展功能

To be continued…

参考

演讲稿下载地址

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kubernets Ingerss 的现状与问题
  • Gateway API:下一代 Ingress API
  • Envoy Gateway 的 Gateway API 扩展功能
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档