概览

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

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

  • Gateway API 提供了一个单一、一致的接口,用于同时管理 Kubernetes 集群内的入站(南北)流量和服务网格(东西)流量。
  • 服务网格可实现高级流量路由模式。借助 Gateway API,您可以设计和管理复杂的路由规则。
  • 借助 Gateway API,开发者可以专注于为其微服务定义高级路由规则和政策,而无需深入了解底层服务网格实现。
  • 该 API 设计为具有可扩展性,以便在未来进行增强并支持新的协议和应用场景。
  • Gateway API 得到了强大的社区支持,并得到了不断壮大的服务网格提供方和工具生态系统的支持。

GAMMA 计划致力于支持服务网格应用场景,自 v1.1.0 以来一直是标准渠道的一部分,并被视为 GA。

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

适用于网格的 Gateway API

Gateway API 是一个 Kubernetes 项目,专注于 Kubernetes 内的第 4 层和第 7 层路由。它继承了入站流量、负载均衡和服务网格 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 是为服务网格应用场景而配置的。无代理 gRPC 客户端发送到 xds:///echo-service.default.svc.cluster.local:8080 的所有流量都将根据 GRPCRoute echo-route 进行路由。此示例中的路由规则与 gRPC 方法匹配,并将流量路由到特定的 backendRef。当 xds:/// 前缀被舍弃时,GRPCRoutes 还可用于通过边车注入(例如 Envoy)对来自代理客户端的请求进行路由。

单集群网格图表

后续步骤