概览

Cloud Service Mesh 可为您的基础架构提供服务网络功能, 包括高级流量管理、可观测性和安全性。 但是,配置和运营服务网格是一项复杂的任务。当前页面 介绍了如何使用 Kubernetes 配置 Cloud Service Mesh Gateway API。这些 API 旨在简化和改进整体网格配置体验。

借助适用于 Mesh 的 Kubernetes Gateway API,您可以为无代理 gRPC 和 Envoy 代理部署配置 Cloud Service Mesh。适用于 Mesh 的 Gateway API 模型具有多项关键优势:

  • Gateway API 提供了一个一致的单一接口,用于管理 Kubernetes 集群中的入站(南北)流量和服务网格(东西)流量。
  • 服务网格支持高级流量路由模式。借助网关 API,您可以设计和管理复杂的路由规则。
  • 借助网关 API,开发者可以集中精力定义高级路由规则 无需深入了解微服务 底层服务网格实现
  • 此 API 的设计具有可扩展性,可实现未来的增强功能和 对新协议和用例的支持。
  • Gateway API 拥有强大的社区支持,并且得到了越来越多的 服务网格提供商和工具组成的生态系统。

从 1.1.0 版开始,用于支持服务网格用例的 GAMMA 计划已纳入标准渠道,并被视为 GA 版本。

spec 提议由应用所有者为网格配置流量规则 方法是配置 Route resource(有时称为 xRoute) 并将 Kubernetes Service 资源设为 parentRef。此方法取决于 GEP-1324:Gateway API 中的服务网格中定义的 Kubernetes Service 的“前端”和“后端”角色,其中“前端”角色用作 parentRefService 的“后端”角色用作 backendRef。合规实现使用 Service 名称(用于匹配流量)和 backendRef 端点(规范 IP) 地址。

适用于网格的 Gateway API

Gateway API 是一个 Kubernetes 项目,专注于 Kubernetes 中的第 4 层和第 7 层路由。它可以成功完成 Ingress 负载均衡和服务网格 API。该模型旨在实现多用途、描述性和以角色为中心,其配置主要位于路由层。特定于协议的资源(如 HTTPRouteGRPCRoute)可用于实现高级 入站流量和网格路由

GAMMA 计划 (Gateway API) 定义了如何将 Gateway API 用于服务间服务 或东/西流量 同一集群中GAMMA 旨在介绍如何使用 Gateway API 实现以下目的: 只需对 Gateway API 进行极少的修改,即可配置服务网格,同时 践行以角色为导向原则的机制, 大自然。GAMMA 还强调,促进数据内外的一致性的重要性 Gateway API 的各种服务网格实现,无论其 底层技术或代理

GAMMA 利用 Gateway API 规范中的现有可扩展点,因此需要 无需更改 API 或添加新资源。为此,您可以扩展路由资源定义(Gateway API 中的 GRPCRouteHTTPRoute)以指示服务网格用例,具体方法是将路由资源与服务资源相关联,如适用于服务网格的 Gateway API 中所述。

以下示例展示了使用 HTTPRoute 时网格的用例:

apiVersion:  gateway.networking.k8s.io
kind: HTTPRoute
metadata:
  name: echo-route
spec:
  parentRefs:
  - kind: Service
    group: ""
    name: echo-service
  rules:
  - backendRefs:
    - name: echo-v1
      port: 80
      weight: 9
  - backendRefs:
    - name: echo-v2
      port: 80
      weight: 1

HTTPRoute 图

HTTPRoute 引用 Service 作为其 parentRef,这表示 HTTPRoute 路由已针对服务网格用例进行配置。在上面的示例中,echo-service 服务被指定为 parentRef,这意味着 HTTPRoute 已附加到 echo-service 的前端。客户端发送到 echo-service 的所有流量都会根据 HTTPRoute echo-route 进行路由。

GRPCRoute 是另一个 Kubernetes Gateway API 资源,用于将 gRPC 流量路由到 Kubernetes 服务。当用户想要专门路由 gRPC 流量并利用专为 gRPC 量身定制的功能(例如 gRPC 方法和服务匹配)时,会选择使用 GRPCRoute 而非 HTTPRoute。

以下示例说明了如何使用 GRPCRoute:

apiVersion:  gateway.networking.k8s.io
kind: GRPCRoute
metadata:
  name: echo-route
spec:
  parentRefs:
  - kind: Service
    group: ""
    name: echo-service
  rules:
   - matches:
    - method:
        service:echo_basic.grpcecho.GrpcEcho
        method: Echo
    backendRefs:
    - name: grpc-infra-backend-v1
      port: 8080
  - matches:
    - method:
        service:echo_basic.grpcecho.GrpcEcho
        method: EchoTwo
    backendRefs:
    - name: grpc-infra-backend-v2
      port: 8080

GRPCRoute 图

与 HTTPRoute 示例一样,此 GRPCRoute 已针对服务网格进行配置 用例。发送到 xds:///echo-service.default.svc.cluster.local:8080 的所有流量 则根据 GRPCRoute echo-route 进行路由。此示例中的路由规则与 gRPC 方法匹配,并将流量路由到特定的 backendRef。GRPCRoutes 也可用于从 使用 Sidecar 注入的代理客户端(例如 Envoy),当 xds:/// 前缀时 被舍弃。

单集群网格图

后续步骤