You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS集群Confluent Kafka外部访问配置后,Node.js生产者连接失败排查

AKS集群Confluent Kafka外部访问故障排查与解决

问题描述

在AKS集群中配置Confluent Kafka外部访问,已通过Ingress成功连接Control Center,但Kafka外部访问异常:

  • Kafka spec配置如下:
    listeners:
        external:
          externalAccess:
            type: loadBalancer
            loadBalancer: 
              domain: lb.example.it
              advertisedPort: 39093
    
  • 配置后生成两个LoadBalancer服务,/etc/hosts添加了IP映射:
    20.31.10.27    kafka.lb.example.it
    20.31.9.167    b0.lb.example.it
    
  • Node.js生产者设置brokers为['kafka.lb.example.it:39093'],连接时报错:
    {"level":"ERROR","timestamp":"2023-01-22T08:43:20.761Z","logger":"kafkajs","message":"[Connection] Connection error: connect ECONNREFUSED 127.0.0.2:9092","broker":"kafka-0.kafka.ckafka.svc.cluster.local:9092","clientId":"my-app","stack":"Error: connect ECONNREFUSED 127.0.0.2:9092\n    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16)"}
    
    程序自动使用内部Pod地址kafka-0.kafka.ckafka.svc.cluster.local:9092而非预期的外部地址,导致连接失败。

故障原因

Kafka客户端连接初始broker后,会从broker获取集群元数据(包含其他broker的地址)。此处问题在于broker返回的是内部Pod地址,外部客户端无法访问该地址,进而引发连接拒绝错误。

解决步骤

  1. 修正Kafka外部监听器的advertised配置
    需确保外部监听器的advertisedAddress配置为外部可访问的地址模板,根据LoadBalancer部署方式调整:

    • 若使用统一集群外部地址(kafka.lb.example.it):
      listeners:
        external:
          externalAccess:
            type: loadBalancer
            loadBalancer:
              domain: lb.example.it
              advertisedPort: 39093
              advertisedAddress: "kafka.lb.example.it"
      
    • 若每个broker对应独立LoadBalancer(如b0.lb.example.it对应kafka-0):
      listeners:
        external:
          externalAccess:
            type: loadBalancer
            loadBalancer:
              domain: lb.example.it
              advertisedPort: 39093
              advertisedAddress: "{brokerId}.lb.example.it"
      

    配置完成后重新部署Kafka集群,确保配置生效。

  2. 验证元数据返回的地址正确性
    使用kafkacat工具测试外部地址返回的元数据:

    kafkacat -L -b kafka.lb.example.it:39093
    

    检查输出中的broker条目,确认返回的是外部可访问地址,而非内部Pod地址。

  3. 确认LoadBalancer配置有效性
    通过kubectl命令检查服务状态:

    kubectl get svc -n ckafka
    

    确认两个LoadBalancer服务的EXTERNAL-IP已正常分配,且端口映射存在39093:xxxx/TCP(xxxx为Kafka Pod的内部监听端口)。

  4. 检查网络与防火墙规则

    • 确认AKS集群防火墙允许外部访问LoadBalancer的39093端口。
    • 检查集群内部网络策略,确保未阻止Kafka Pod与LoadBalancer服务的通信。
  5. 调整客户端配置(可选)
    确保Node.js客户端使用正确的端口39093连接,若使用独立broker LB,需在客户端所在环境的/etc/hosts添加所有broker的LB地址映射。


内容的提问来源于stack exchange,提问作者Luana Mantovan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:50:39