Bitnami Kafka Helm Chart SSL域名验证失败(DNS/LoadBalancer场景)及优化咨询
解决Bitnami Kafka Helm Chart中TLS证书与advertisedListeners不匹配的问题
核心问题原因
Bitnami Kafka Helm Chart默认会自动抓取LoadBalancer的公网IP,以此生成advertised.listeners配置。但你的TLS证书绑定的是自定义域名,证书的主题备用名称(SAN)不包含该IP,导致客户端发起SSL握手时因域名/IP不匹配触发认证失败,错误信息如下:
org.apache.kafka.common.errors.SslAuthenticationException: SSL handshake failed Caused by: javax.net.ssl.SSLHandshakeException: No subject alternative names matching IP address <ip> found
优雅解决方案:使用externalDomain参数自动生成正确配置
Bitnami Chart内置了externalDomain参数,无需手动编写完整的advertisedListeners,只需传入你的Kafka域名,Chart会自动生成匹配的advertised.listeners配置。
具体配置示例
在Helm values文件(或helm install/helm upgrade命令中)添加以下配置:
externalDomain: "your-kafka.example.com" tls: enabled: true # 若使用cert-manager管理Let's Encrypt证书,补充证书相关配置: certManager: enabled: true issuer: name: "letsencrypt-prod" kind: "ClusterIssuer"
配置生效逻辑
当设置externalDomain后,Chart会根据你启用的协议(PLAINTEXT/SSL等)自动构建对应的advertised.listeners,例如:
- 仅启用SSL时,生成
SSL://your-kafka.example.com:9093 - 同时启用PLAINTEXT和SSL时,生成
PLAINTEXT://your-kafka.example.com:9092,SSL://your-kafka.example.com:9093
这样客户端获取到的advertised地址是绑定证书的域名,与证书的CN/SAN完全匹配,即可避免SSL握手失败问题。
验证配置正确性
部署完成后,可进入Kafka Pod查看server.properties中的配置:
kubectl exec -it <kafka-pod-name> -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listeners
输出应显示为你设置的域名,而非LoadBalancer的IP。
备选方案:手动指定advertisedListeners
如果需要更细粒度的控制(比如混合不同协议或端口),仍可手动设置advertisedListeners:
advertisedListeners: external: - "SSL://your-kafka.example.com:9093"
但externalDomain是更贴合Chart设计的优雅方式,能减少手动配置的复杂度。
内容的提问来源于stack exchange,提问作者SilverTear
相关产品推荐
相关产品推荐

