Kubernetes Gateway API 是一组 API 类型,用于提供动态基础设施配置和高级流量路由功能。这些 API 面向角色、协议感知,并可扩展,适用于多种组织角色,如基础设施提供商、集群操作员和应用程序开发者。它们通过定制资源定义,并受到多种实现的支持。
资源模型
Gateway API 包含三种稳定的 API 类型:
- GatewayClass:定义一组具有共同配置的网关,由实现该类的控制器管理。
- Gateway:定义一个流量处理基础设施的实例,例如云负载均衡器。
- HTTPRoute:定义从网关监听器到后端网络端点的 HTTP 特定规则,这些端点通常表示为服务(Service)。
使用案例
GatewayClass
GatewayClass 允许不同的控制器实现不同的网关配置。一个 Gateway 必须引用一个包含实现该类控制器名称的 GatewayClass。
代码语言:javascript复制apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: example-class
spec:
controllerName: example.com/gateway-controller
这个示例配置了一个 GatewayClass,由 example.com/gateway-controller
控制器管理。
Gateway
Gateway 描述了一个流量处理基础设施的实例。它定义了一个网络端点,用于处理流量,例如过滤、均衡、分割等,用于服务(Service)等后端。
代码语言:javascript复制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 流量。
HTTPRoute
HTTPRoute 指定了从网关监听器到后端网络端点的 HTTP 请求的路由行为。对于服务(Service)后端,实现可能将后端网络端点表示为服务 IP 或服务的后端端点(Endpoints)。
代码语言:javascript复制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
的 HTTP 流量,其 Host 头设置为 www.example.com
并且请求路径为 /login
,将被路由到端口 8080
上的服务 example-svc
。
通过这些案例,可以看出 Kubernetes Gateway API 如何灵活地用于不同的网络和服务场景,增强了微服务架构的可靠性和可管理性。