safety-eval-service/docs/gbs/GBS-Dubbo-NodePort映射与还原记录.md

181 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# GBS Dubbo NodePort 映射与还原记录
记录时间2026-07-03
## 背景
本地项目连接 100 开发环境 Nacos 后Dubbo consumer 从 `jjb-dragon-facade` 获取到的 provider 地址是 k8s Pod IP例如
```text
10.244.178.143:20880
```
本地电脑无法直连 k8s Pod 网段,因此曾临时采用方案 A通过 NodePort 暴露 k8s 内 Dubbo provider并让 provider 注册 `192.168.20.100:32xxx` 到 Nacos。
## 临时映射操作
### 1. 创建 Dubbo NodePort Service
为实际注册 Dubbo provider 的底座服务创建 `*-dubbo` NodePort Service端口范围如下
```text
jjb-saas-system 32080
jjb-saas-auth 32081
jjb-saas-events 32082
jjb-saas-security 32083
jjb-saas-message 32084
jjb-saas-login 32085
jjb-saas-base 32086
jjb-saas-process-layout 32087
jjb-saas-user 32088
jjb-saas-official 32089
jjb-saas-facade 32090
jjb-saas-open-platform 32091
jjb-saas-application 32092
jjb-saas-attachment 32093
jjb-saas-formily-design 32094
jjb-saas-desk 32095
jjb-saas-config 32096
jjb-saas-document 32097
jjb-saas-component-design 32098
jjb-saas-view 32099
jjb-saas-gateway 32100
```
Service 结构示例:
```yaml
apiVersion: v1
kind: Service
metadata:
name: jjb-saas-message-dubbo
namespace: jjb-dragon
spec:
type: NodePort
selector:
app: jjb-saas-message-pod
ports:
- name: dubbo
protocol: TCP
port: 20880
targetPort: 20880
nodePort: 32084
```
### 2. 设置 Deployment 运行时环境变量
给对应 Deployment 设置:
```bash
kubectl set env deployment/<service>-deploy -n jjb-dragon \
DUBBO_IP_TO_REGISTRY=192.168.20.100 \
DUBBO_PORT_TO_REGISTRY=<nodePort>
```
示例:
```bash
kubectl set env deployment/jjb-saas-message-deploy -n jjb-dragon \
DUBBO_IP_TO_REGISTRY=192.168.20.100 \
DUBBO_PORT_TO_REGISTRY=32084
```
### 3. 开放防火墙端口
```bash
firewall-cmd --permanent --add-port=32080-32100/tcp
firewall-cmd --reload
```
### 4. 临时映射备份位置
```text
/root/codex-backups/dubbo-nodeport-20260703125329
```
## 还原操作
用户要求 100 环境不要映射 Dubbo 到外部端口,因此已执行还原。
### 1. 清理 Deployment 环境变量
```bash
kubectl set env deployment/<service>-deploy -n jjb-dragon \
DUBBO_IP_TO_REGISTRY- \
DUBBO_PORT_TO_REGISTRY-
```
### 2. 删除 Dubbo NodePort Service
```bash
kubectl delete svc <service>-dubbo -n jjb-dragon --ignore-not-found=true
```
已删除范围:
```text
jjb-saas-application-dubbo
jjb-saas-attachment-dubbo
jjb-saas-auth-dubbo
jjb-saas-base-dubbo
jjb-saas-component-design-dubbo
jjb-saas-config-dubbo
jjb-saas-desk-dubbo
jjb-saas-document-dubbo
jjb-saas-events-dubbo
jjb-saas-facade-dubbo
jjb-saas-formily-design-dubbo
jjb-saas-gateway-dubbo
jjb-saas-login-dubbo
jjb-saas-message-dubbo
jjb-saas-official-dubbo
jjb-saas-open-platform-dubbo
jjb-saas-process-layout-dubbo
jjb-saas-security-dubbo
jjb-saas-system-dubbo
jjb-saas-user-dubbo
jjb-saas-view-dubbo
```
### 3. 关闭防火墙端口
```bash
firewall-cmd --permanent --remove-port=32080-32100/tcp
firewall-cmd --reload
```
### 4. 还原前备份位置
```text
/root/codex-backups/dubbo-nodeport-restore-20260703180914
```
## 还原后验证
### k8s 验证
```bash
kubectl get svc -n jjb-dragon | grep -- '-dubbo'
kubectl get deploy -n jjb-dragon -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.template.spec.containers[0].env}{"\n"}{end}' | grep 'DUBBO_.*TO_REGISTRY'
```
结果:无 `*-dubbo` Service`DUBBO_IP_TO_REGISTRY` / `DUBBO_PORT_TO_REGISTRY` 环境变量。
### 本机端口验证
从本机测试:
```text
192.168.20.100:32080-32100 全部 CLOSED
```
### Nacos 验证
`jjb-dragon-facade` 中不再存在 `192.168.20.100:32xxx` provider。服务重启后重新回到 k8s 内部注册方式,即 Pod IP例如 `10.244.*:20880`
## 注意事项
1. 本次还原没有修改本地项目代码。
2. 本次还原没有重新打镜像。
3. 本次还原会使本地电脑不能再通过 `192.168.20.100:32xxx` 直连 k8s 内 Dubbo provider。
4. 如后续仍需要本地调用 k8s Dubbo 服务,建议优先采用独立 local-dev namespace 或 VPN/内网路由方案,避免影响正式线上环境。