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

Strimzi部署Kafka时ZooKeeper启动失败:SSL主机名验证异常

解决Strimzi部署Kafka时ZooKeeper的SSLPeerUnverifiedException问题

问题根源

你遇到的SSLPeerUnverifiedException错误,核心原因是:Strimzi默认会为ZooKeeper节点间的通信启用TLS加密,自动生成的证书里只包含了ZooKeeper节点的域名(比如*.my-cluster-zookeeper-nodes.kafka.svc这类),但ZooKeeper节点之间实际用Pod IP(比如日志里的10.244.0.14)通信时,这个IP不在证书的Subject Alternative Names(SANs)列表里,导致hostname校验失败。

解决方案

这里提供两种方案,推荐用第一种(生产环境友好),第二种仅适用于测试场景:

方案1:让ZooKeeper内部证书包含Pod IP(推荐)

修改你的Kafka CR配置,在ZooKeeper的TLS设置里开启ipSans选项,让Strimzi生成证书时自动把每个节点的Pod IP加入SAN:

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    version: 3.1.0
    replicas: 2
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: external
        port: 9094
        type: loadbalancer
        tls: false
    config:
      offsets.topic.replication.factor: 2
      transaction.state.log.replication.factor: 2
      transaction.state.log.min.isr: 2
      default.replication.factor: 2
      min.insync.replicas: 2
      inter.broker.protocol.version: "3.1"
    storage:
      type: ephemeral
  zookeeper:
    replicas: 2
    storage:
      type: ephemeral
    tls:
      internal:
        certificates:
          - secretName: zookeeper-internal-cert
            ipSans: true  # 启用该选项,让证书包含Pod IP作为SAN

修改完成后,重新应用配置:

kubectl apply -f your-kafka-cr-file.yaml -n kafka

Strimzi Operator会自动重新生成包含Pod IP的证书,ZooKeeper节点间的TLS通信就能通过hostname校验了。

方案2:关闭ZooKeeper节点间的TLS(仅测试环境用)

如果是测试环境,想快速绕过这个问题,可以直接关闭ZooKeeper节点间的TLS加密:

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # 保持原有kafka配置不变
    version: 3.1.0
    replicas: 2
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: external
        port: 9094
        type: loadbalancer
        tls: false
    config:
      offsets.topic.replication.factor: 2
      transaction.state.log.replication.factor: 2
      transaction.state.log.min.isr: 2
      default.replication.factor: 2
      min.insync.replicas: 2
      inter.broker.protocol.version: "3.1"
    storage:
      type: ephemeral
  zookeeper:
    replicas: 2
    storage:
      type: ephemeral
    tls:
      internal: false  # 关闭节点间TLS加密

重新应用配置后,ZooKeeper节点间用明文通信,就不会有证书校验的问题了。但生产环境绝对不建议这么做,会失去节点间通信的加密保护。

额外建议

ZooKeeper集群通常推荐使用奇数个副本(3、5个),这样能避免脑裂问题,提升故障场景下的可用性。虽然2个副本也能运行,但生产环境最好调整为3个副本。

内容的提问来源于stack exchange,提问作者Faheem Sultan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:52:38