首页 > 解决方案 > 为什么 VirtualBox 在仅主机适配器上创建 2 个接口?

问题描述

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

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

为什么 VirtualBox 会创建 2 个接口,即eth0eth1

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

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

标签: kubernetesvirtualboxminikube

解决方案


| eth0 (10.0.2.15) | <--- 为什么要创建这个?

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

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

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


推荐阅读