Gateway API:Kubernetes中的动态基础设施配置与流量路由
Gateway API:Kubernetes中的动态基础设施配置与流量路由
导读:本文详细介绍了Kubernetes中的Gateway API,包括其设计原则、资源模型、请求流程、一致性等方面。Gateway API提供了动态基础设施配置和高级流量路由功能,通过可扩展、面向角色和协议感知的配置机制使网络服务可用。
一、引言
Gateway API是一系列API类型,用于提供动态基础设施配置和高级流量路由功能。它利用可扩展、面向角色且具有协议感知的配置机制,使网络服务得以应用。Gateway API作为一个附加组件,涵盖了多种API类型,旨在实现动态基础设施配置和高级流量路由。
二、设计原则
面向角色:Gateway API类型根据负责管理Kubernetes服务网络的组织角色进行建模。包括基础设施提供者(管理允许多个隔离集群服务多个租户的基础设施,如云提供商)、集群运营商(管理集群,通常关注策略、网络访问、应用权限等)和应用开发者(管理在集群中运行的应用,通常关注应用级配置和服务组合)。
可移植性:Gateway API规范定义为自定义资源,并得到众多实现的支持。
表达性:Gateway API类型支持常见流量路由用例的功能,如基于头部的匹配、流量加权等,这些功能在Ingress中以前只能通过自定义注释实现。
可扩展性:Gateway允许在API的不同层链接自定义资源,从而在API结构的适当位置实现精细的定制。
三、资源模型
- GatewayClass:定义一组具有共同配置的网关,并由实现该类的控制器进行管理。例如:
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: example-class
spec:
controllerName: example.com/gateway-controller
在此示例中,已实现Gateway API的控制器被配置为管理具有名称“example.com/gateway-controller”的GatewayClass,此类的网关将由该实现的控制器管理。
2.Gateway:描述流量处理基础设施的实例,定义可用于处理流量(如过滤、平衡、拆分等)的网络端点,例如云负载均衡器或集群内代理服务器。示例如下:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: example-gateway
spec:
gatewayClassName: example-class
listeners:
- name: http
protocol: HTTP
port: 80
此例中,流量处理基础设施实例被编程为在端口80上监听HTTP流量,由于未指定地址字段,实现的控制器会为网关分配地址或主机名,该地址用作处理路由中定义的后端网络端点流量的网络端点。
3.HTTPRoute:指定从网关监听器到后端网络端点的HTTP请求的路由行为。对于服务后端,实现可能将后端网络端点表示为服务IP或服务的后端端点。例如:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-httproute
spec:
parentRefs:
- name: example-gateway
hostnames:
- "www.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /login
backendRefs:
- name: example-svc
port: 8080
在此示例中,来自网关“example-gateway”、主机头设置为“www.example.com”且请求路径指定为“/login”的HTTP流量将被路由到端口8080的服务“example-svc”。
Gateway API组织为不同的API类型,它们具有相互依赖的关系,以支持组织的面向角色性质。一个Gateway对象与一个GatewayClass精确关联,GatewayClass描述负责管理此类网关的网关控制器,然后一个或多个路由类型(如HTTPRoute)与网关关联,网关可以过滤可附加到其监听器的路由,与路由形成双向信任模型。
四、请求流程
以一个使用Gateway和HTTPRoute将HTTP流量路由到服务的简单示例来说明请求流程。假设Gateway实现为反向代理,流程如下:
客户端开始为URL“http://www.example.com”准备HTTP请求。
客户端的DNS解析器查询目标名称,并获取与网关关联的一个或多个IP地址的映射。
客户端向网关IP地址发送请求;反向代理接收HTTP请求,并使用主机头匹配从网关和附加的HTTPRoute派生的配置。
可选地,反向代理可以根据HTTPRoute的匹配规则执行请求头和/或路径匹配。
可选地,反向代理可以修改请求,例如根据HTTPRoute的过滤规则添加或删除头。
最后,反向代理将请求转发到一个或多个后端。
五、一致性
Gateway API涵盖了广泛的功能并被广泛实现。这种组合需要明确的一致性定义和测试,以确保无论在何处使用该API都能提供一致的体验。有关详细信息,如发布渠道、支持级别和运行一致性测试,请参阅一致性文档。
六、从Ingress迁移
Gateway API是Ingress API的后继者,但它不包括Ingress类型。因此,需要将现有的Ingress资源一次性转换为Gateway API资源。有关将Ingress资源迁移到Gateway API资源的详细信息,请参阅Ingress迁移指南。
七、专业术语表
术语 | 翻译 |
---|---|
Gateway API | 网关API |
Infrastructure Provider | 基础设施提供者 |
Cluster Operator | 集群运营商 |
Application Developer | 应用开发者 |
GatewayClass | 网关类 |
Gateway | 网关 |
HTTPRoute | HTTP路由 |
custom resources | 自定义资源 |
listener | 监听器 |
backend | 后端 |
conformance | 一致性 |
Ingress | 入口 |