From 95f51f25a22c88c1caa0707a562f7e07732301a1 Mon Sep 17 00:00:00 2001 From: leiyun Date: Mon, 20 Jul 2026 23:00:33 +0800 Subject: [PATCH] save --- isolated/kafka-switch.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/isolated/kafka-switch.md b/isolated/kafka-switch.md index 600bead..af82e6a 100644 --- a/isolated/kafka-switch.md +++ b/isolated/kafka-switch.md @@ -305,3 +305,22 @@ topic 名是否完全一致 是否有车辆关系、权限、过滤规则导致数据被丢弃 ``` + +## 排障记录:容器连不上 tj-kafka(NAT 回环 + 端口白名单) + +现象:emp-data 日志持续刷 `Bootstrap broker ip-cld.cn:29362 (id: -1) disconnected`,宿主机 telnet 29362 却能通。 + +根因(本机特定环境,非甲方 Kafka 本身故障): +1. `ip-cld.cn` 解析到本机公网 IP `117.173.87.39`,容器访问会经网关做 NAT 回环(hairpin)。 +2. 宿主机 `DOCKER-USER` 链对 29362 端口做了源 IP 白名单,仅放行 4 个公网 IP,其余 DROP。docker 容器源 IP 为 `172.x`,不在白名单 → 被丢。 + 因此只有 host 网络模式(流量表现为白名单里的公网 IP)能连通,所有 bridge 容器路径均失败。 + +本机临时处理(仅在本服务器 runtime 生效,未固化进仓库通用包): +1. 放行本机 docker 网段访问 29362,并写入 `/etc/iptables/rules.v4`(netfilter-persistent 开机恢复): + `-A DOCKER-USER -s 172.16.0.0/12 -p tcp -m tcp --dport 29362 -j ACCEPT`(置于该端口 DROP 规则之前) +2. 在 test/uat 运行目录的 `docker-compose.yml` 中,给 emp-data、emp-ws 增加: + `extra_hosts: ["ip-cld.cn:192.168.1.231"]`(宿主机 LAN IP),使容器经宿主机 29362 发布端口访问 tj-kafka,绕开公网回环。 + +彻底解决(建议推动甲方):请 tj-kafka 增加内部监听并通告内网地址,如 +`KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://tj-kafka:9092,EXTERNAL://ip-cld.cn:29362`, +之后消费端可直接用内网地址连接,无需上述 workaround。