3、Gateway API
更新于:2024年1月5
Gateway API
目录
[toc]
本节实战
实战名称 |
---|
🚩 实战:Gateway API在istio里的安装及测试-2023.12.23(测试成功) |
🚩 实战:配置请求路由-2023.12.27(测试成功) |
🚩 实战:路由到指定版本-2023.12.27(测试成功) |
🚩 实战:基于用户身份路由-2023.12.27(测试成功) |
🚩 实战:基于权重的路由-2023.12.27(测试成功) |
🚩 实战:使用 TLS 暴露服务-2023.12.27(测试成功) |
前言
Gateway API
是由 SIG-NETWORK 社区管理的开源项目,项目地址:https://gateway-api.sigs.k8s.io/。
主要原因是 Ingress 资源对象不能很好的满足网络需求,很多场景下 Ingress 控制器都需要通过定义 annotations
或者 crd 来进行功能扩展,这对于使用标准和支持是非常不利的,新推出的 Gateway API 旨在通过可扩展的面向角色的接口来增强服务网络。
Gateway API 是 Kubernetes 中的一个 API 资源集合,包括 GatewayClass
、Gateway
、HTTPRoute
、TCPRoute
、Service
等,这些资源共同为各种网络用例构建模型。
Gateway API 最初设计用于管理从集群外部客户端到集群内部服务的流量(入口或北/南情况)。随着时间的推移,服务网格用户的兴趣促使 GAMMA(Gateway API for Service Mesh)计划的创建,以定义 Gateway API 如何用于同一集群内的服务间或东/西流量。
Gateway API 的改进比当前的 Ingress 资源对象有很多更好的设计:
- 面向角色 - Gateway 由各种 API 资源组成,这些资源根据使用和配置 Kubernetes 服务网络的角色进行建模。
- 通用性 - 和 Ingress 一样是一个具有众多实现的通用规范,Gateway API 是一个被设计成由许多实现支持的规范标准。
- 更具表现力 - Gateway API 资源支持基于 Header 头的匹配、流量权重等核心功能,这些功能在 Ingress 中只能通过自定义注解才能实现。
- 可扩展性 - Gateway API 允许自定义资源链接到 API 的各个层,这就允许在 API 结构的适当位置进行更精细的定制。
还有一些其他值得关注的功能:
GatewayClasses
-GatewayClasses
将负载均衡实现的类型形式化,这些类使用户可以很容易了解到通过 Kubernetes 资源可以获得什么样的能力。- 共享网关和跨命名空间支持 - 它们允许共享负载均衡器和 VIP,允许独立的路由资源绑定到同一个网关,这使得团队可以安全地共享(包括跨命名空间)基础设施,而不需要直接协调。
- 规范化路由和后端 - Gateway API 支持类型化的路由资源和不同类型的后端,这使得 API 可以灵活地支持各种协议(如 HTTP 和 gRPC)和各种后端服务(如 Kubernetes Service、存储桶或函数)。
- 服务网格支持 - Gateway API 支持将路由资源与服务资源关联,以配置服务网格以及入口控制器。
面向角色设计
无论是道路、电力、数据中心还是 Kubernetes 集群,基础设施都是为了共享而建的,然而共享基础设施提供了一个共同的挑战,那就是如何为基础设施用户提供灵活性的同时还能被所有者控制。
Gateway API 通过对 Kubernetes 服务网络进行面向角色的设计来实现这一目标,平衡了灵活性和集中控制。它允许共享的网络基础设施(硬件负载均衡器、云网络、集群托管的代理等)被许多不同的团队使用,所有这些都受到集群运维设置的各种策略和约束。
一个集群运维人员创建了一个基于 GatewayClass
的 Gateway
资源,这个 Gateway
配置了它所代表的基础网络资源,集群运维和特定的团队必须沟通什么可以附加到这个 Gateway 上来暴露他们的应用。 集中的策略,如 TLS,可以由集群运维在 Gateway 上强制执行,同时,Store 和 Site 应用在他们自己的命名空间中运行,但将他们的路由附加到相同的共享网关上,允许他们独立控制他们的路由逻辑。
这种关注点分离的设计可以使不同的团队能够管理他们自己的流量,同时将集中的策略和控制留给集群运维。