我有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?我在玩偷窥,但运气不好。。。
1条答案
按热度按时间qfe3c7zg1#
在jt97的帮助下,我解决了这个问题。
正如我写的,我正在使用strimzi操作符在k8s上安装kafka集群。它创建了两个服务:
kafka引导-这是clusterip的常规服务
Kafka经纪人-无头服务。
就我而言,这些服务的全称是
kafka-kafka-operated-kafka-bootstrap
以及kafka-kafka-operated-kafka-brokers
分别是。我创建了一个destinationrule:
连接Kafka时使用了无头服务:
一切如期而至。
顺便说一句,设置
tls.mode
至SIMPLE
没用。老实说,我仍然不明白为什么在这种特殊情况下,istio proxy默认(没有destinationrule)尝试与tls连接-根据文档:
默认情况下,istio跟踪迁移到istio代理的服务器工作负载,并将客户端代理配置为自动向这些工作负载发送相互tls流量,并向没有侧车的工作负载发送纯文本流量。