Kubernetes 卡夫卡代理中的SSL握手失败
我用Strimzi在Kubernetes创建了一个卡夫卡集群Kubernetes 卡夫卡代理中的SSL握手失败,kubernetes,apache-kafka,strimzi,Kubernetes,Apache Kafka,Strimzi,我用Strimzi在Kubernetes创建了一个卡夫卡集群 apiVersion: kafka.strimzi.io/v1beta1 kind: Kafka metadata: name: {{ .Values.cluster.kafka.name }} spec: kafka: version: 2.7.0 replicas: 3 storage: deleteClaim: true size: {{ .Values.cluster.k
apiVersion: kafka.strimzi.io/v1beta1
kind: Kafka
metadata:
name: {{ .Values.cluster.kafka.name }}
spec:
kafka:
version: 2.7.0
replicas: 3
storage:
deleteClaim: true
size: {{ .Values.cluster.kafka.storagesize }}
type: persistent-claim
rack:
topologyKey: failure-domain.beta.kubernetes.io/zone
template:
pod:
metadata:
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9404'
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
authentication:
type: tls
- name: external
port: 9094
type: loadbalancer
tls: true
authentication:
type: tls
configuration:
bootstrap:
loadBalancerIP: {{ .Values.cluster.kafka.bootstrapipaddress }}
brokers:
{{- range $key, $value := (split "," .Values.cluster.kafka.brokersipaddress) }}
- broker: {{ (split "=" .)._0 }}
loadBalancerIP: {{ (split "=" .)._1 | quote }}
{{- end }}
authorization:
type: simple
集群创建完毕后,我可以创建主题,并生成/消费主题。
问题是,如果我执行卡夫卡经纪人的某个播客,我会看到断断续续的错误
INFO [SocketServer brokerId=0] Failed authentication with /10.240.0.35 (SSL handshake failed) (org.apache.kafka.common.network.Selector) [data-plane-kafka-network-thread-0-ListenerName(EXTERNAL-9094)-SSL-9]
INFO [SocketServer brokerId=0] Failed authentication with /10.240.0.159 (SSL handshake failed) (org.apache.kafka.common.network.Selector) [data-plane-kafka-network-thread-0-ListenerName(EXTERNAL-9094)-SSL-11]
INFO [SocketServer brokerId=0] Failed authentication with /10.240.0.4 (SSL handshake failed) (org.apache.kafka.common.network.Selector) [data-plane-kafka-network-thread-0-ListenerName(EXTERNAL-9094)-SSL-10]
INFO [SocketServer brokerId=0] Failed authentication with /10.240.0.128 (SSL handshake failed) (org.apache.kafka.common.network.Selector) [data-plane-kafka-network-thread-0-ListenerName(EXTERNAL-9094)-SSL-1]
在检查这些IP[10.240.0.35、10.240.0.159、10.240.0.4、10.240.0.128]之后,我发现它们都与kube系统名称空间中的POD相关,这些POD是作为Kafka集群部署的一部分隐式创建的
知道什么是错的吗?我不认为这一定是错的。您似乎有一些应用程序试图在没有正确配置TLS的情况下连接到代理。但是当连接被转发时,IP可能会被屏蔽——因此它不再是真正的外部IP。从配置错误的客户端到一些试图打开TCP连接的健康检查(例如,根据您的环境,负载平衡器可以做到这一点),这些都是可能的
不幸的是,要找出它们的真正来源有点困难。您可以尝试通过拥有它的IP地址的人的日志来跟踪它,因为该IP地址是从其他人转发来的。您还可以尝试使用Java系统属性
javax.net.debug=ssl
在Kafka中启用TLS调试。但这可能只在某些情况下对配置错误的客户端有所帮助,而对某些TPC探测器则没有帮助,而且这也会使您很难在日志中找到正确的位置,因为它还会转储使用TLS的复制流量等。感谢Jakub的回复。为了隔离问题,我确保没有任何应用程序正在运行并尝试连接到Kafka群集。连接到Kafka时出现SSL问题的IP来自kube系统命名空间吊舱(用于实现集群功能的内部吊舱)。因此,即使没有外部应用程序试图连接到卡夫卡,我仍然会在卡夫卡代理吊舱中观察到这些错误。IP地址指向的确切吊舱是什么?到kube代理
pods?还是别的什么?kube系统
中的一些吊舱负责路由到卡夫卡吊舱的连接。还有,就像我说的。。。请记住,这不一定是卡夫卡应用程序本身。它可能是来自负载平衡器或其他组件的一些健康检查探针。它可能是一些监控工具等。基本上,任何试图连接到Kafka SSL侦听器而不进行TLS握手的操作都会产生类似这样的错误。是的,它主要是代理吊舱。这些吊舱是内部的,不应该使用外部端口,对吗?如果是这样,为什么错误中会显示“data-plane-kafka-network-thread-0-ListenerName(EXTERNAL-9094)-SSL-1”,我不确定外部侦听器使用什么。但我的理解是,至少在某些情况下,与节点端口或loadbalancer的连接到达一个工作节点,并从那里通过kube代理
传递到代理吊舱。这在某种程度上可以由外部流量策略()控制。但一般认为,