概览

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

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

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

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

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

适用于网格的 Gateway API

Gateway API 是一个 Kubernetes 项目,专注于 Kubernetes 中的第 4 层和第 7 层路由。它继承了 Ingress、负载均衡和 Service Mesh 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 服务。用户选择使用 GRPCRoute, 当 需要专门路由 gRPC 流量并利用 针对 gRPC 量身定制的功能,例如 gRPC 方法和服务匹配。

以下示例展示了 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。当 xds:/// 前缀被舍弃时,GRPCRoutes 还可用于路由来自具有 Sidecar 注入(例如 Envoy)的代理客户端的请求。

单集群网格图

后续步骤