Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 卡夫卡代理中的SSL握手失败_Kubernetes_Apache Kafka_Strimzi - Fatal编程技术网

Kubernetes 卡夫卡代理中的SSL握手失败

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

我用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.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代理
传递到代理吊舱。这在某种程度上可以由外部流量策略()控制。但一般认为, Kube代理< /C> >将处于中间。这可以屏蔽原始IP地址。至少这是我的理解。谢谢你的意见,我们将进一步调查。