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
Apache kafka Kubernetes-Can';t从服务连接到服务IP';s吊舱_Apache Kafka_Kubernetes - Fatal编程技术网

Apache kafka Kubernetes-Can';t从服务连接到服务IP';s吊舱

Apache kafka Kubernetes-Can';t从服务连接到服务IP';s吊舱,apache-kafka,kubernetes,Apache Kafka,Kubernetes,我正在尝试创建3个Kafka实例,并将其部署到本地Kubernetes设置中。因为每个实例都需要一些特定的配置,所以我将为每个实例创建一个RC和一个服务—急切地等待;) 但是,我遇到了问题,因为Kafka在使用服务IP时无法建立与自身的网络连接(Kafka代理在与其他代理交换复制消息时会尝试这样做)。例如,假设我有两台工作主机(172.17.8.201和172.17.8.202),我的POD的计划如下: 主机1(172.17.8.201) kafka1pod(10.2.16.1) 主机2(

我正在尝试创建3个Kafka实例,并将其部署到本地Kubernetes设置中。因为每个实例都需要一些特定的配置,所以我将为每个实例创建一个RC和一个服务—急切地等待;)

但是,我遇到了问题,因为Kafka在使用服务IP时无法建立与自身的网络连接(Kafka代理在与其他代理交换复制消息时会尝试这样做)。例如,假设我有两台工作主机(172.17.8.201和172.17.8.202),我的POD的计划如下:

  • 主机1(172.17.8.201)

    • kafka1
      pod(10.2.16.1)
  • 主机2(172.17.8.202)

    • kafka2
      pod(10.2.68.1)
    • kafka3
      pod(10.2.68.2)
此外,假设我有以下服务IP:

  • kafka1
    集群IP:11.1.2.96
  • kafka2
    集群IP:11.1.2.120
  • kafka3
    集群IP:11.1.2.123
kafka1
pod(容器)试图使用
kafka1
集群IP(11.1.2.96)发送消息(到自身)时,就会出现问题。由于某些原因,无法建立连接,并且消息未发送

更多信息:如果我手动连接到
kafka1
pod,我可以使用各自的集群IP(11.1.2.120/11.1.2.123)正确地远程登录到
kafka2
kafka3
pod。另外,如果我在
kafka2
pod中,我将使用11.1.2.96和11.1.2.123连接到
kafka1
kafka3
pod。最后,如果我使用pod IP,我可以连接到所有pod(来自所有pod)

需要强调的是,我不应该告诉kafka代理使用pod IP而不是集群IP进行复制。现在,Kafka使用您配置为“公布”的任何IP进行复制,即您的客户端用于连接到代理的IP。即使我可以,我相信这个问题也可能出现在其他软件上

这个问题似乎只发生在我使用的组合中,因为完全相同的文件在GCE中正常工作。现在,我正在跑步:

  • 库伯内特斯1.1.2
  • coreos 928.0.0
  • 网络设置与法兰绒
  • vagrant+VirtualPX上的所有内容
经过一些调试后,我不确定问题是在workers iptables规则、kube代理还是在flannel中

PS:我最初在他们的github上发布了这个问题,但Kubernetes团队已经将我重定向到这里。我重写了一点文本,因为它听起来像是一个“支持请求”,但实际上我相信它是某种错误。不管怎么说,库伯尼特斯队的事很抱歉



编辑:此问题已被确认为一个错误

对于要执行的操作,您应该使用无头服务

这意味着设置

clusterIP:None

在您的服务中

这意味着不会有与服务相关联的IP,但它将返回由
选择器选择的POD的所有IP

更新:该错误在v1.2.4中已修复 你可以试试

我在将3个mongodb pod作为集群运行时遇到了类似的问题,但这些pod无法通过其服务的IP访问自己


此外,该错误是否已修复?

我看到许多关于pod无法通过服务连接到自身的问题。我不知道为什么,但一定有技术上的原因。服务意味着对pod的负载平衡请求,所以我觉得pod不应该与它们自己所服务的端口通信是有道理的。但是,对于您正在做的事情,您想要的是使用无头服务,它可以在集群内进行访问,但我也希望kafka集群可以从Internet访问。当我在GCE中时,我正在使用类型为“LoadBalancer”的服务,并将保留IP用作负载均衡器IP和播发IP。它很好用。尽管如此,我问题的重点是,我无法使用服务IP访问Pod-GCE和我的本地设置中的行为目前不一致,这显然看起来很奇怪。你可以同时拥有:我一直都在使用:你可以拥有一个负载平衡的设备和一个针对相同Pod的无头服务。很高兴知道,谢谢但是我仍然在寻找连接问题的答案——正如我在问题中提到的,其他用例可能会发现同样的问题。我在stackoverflow这里挖掘了一点,这个问题似乎是同样的问题。是的,因为你不能通过常规服务连接到self:使用无头服务。
containers:
  - name: kafka
    image: Kafka
    lifecycle:
      postStart:
        exec:
          command:
            - "some.sh" #some shell scripts to get this pod's IP and notify the other Kafka members that "add me into your cluster"
      preStop:
        exec:
          command:
            - "some.sh" #some shell scripts to get other Kafka pods' IP and notify the other Kafka members that "delete me from your cluster"