返回到文章

采纳

编辑于 2年前

Kubernetes容器化部署kafka同时支持 nodeport svc sasl认证和 clusterip svc非sasl认证报错

kafka

容器化部署kafka,想让k8s内部网络pod服务访问 broker pod 及 broker pod 间不需要sasl认证就能访问,而通过nodeport宿主机ip和nodeport访问的需要sasl认证才能访问。

broker配置如下:

listeners=NODEPORT://0.0.0.0:6668,INTERNAL://0.0.0.0:6667
listener.security.protocol.map=NODEPORT:SASL_PLAINTEXT,INTERNAL:PLAINTEXT
advertised.listeners=NODEPORT://<各节点IP>:9092,INTERNAL://<headless_svc>:6667
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
inter.broker.listener.name=INTERNAL

上述为broker的相关配置,kafka使用StatefultSet部署,同时每个broker headless_svc为pod_name.headless.namespace。

broker jaas server配置文件为(通过启动参数加载):

nodeport.KafkaServer {
 org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin"
  user_admin="admin";
}

1、现在外部通过宿主机+9092端口访问kafka确实必须使用sasl认证才可以,通过nodeport svc可自动映射到broker pod 6668端口。

2、使用单独定义的svc:6667,这个svc自动选择所有broker pod根据标签,同时映射到pod 6667端口,使用这种方式的pod 客户端服务总是报错:unexpected handshake request with client mechanism plain, enabled mechanisms are[]

目前不清楚哪里配置有错误,暂时未找到正确的方法。