目前服务网格处于初步实验阶段。资源命名可能会出现变化。
Dubbo 服务网格的流量管理模型与 Istio 保持一致,但针对 Dubbo 协议和无 Sidecar 架构进行了优化。核心组件包括:
通过配置这些资源,您可以实现流量路由、负载均衡、故障恢复等功能,而无需修改应用程序代码。
ServiceRoute 是 Dubbo 服务网格中用于定义路由规则的核心资源,对应 Istio 的 VirtualService。它允许您配置如何将请求路由到服务的不同版本或实例。
服务路由让您能够:
以下示例展示了如何配置 ServiceRoute 来实现流量分割:
apiVersion: networking.dubbo.apache.org/v1
kind: ServiceRoute
metadata:
name: provider-weights
namespace: grpc-app
spec:
hosts:
- provider.grpc-app.svc.cluster.local
http:
- route:
- destination:
host: provider.grpc-app.svc.cluster.local
subset: v1
weight: 10
- destination:
host: provider.grpc-app.svc.cluster.local
subset: v2
weight: 90
hosts 字段指定了 ServiceRoute 应用到的服务。可以使用完全限定域名(FQDN)或短名称。控制平面会自动将短名称解析为 FQDN。
路由规则定义了如何将请求路由到目标服务。每个路由规则可以包含:
当多个 ServiceRoute 匹配同一个服务时,控制平面会按照配置的创建时间顺序应用规则。更具体的匹配条件会优先于通用规则。
ServiceRoute 支持更复杂的路由场景,包括:
delegate 字段实现路由规则的组合和复用SubsetRule 是 Dubbo 服务网格中用于定义服务子集和流量策略的资源,对应 Istio 的 DestinationRule。它允许您将服务实例组织成逻辑子集,并为每个子集配置流量策略。
SubsetRule 支持多种负载均衡策略,通过 MeshConfig 中的 LocalityLbSetting 配置:
以下示例展示了如何创建子集并配置流量策略:
apiVersion: networking.dubbo.apache.org/v1
kind: SubsetRule
metadata:
name: provider-versions
namespace: grpc-app
spec:
host: provider.grpc-app.svc.cluster.local
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
tls:
mode: ISTIO_MUTUAL
子集通过 Pod 标签进行匹配。在上面的示例中,带有 version: v1 标签的 Pod 会被分配到 v1 子集,带有 version: v2 标签的 Pod 会被分配到 v2 子集。
通过网关统一控制网格的入站与出站流量,可以规定哪些流量允许进入或离开网格。
Dubbo 网格网关是基于 Kubernetes Gateway API 实现,使用 Pixiu Gateway 作为数据面代理。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway
namespace: dubbo-ingress
spec:
gatewayClassName: dubbo
listeners:
- name: default
hostname: "*.example.com"
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: All