Strimzi配置Kafka外部访问时LoadBalancer IP pending问题
问题原因
LoadBalancer类型的Service需要K8s集群配套负载均衡控制器支持才能分配对外IP,云厂商托管集群默认自带该控制器,本地自建集群默认没有,所以会出现EXTERNAL-IP为<pending>的情况。结合你的配置,要实现双向外部访问,需要根据集群场景补充/修改以下配置:
场景1:云厂商托管K8s集群
你当前手动指定了broker的对外广播地址为10.0.0.200,但没有给LoadBalancer服务指定绑定IP,补充配置如下:
listeners: - name: external port: 9094 type: loadbalancer tls: false configuration: loadBalancerIP: 10.0.0.200 # 新增:指定负载均衡服务绑定的IP,和广播地址保持一致 # 可按需放开以下配置限制访问源IP、保留客户端源地址 #externalTrafficPolicy: Local #loadBalancerSourceRanges: # - 10.0.0.200/32 brokers: - broker: 0 advertisedHost: 10.0.0.200 advertisedPort: 9094 # 调整为负载均衡服务端口,无需映射到NodePort端口段
配置生效后负载均衡服务会自动绑定指定IP,EXTERNAL-IP字段会更新为10.0.0.200。
场景2:本地自建K8s集群(kubeadm/kind/minikube等)
本地集群默认无负载均衡控制器,建议改用NodePort类型的对外监听,修改配置如下:
listeners: - name: external port: 9094 type: nodeport # 修改监听类型为NodePort tls: false configuration: brokers: - broker: 0 advertisedHost: 你的K8s集群任意节点的对外可访问IP advertisedPort: 30123 # 端口需要落在K8s默认NodePort范围(30000-32767)内
修改后Strimzi会自动创建NodePort类型的服务,外部客户端可通过节点IP:30123访问Kafka服务。
额外检查项
- 确认集群安全组、防火墙规则放开了对应端口的入站、出站访问,保障双向通信正常
- 如果后续开启TLS验证,需要在监听配置中补充对外IP到证书的SAN列表,避免证书校验失败
- 如修改配置后服务状态仍异常,可执行
kubectl describe service my-cluster-kafka-0查看事件日志排查具体报错
内容的提问来源于stack exchange,提问作者E. Nygma
相关产品推荐
相关产品推荐

