leiyun 2 miesięcy temu
rodzic
commit
95f51f25a2
1 zmienionych plików z 19 dodań i 0 usunięć
  1. +19
    -0
      isolated/kafka-switch.md

+ 19
- 0
isolated/kafka-switch.md Wyświetl plik

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

Ładowanie…
Anuluj
Zapisz