【每日一个云原生小技巧 #38】Kubernetes Gateway

2023-12-06 17:31:08 浏览数 (1)

Kubernetes Gateway API 是一组 API 类型,用于提供动态基础设施配置和高级流量路由功能。这些 API 面向角色、协议感知,并可扩展,适用于多种组织角色,如基础设施提供商、集群操作员和应用程序开发者。它们通过定制资源定义,并受到多种实现的支持。

资源模型

Gateway API 包含三种稳定的 API 类型:

  1. GatewayClass:定义一组具有共同配置的网关,由实现该类的控制器管理。
  2. Gateway:定义一个流量处理基础设施的实例,例如云负载均衡器。
  3. 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 如何灵活地用于不同的网络和服务场景,增强了微服务架构的可靠性和可管理性。

0 人点赞