Kafka在库伯尼特斯星团与伊斯蒂奥

wixjitnu  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(413)

我有k8s集群与istio v1.6.4。默认情况下禁用侧车注入。我有Kafka集群运行在这个k8s安装斯特里姆齐Kafka运营商。当kafka和客户机pods没有注入istio代理时,kafka集群可以正常工作。我的问题是:当我创建一个带有kafka客户端和istio代理的pod时,我无法连接到kafka集群。客户端日志:

java.io.IOException: Connection reset by peer

在服务器端: org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 369295616 larger than 104857600) 在google和检查istio代理日志之后,发现问题是istio代理使用tls连接到kafka纯文本端点。我可以通过设置默认的peerauthentication来解决这个问题 mtls.mode: DISABLED 但我不想为它设置全局设置。
奇怪的是,如果我创建一个简单的k8s服务,在运行kafka服务器的pod上运行netcat“server”,在运行kafka客户端的pod上运行netcat“client”,一切都正常。
我有两个问题:
为什么kafka istio代理在连接到kafka集群时的行为不同于其他tcp连接(比如使用nc)?
如何仅为一台主机禁用MTL?我在玩偷窥,但运气不好。。。

qfe3c7zg

qfe3c7zg1#

在jt97的帮助下,我解决了这个问题。
正如我写的,我正在使用strimzi操作符在k8s上安装kafka集群。它创建了两个服务:
kafka引导-这是clusterip的常规服务
Kafka经纪人-无头服务。
就我而言,这些服务的全称是 kafka-kafka-operated-kafka-bootstrap 以及 kafka-kafka-operated-kafka-brokers 分别是。
我创建了一个destinationrule:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: kafka-no-tls
spec:
  host: "kafka-kafka-operated-kafka-brokers"
  trafficPolicy:
    tls:
      mode: DISABLE

连接Kafka时使用了无头服务:

kafka-topics --bootstrap-server kafka-kafka-operated-kafka-brokers:9092 --list
__consumer_offsets
_schemas

一切如期而至。
顺便说一句,设置 tls.modeSIMPLE 没用。
老实说,我仍然不明白为什么在这种特殊情况下,istio proxy默认(没有destinationrule)尝试与tls连接-根据文档:
默认情况下,istio跟踪迁移到istio代理的服务器工作负载,并将客户端代理配置为自动向这些工作负载发送相互tls流量,并向没有侧车的工作负载发送纯文本流量。

相关问题