概览
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
的“前端”和“后端”角色,其中“前端”角色用作 parentRef
,Service
的“后端”角色用作 backendRef
。合规实现使用
Service
名称(用于匹配流量)和 backendRef
端点(规范 IP)
地址。
适用于网格的 Gateway API
Gateway API 是一个 Kubernetes 项目,专注于 Kubernetes 中的第 4 层和第 7 层路由。它可以成功完成 Ingress
负载均衡和服务网格 API。该模型旨在实现多用途、描述性和以角色为中心,其配置主要位于路由层。特定于协议的资源(如 HTTPRoute
和 GRPCRoute
)可用于实现高级
入站流量和网格路由
GAMMA 计划 (Gateway API) 定义了如何将 Gateway API 用于服务间服务 或东/西流量 同一集群中GAMMA 旨在介绍如何使用 Gateway API 实现以下目的: 只需对 Gateway API 进行极少的修改,即可配置服务网格,同时 践行以角色为导向原则的机制, 大自然。GAMMA 还强调,促进数据内外的一致性的重要性 Gateway API 的各种服务网格实现,无论其 底层技术或代理
GAMMA 利用 Gateway API 规范中的现有可扩展点,因此需要 无需更改 API 或添加新资源。为此,您可以扩展路由资源定义(Gateway API 中的 GRPCRoute 或 HTTPRoute)以指示服务网格用例,具体方法是将路由资源与服务资源相关联,如适用于服务网格的 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 引用 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
与 HTTPRoute 示例一样,此 GRPCRoute 已针对服务网格进行配置
用例。发送到 xds:///echo-service.default.svc.cluster.local:8080
的所有流量
则根据 GRPCRoute echo-route 进行路由。此示例中的路由规则与 gRPC 方法匹配,并将流量路由到特定的 backendRef
。GRPCRoutes 也可用于从
使用 Sidecar 注入的代理客户端(例如 Envoy),当 xds:///
前缀时
被舍弃。