📋 Dubbo 微服务架构完整部署
一、架构概览

┌─────────────────────────────────────────────────────────────┐
│ Kubernetes 集群 (myserver namespace) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ 注册/订阅 ┌──────────────┐ │
│ │ Provider │ ◄──────────────► │ ZooKeeper │ │
│ │ (服务提供者) │ │ (注册中心) │ │
│ └──────────────┘ └──────────────┘ │
│ │ ▲ │
│ │ 调用 │ 读取 │
│ ▼ │ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Consumer │ │ Dubbo Admin │ │
│ │ (服务消费者) │ │ (管理控制台) │ │
│ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
二、环境信息
|----------------|--------|------------------|
| 组件 | 版本 | 说明 |
| Kubernetes | v1.33+ | 容器编排平台 |
| ZooKeeper | 3.4.14 | 注册中心 |
| Dubbo Admin | 2.8.4 | 管理控制台 |
| Dubbo Provider | 2.1.5 | 服务提供者 |
| Dubbo Consumer | 2.1.5 | 服务消费者 |
| Tomcat | 8.5.43 | Dubbo Admin 运行容器 |
三、部署步骤详解
1. ZooKeeper 注册中心部署
# 查看 ZooKeeper 状态
kubectl get pod -n myserver | grep zookeeper
kubectl get svc -n myserver | grep zookeeper
关键配置:
- Service 名称:
zookeeper(ClusterIP: 10.100.23.56) - Headless Service:
zookeeper-headless - 端口:2181
2. Dubbo Admin 部署
2.1 Dockerfile 关键配置
FROM tomcat-base:v8.5.43
ADD server.xml /apps/tomcat/conf/server.xml
ADD dubboadmin.war /data/tomcat/webapps/
RUN cd /data/tomcat/webapps && unzip dubboadmin.war && rm -rf dubboadmin.war
EXPOSE 8080 8443
2.2 修改 ZooKeeper 配置
# /data/tomcat/webapps/dubboadmin/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://zookeeper.myserver.svc.cluster.local:2181
dubbo.admin.registry.address=zookeeper://zookeeper.myserver.svc.cluster.local:2181
dubbo.admin.config-center=zookeeper://zookeeper.myserver.svc.cluster.local:2181
dubbo.admin.metadata-report.address=zookeeper://zookeeper.myserver.svc.cluster.local:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
2.3 构建镜像
cd /opt/k8s-data/dockerfile/web/myserver/dubbo/dubboadmin
./build-command.sh v1.0
2.4 K8s 部署文件
# 1.dubboadmin-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myserver-dubboadmin-deployment
namespace: myserver
spec:
replicas: 1
selector:
matchLabels:
app: myserver-dubboadmin
template:
metadata:
labels:
app: myserver-dubboadmin
spec:
containers:
- name: myserver-dubboadmin-container
image: harbor.myarchitect.online/myserver/dubboadmin:v1.0
ports:
- containerPort: 8080
# 2.dubboadmin-service.yaml
kind: Service
apiVersion: v1
metadata:
name: myserver-dubboadmin-service
namespace: myserver
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 8080
nodePort: 30066
selector:
app: myserver-dubboadmin
3. Provider 服务提供者部署
3.1 修改配置文件
# dubbo.properties
dubbo.container=log4j,spring
dubbo.application.name=demo-provider
dubbo.registry.address=zookeeper://10.100.23.56:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
3.2 构建镜像
cd /opt/k8s-data/dockerfile/web/myserver/dubbo/provider
./build-command.sh v2
3.3 K8s 部署文件
# 1.provider-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myserver-provider-deployment
namespace: myserver
spec:
replicas: 1
selector:
matchLabels:
app: myserver-provider
template:
metadata:
labels:
app: myserver-provider
spec:
containers:
- name: myserver-provider-container
image: harbor.myarchitect.online/myserver/dubbo-demo-provider:v2
ports:
- containerPort: 20880
4. Consumer 服务消费者部署
# 1.consumer-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myserver-consumer-deployment
namespace: myserver
spec:
replicas: 1
selector:
matchLabels:
app: myserver-consumer
template:
metadata:
labels:
app: myserver-consumer
spec:
containers:
- name: myserver-consumer-container
image: harbor.myarchitect.online/myserver/dubbo-demo-consumer:v1
四、问题排查与解决
问题1:Dubbo Admin 404 错误
现象 :访问 http://IP:30066/dubboadmin 返回 404
排查步骤:
# 1. 查看 Pod 状态
kubectl get pod -n myserver | grep dubboadmin
# 2. 查看日志
kubectl logs -n myserver <pod-name>
# 3. 进入容器检查
kubectl exec -it -n myserver <pod-name> -- bash
curl http://localhost:8080/dubboadmin
# 4. 查看 Tomcat 日志
kubectl exec -it -n myserver <pod-name> -- cat /apps/tomcat/logs/catalina.out
根本原因:Tomcat 的 server.xml 中 8080 端口被注释
解决方案:
<!-- 取消注释 -->
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
问题2:Provider 无法注册到 ZooKeeper
现象 :ZooKeeper 中 /dubbo 路径为空
排查步骤:
# 1. 查看 Provider 日志
kubectl logs -n myserver <provider-pod> | grep -i error
# 2. 查看配置文件
kubectl exec -it -n myserver <provider-pod> -- cat /apps/dubbo/provider/conf/dubbo.properties
# 3. 查看实际存在的 Service
kubectl get svc -n myserver | grep zookeeper
# 4. 查看 ZooKeeper 注册内容
kubectl exec -it -n myserver zookeeper-0 -- zkCli.sh ls /dubbo
错误日志:
java.net.UnknownHostException: zookeeper1.myserver.svc.cluster.local
根本原因:配置中使用了不存在的 ZooKeeper 地址
解决方案:改为正确的地址
# 错误配置
dubbo.registry.address=zookeeper://zookeeper1.myserver.svc.cluster.local:2181
# 正确配置
dubbo.registry.address=zookeeper://zookeeper.myserver.svc.cluster.local:2181
# 或
dubbo.registry.address=zookeeper://10.100.23.56:2181
五、验证命令
# 1. 检查所有 Pod 状态
kubectl get pod -n myserver
# 2. 检查服务注册
kubectl exec -it -n myserver zookeeper-0 -- zkCli.sh ls /dubbo
# 预期输出:[com.alibaba.dubbo.demo.DemoService]
# 3. 验证 Dubbo Admin
curl http://192.168.44.111:30066/dubboadmin
# 或在浏览器打开
# 4. 查看 Provider 日志
kubectl logs -n myserver $(kubectl get pod -n myserver -l app=myserver-provider -o jsonpath='{.items[0].metadata.name}')
# 5. 查看 Consumer 日志
kubectl logs -n myserver $(kubectl get pod -n myserver -l app=myserver-consumer -o jsonpath='{.items[0].metadata.name}')
六、最终成功状态
|-------------|-----------|---------------------------------------------------------------------------------------------------------------------------|
| 组件 | 状态 | 访问方式 |
| ZooKeeper | ✅ Running | zookeeper:2181 |
| Provider | ✅ Running | 已注册到 ZooKeeper |
| Consumer | ✅ Running | 可调用 Provider |
| Dubbo Admin | ✅ Running | http://192.168.44.111:30066/dubboadmin |
七、关键经验总结
- 地址配置 :始终使用
kubectl get svc确认实际存在的 Service 名称 - 日志排查 :
kubectl logs和catalina.out是定位问题的关键 - 配置持久化:Pod 内的修改不持久,必须重新构建镜像
- 端口映射:注意区分 containerPort、targetPort、nodePort
- DNS 解析 :K8s 内部使用
service.namespace.svc.cluster.local格式
八、访问信息
Dubbo Admin 登录页面:http://192.168.44.111:30066/dubboadmin
用户名:root
密码:root
注册服务:com.alibaba.dubbo.demo.DemoService
Provider 端口:20880
Consumer 调用:sayHello 方法
部署完成! 🎉
