【问题标题】:Why does VirtualBox create 2 interfaces on host-only adapter?为什么 VirtualBox 在仅主机适配器上创建 2 个接口?
【发布时间】:2019-10-19 08:36:22
【问题描述】:

我正在使用NAT 适配器仅主机适配器 使用VirtualBox 作为VM 驱动程序来设置minikube。创建 VM 后,我运行了几个 pod,其中之一是 Kafka(消息队列)。我在正确使用 Kafka 时遇到问题,因为 VM 创建了 2 个网络接口 eth0,它们指向 10.0.2.15eth1,它们指向 192.168.99.100,这是设置仅主机适配器的 IP。

我在 Mac 上运行它,所以我尝试改用 HyperKit,它的工作方式似乎有所不同。因此,当使用 HyperKit 时,我得到一个接口 eth0,它指向 192.168.99.100,一切正常。

VirtualBox为什么要创建两个接口,即eth0eth1

|           Host           |   |          VM           |
|--------------------------|   |-----------------------|
| vboxnet0 (192.168.99.100)|   | eth0 (10.0.2.15)      | <--- why is this created?
|           ...            |   | eth1 (192.168.99.100) |

附带说明,Kafka 在侦听器设置中使用PLAINTEXT://:9092,这使得它使用eth0 启动服务器,结果是10.0.2.15。这个 IP 稍后会被通告给任何连接到它的消费者。此 IP 似乎只能在 VM 内访问,这使得无法从外部连接,例如主人。准确地说,消费者连接到 Kafka,然后 Kafka 发送通告的侦听器,即 10.0.2.15,然后它无法发送任何消息,因为它试图连接到 10.0.2.15

【问题讨论】:

    标签: kubernetes virtualbox minikube


    【解决方案1】:

    | eth0 (10.0.2.15) |

    基本上,VirtualBox 需要 2 个接口,因为它使用 vboxnet0 eth0 接口通过 NAT 与外部世界通信,另一个接口 eth1192.168.99.x 网络上,以便您的机器可以与 VM 通信。 192.168.99.100minikube ssh 使用。可以直接运行ssh -i private_key docker@192.168.99.100试试,运行minikube ssh-key获取私钥

    HyperKit 不需要两个接口,因为您注意到它有192.168.99.100,minikube 也使用它通过 ssh 进行连接。 HyperKit VM 不一定需要一个接口来连接到外部。为此,它通常使用基于VPNKit 的不同机制。

    我的建议是在您的 Kafka 配置中使用 advertised.host.name 选项。另一种选择是在minikube 中添加一个选项,该选项允许您更改 VirtualBox 上以太网接口的顺序,但这会更有效。

    【讨论】:

    • 感谢您的回答。我知道广告主机名,但我正在寻找更简单的东西,因为我一直在使用一些默认配置。
    【解决方案2】:

    我一直在使用默认配置,因此在启动 Kafka 时我覆盖了以下属性。这工作得很好。

    bin/kafka-server-start.sh config/server.properties \
         --override zookeeper.connect=zookeeper:2181 \
         --override advertised.listeners=PLAINTEXT://192.168.99.100:9092
    

    【讨论】:

      猜你喜欢
      • 2017-09-20
      • 2018-10-05
      • 1970-01-01
      • 2014-08-03
      • 2019-06-16
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      相关资源
      最近更新 更多