Gateway API:Kubernetes中的动态基础设施配置与流量路由

摘要:本文详细介绍了Kubernetes中的Gateway API,包括其设计原则、资源模型、请求流程、一致性等方面。Gateway API提供了动态基础设施配置和高级流量路由功能,通过可扩展、面向角色和协议感知的配置机制使网络服务可用。

一、引言

Gateway API是一系列API类型,用于提供动态基础设施配置和高级流量路由功能。它利用可扩展、面向角色且具有协议感知的配置机制,使网络服务得以应用。Gateway API作为一个附加组件,涵盖了多种API类型,旨在实现动态基础设施配置和高级流量路由。

二、设计原则

  1. 面向角色:Gateway API类型根据负责管理Kubernetes服务网络的组织角色进行建模。包括基础设施提供者(管理允许多个隔离集群服务多个租户的基础设施,如云提供商)、集群运营商(管理集群,通常关注策略、网络访问、应用权限等)和应用开发者(管理在集群中运行的应用,通常关注应用级配置和服务组合)。
  2. 可移植性:Gateway API规范定义为自定义资源,并得到众多实现的支持。
  3. 表达性:Gateway API类型支持常见流量路由用例的功能,如基于头部的匹配、流量加权等,这些功能在Ingress中以前只能通过自定义注释实现。
  4. 可扩展性:Gateway允许在API的不同层链接自定义资源,从而在API结构的适当位置实现精细的定制。

三、资源模型

  1. 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实现为反向代理,流程如下:

  1. 客户端开始为URL“http://www.example.com”准备HTTP请求。
  2. 客户端的DNS解析器查询目标名称,并获取与网关关联的一个或多个IP地址的映射。
  3. 客户端向网关IP地址发送请求;反向代理接收HTTP请求,并使用主机头匹配从网关和附加的HTTPRoute派生的配置。
  4. 可选地,反向代理可以根据HTTPRoute的匹配规则执行请求头和/或路径匹配。
  5. 可选地,反向代理可以修改请求,例如根据HTTPRoute的过滤规则添加或删除头。
  6. 最后,反向代理将请求转发到一个或多个后端。

五、一致性

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 入口

你可能感兴趣的:(k8s,gateway,kubernetes,容器)