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

发表于: 2022-10-25   最后更新时间: 2022-10-27 10:49:13   566 游览

容器化部署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[]

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

发表于 2022-10-25
添加评论

已解决

半兽人 -> 1年前

分享一下...

-> 半兽人 1年前

有的pod服务内部,虽然访问通过svc 6667 无需认证的端口访问,按理说不应该报错。

后续排查发现有些producer客户端,即使不配置sasl.enabled.mechanisms参数,默认竟然走了认证PLAIN机制,很奇怪,百思不得奇解,默认的按理说应该是无认证的机制参数。

将相关客户端sasl.enabled.mechanisms设置为PLAINTEXT就好了,见了鬼了

你的答案

查看kafka相关的其他问题或提一个您自己的问题