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

Bitnami Helm部署Kubernetes上KRaft模式Kafka集群遇监听协议错误

解决KRaft模式Kafka集群部署的“No security protocol defined for listener”错误

问题根源

Bitnami Kafka Helm Chart在KRaft模式下,必须为每个定义的listener明确绑定安全协议,否则Kafka启动时无法匹配listener与对应协议,导致Pod进入CrashLoopBackOff状态。

修正后的values.yaml核心配置

以下是适配KRaft模式、仅使用PLAINTEXT协议且支持集群内外访问的关键配置片段:

# 禁用ZooKeeper,启用KRaft模式
zookeeper:
  enabled: false

kafka:
  enabled: true
  kraft:
    enabled: true
    # 3节点集群需配置对应副本数
    controller:
      replicaCount: 3
    broker:
      replicaCount: 3

# 配置Listener及对应安全协议
listeners:
  # 集群内部通信Listener
  internal:
    enabled: true
    containerPort: 9092
    securityProtocol: PLAINTEXT
  # 外部访问Listener(适配minikube的NodePort模式)
  external:
    enabled: true
    type: NodePort
    containerPort: 9094
    securityProtocol: PLAINTEXT
    advertisedHost: "{{ .Values.external.ip }}"
    advertisedPort: "{{ .Values.external.nodePort }}"

# 绑定Listener与安全协议,键名需与上方listener名称一致(大写)
listenerSecurityProtocolMap:
  INTERNAL: PLAINTEXT
  EXTERNAL: PLAINTEXT

# minikube外部访问配置:部署前先执行`minikube ip`获取IP,nodePort可指定范围或自动分配
external:
  ip: "$(minikube ip)"
  nodePort: 30094

重新部署步骤

  1. 卸载现有失败的Release:
helm uninstall cluster-kafka
  1. 应用修正后的配置重新部署:
helm install cluster-kafka bitnami/kafka -f values.yaml

部署验证

  1. 检查Pod状态,等待所有controller和broker Pod进入Running状态:
kubectl get pods -l app.kubernetes.io/name=kafka
  1. 集群内部访问测试(创建临时客户端Pod):
kubectl run kafka-client --restart='Never' --image docker.io/bitnami/kafka:2.8.1-debian-10-r0 --command -- sleep infinity
kubectl exec -it kafka-client -- /opt/bitnami/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server cluster-kafka-controller-0.cluster-kafka-controller-headless.default.svc.cluster.local:9092 --partitions 3 --replication-factor 3
  1. minikube外部访问测试:
# 获取外部访问地址
MINIKUBE_IP=$(minikube ip)
EXTERNAL_PORT=$(kubectl get svc cluster-kafka-external -o jsonpath='{.spec.ports[0].nodePort}')
# 用容器客户端测试发送消息
docker run --rm docker.io/bitnami/kafka:2.8.1-debian-10-r0 /opt/bitnami/kafka/bin/kafka-console-producer.sh --broker-list $MINIKUBE_IP:$EXTERNAL_PORT --topic test-topic

关键注意点

  • listenerSecurityProtocolMap中的键名必须与listeners配置的名称完全匹配(需大写)
  • 3节点KRaft集群必须同时设置controller和broker的replicaCount为3,保证集群高可用
  • 若未指定固定nodePort,部署后需通过kubectl get svc cluster-kafka-external获取自动分配的端口

内容的提问来源于stack exchange,提问作者Fernando Tuquina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:23:12