Confluent Platform从5.0.0升级至5.5.1后Kafka Broker出现SSL握手失败问题
Confluent Platform 5.0.0升级至5.5.1后SSL监听器频繁握手失败问题解决
问题背景
将Confluent Platform(CP)从5.0.0版本升级至5.5.1版本,集群采用GSSAPI作为安全协议,配置两个监听器:SASL_PLAINTEXT和SSL。升级后每10秒出现SSL握手失败的INFO日志,但业务客户端连接SSL监听器生产消费完全正常。
核心配置
# SASL相关配置 sasl.enabled.mechanisms=GSSAPI sasl.mechanism.inter.broker.protocol=GSSAPI sasl.kerberos.service.name=kafka zookeeper.sasl.enabled=true #confluent.metrics.reporter.sasl.mechanism=GSSAPI # SSL相关配置 ssl.truststore.location=/app/certs/kafka.truststore.jks ssl.truststore.password=<脱敏处理> ssl.keystore.location=/app/certs/broker11.jks ssl.keystore.password=<脱敏处理> ssl.key.password=<脱敏处理> ssl.client.auth=required # 其他配置 security.inter.broker.protocol=SASL_PLAINTEXT listeners=SASL_PLAINTEXT://broker1.uat.tel.be:9092,SSL://broker1.uat.tel.be:9093 advertised.listeners=SASL_PLAINTEXT://broker1.uat.tel.be:9092,SSL://broker1.uat.tel.be:9093
异常现象
- 每10秒重复出现SSL握手失败日志,失败请求来源为集群内其他Broker节点IP
openssl s_client -connect broker1.uat.tel.be:9093验证SSL监听器证书链正常,返回码为0- 所有业务客户端连接SSL监听器生产消费完全正常
- 开启SSL debug日志后核心报错为:
Empty server certificate chain、Received fatal alert: bad_certificate
根因分析
报错由CP内置的Confluent Metrics Reporter组件触发:
- CP 5.2+版本后,Metrics Reporter默认每10秒上报一次集群指标,未单独配置通信协议时会尝试访问SSL监听器
- 集群SSL监听器配置了
ssl.client.auth=required,要求客户端必须携带合法证书,而未配置参数的Metrics Reporter请求SSL端口时未携带客户端证书,触发校验失败 - Broker间通信默认走SASL_PLAINTEXT监听器,不影响集群正常运行,业务客户端配置了合法证书所以访问正常
额外注意:检查你实际配置文件中
ssl.truststore.password、ssl.keystore.password、ssl.key.password三个参数是否存在多余的等于号,正常配置应为单等于号,若为实际配置错误需先修正。
解决方案
可任选以下一种方案配置后滚动重启Broker即可解决:
方案1:Metrics Reporter走SASL_PLAINTEXT监听器(推荐,和Broker间通信协议保持一致)
补充如下配置:
confluent.metrics.reporter.security.protocol=SASL_PLAINTEXT confluent.metrics.reporter.sasl.mechanism=GSSAPI confluent.metrics.reporter.sasl.kerberos.service.name=kafka confluent.metrics.reporter.bootstrap.servers=SASL_PLAINTEXT://broker1.uat.tel.be:9092, SASL_PLAINTEXT://broker2.uat.tel.be:9092 # 补充集群所有节点的SASL_PLAINTEXT地址
方案2:Metrics Reporter走SSL监听器
补充SSL客户端证书相关配置:
confluent.metrics.reporter.security.protocol=SSL confluent.metrics.reporter.ssl.truststore.location=/app/certs/kafka.truststore.jks confluent.metrics.reporter.ssl.truststore.password=<你的truststore密码> confluent.metrics.reporter.ssl.keystore.location=/app/certs/broker11.jks confluent.metrics.reporter.ssl.keystore.password=<你的keystore密码> confluent.metrics.reporter.ssl.key.password=<你的证书私钥密码>
验证
配置生效后观察10分钟,确认SSL握手失败日志不再产生,同时业务读写、集群指标采集均正常即可。
内容的提问来源于stack exchange,提问作者iMajna
相关产品推荐
相关产品推荐

