| @@ -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。 | |||||