# 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/内网路由方案，避免影响正式线上环境。