概述
本文档提供 Dubbo 与 Mesh(服务网格)集成的完整解决方案。核心结论:Dubbo 支持两种服务网格集成模式——Proxy 模式()和 模式,推荐使用 模式以获得更低延迟和更简化的架构。本文基于 Dubbo 官方文档和社区最佳实践编写,涵盖架构原理、部署步骤和迁移方案。
一、Dubbo Mesh 架构概览
Dubbo Mesh 是 Dubbo 在云原生背景下的微服务整体解决方案,核心目标是实现 Dubbo 服务与 体系的打通,使 Dubbo 应用能够无缝接入 Istio 等主流服务网格产品 。
1.1 核心组件
控制面:采用 Istio 作为统一控制面,提供 适配、服务发现、证书管理、可观测性、流量治理等能力
数据面:Dubbo 应用实例作为数据面组件,支持两种部署模式
1.2 两种部署模式对比
| 特性 | Proxy 模式() | 模式 |
|---|---|---|
| 部署架构 | Dubbo + Envoy 同 Pod 部署 | Dubbo 独立部署 |
| 通信方式 | 流量经 Envoy 代理 | 进程间直接通信 |
| 控制面交互 | Envoy 通过 xDS 与控制面交互 | Dubbo SDK 直接通过 xDS 交互 |
| 性能损耗 | 存在额外代理损耗 | 无额外损耗 |
| 适用场景 | 多语言、平滑升级需求 | 性能敏感、遗留系统迁移 |
| 协议要求 | 建议使用 /gRPC/REST | 任意协议 |
二、Proxy 模式集成方案
2.1 架构原理
在 Proxy 模式下,Dubbo 与 Envoy 部署在同一个 Pod 中 :
Dubbo 只提供业务 API 和 RPC 通信能力
地址发现、负载均衡、路由寻址等服务治理能力下沉到 Envoy
控制面通过 xDS 协议与 Envoy 进行配置分发
2.2 部署要求
版本,通信层选用 、gRPC 或 REST 等 HTTP 协议
集群已安装 Istio,并启用 自动注入
命名空间已打上 istio-= 标签
2.3 关键配置要点
1. 禁用传统注册中心
dubbo..=N/A
2. 配置 映射
确保 名称与 Dubbo 应用名称(dubbo. 中定义)保持一致
3. 端服务引用指定 应用名
@( = "1.0.0", = "dubbo--mesh-", lazy = true)
4. 配置健康检查探针
:
:
path: /live
port: 22222
: 10
: 5
:
:
path: /ready
port: 22222
: 5
: 5
:
:
path: /
port: 22222
: 30
: 10
> 探针使用 Dubbo QOS 模块的 HTTP 服务(默认端口 22222),需添加注解 .istio.io/s: "false" 防止 Istio 重写 HTTP 探针
三、 模式集成方案(推荐)
3.1 架构原理
模式下,Dubbo 进程独立部署并直接通信,通过 xDS 协议直接与 Istio 控制面交互 。该模式在 Dubbo 3.1 版本中正式引入 。
3.2 核心优势
无性能损耗:无 代理中转,适用于性能敏感应用
架构简化:生命周期管理更简单,易于运维部署
环境兼容性广:适用于几乎所有部署环境,不受流量拦截条件限制
平滑迁移:更有利于遗留系统的渐进式迁移
3.3 完整部署步骤
前置准备
1. 安装
2. 安装 (或使用现有 集群)
3. 安装 Istio(需开启 first-party-jwt 支持)
curl -L | sh -
cd istio-1.xx.x
PATH=$PWD/bin:$PATH
--set =demo --set ..=first-party-jwt -y
> 此配置参数为必需,否则将导致客户端认证失败
步骤一:准备示例代码
使用 Dubbo 官方示例仓库:
git clone
cd dubbo-/dubbo--xds
步骤二:构建镜像
# 构建 镜像
cd dubbo--xds-/
build -t /dubbo-demo:dubbo--xds-.0.1 .
# 构建 镜像
cd ../dubbo--xds-/
build -t /dubbo-demo:dubbo--xds-.0.1 .
步骤三:创建命名空间
apply -f
dubbo-demo
步骤四:部署
cd dubbo--xds-/src/main//k8s
apply -f .yml
apply -f .yml
的 配置示例:
: apps/v1
kind:
:
name: dubbo--xds-
: dubbo-demo
spec:
: 2
:
:
app: dubbo--xds-
:
:
:
app: dubbo--xds-
spec:
:
name:
image: /dubbo-demo:dubbo--xds-.0.1
ports:
: 50052
env:
name:
:
:
: .
步骤五:部署
cd dubbo--xds-/src/main//k8s
apply -f .yml
步骤六:验证调用
查看 日志确认调用成功:
logs -f /dubbo--xds-
预期输出:
: hello, xDS ! from host: 172.17.0.5
: hello, xDS ! from host: 172.17.0.6
3.4 xDS 服务发现原理
模式下,Dubbo 以注册中心模式对接 xDS:
节点发现采用服务自省模型
负载均衡和路由配置通过 动态运行时配置传入
构建 时将配置参数传入配置地址
3.5 证书管理(mTLS)
在零信任架构下,Dubbo 支持基于 xDS 的 SDS( )进行证书管理 :
采用 ( For )标准
ID 格式:://<>/ns/<>/sa/<>
Istio 通过环境变量 注入信任域信息
证书签发流程:
1. 创建 RSA 私钥
2. 构建 CSR 模板
3. 自签名 CSR 生成证书
4. 创建 储存 CA 证书和私钥
四、控制面选型与扩展
4.1 推荐使用 Istio
Dubbo Mesh 不绑定特定控制面,支持所有支持 xDS 协议的产品(Istio、、Kuma 等)。如果 Istio 完全满足治理诉求,采用 Istio 为首选方案 。
4.2 接入 Dubbo 定制控制面
若 Istio 模式下部分 Dubbo 能力受限,可接入 Dubbo 社区基于 Istio 的定制版本控制面,以获得:
更多 Dubbo 原生能力支持
更好的性能体验
五、老系统迁移方案
5.1 注册中心数据同步
对于已使用 、Nacos 等注册中心的 Dubbo 应用,迁移到 Mesh 架构需要解决数据同步问题。Dubbo Mesh 通过地址同步机制实现传统注册中心与 服务发现体系的打通 。
5.2 协议通信
对于仍使用 协议的应用,可通过 Mesh 实现协议转换,使 流量在 Mesh 架构中正常流转 。
5.3 协议升级建议
强烈建议将应用升级到 并使用 协议 :
完全兼容 gRPC
支持 -、 等通信模型
可运行于 HTTP/1 和 HTTP/2
七层通信信息可被服务网格识别,提供更全面的云原生能力
若使用 和原生 Dubbo 协议通信,服务网格仅能拦截 TCP 四层流量,治理能力受限 。
六、可视化与管理
6.1 Dubbo Admin
Dubbo Admin 是 Dubbo 集群的可视化控制台,兼容所有 、Mesh 和非 Mesh 架构部署 。
6.2 Istio 生态工具
也可使用 Istio 官方推荐的可观测性工具(Kiali、、)管理 Dubbo Mesh 集群 。
Q1: 模式需要修改业务代码吗?
不需要。 模式下业务代码无需修改,仅需调整注册中心配置(设为 N/A)并确保应用名与 名一致。
Q2:Proxy 模式下的性能损耗具体多大?
性能损耗取决于网络拓扑复杂度,在复杂调用链中损耗更明显。对于性能敏感应用,推荐使用 模式。
Q3:是否必须使用 Istio?
不必须。Dubbo Mesh 支持所有 xDS 协议的控制面(如 、Kuma),但 Istio 是社区推荐且测试最充分的方案。
Q4:Dubbo 2.x 应用能否直接接入 Mesh?
可以。Dubbo 2.x 可通过 Mesh 实现协议转换接入,但功能受限。推荐升级至 Dubbo 3.x 并使用 协议获得完整能力。
参考资料:
1. Dubbo 官方文档 – 服务网格
2. Dubbo 官方文档 – 部署方案
3. Dubbo Mesh 实践(阿里云开发者社区)
4. Cloud – How to Dubbo into Mesh

