为什么VirtualBox在仅主机适配器上创建2个接口?

时间:2019-06-03 19:13:33

标签: kubernetes virtualbox minikube

我正在使用 NAT适配器仅主机适配器,使用VirtualBox作为VM驱动程序来设置minikube。创建VM之后,我运行了几个Pod,其中一个是Kafka(消息队列)。我在正确使用Kafka时遇到了问题,因为VM创建了两个网络接口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) |

作为旁注,Kafka在侦听器设置中使用了PLAINTEXT://:9092,这使得它使用eth0并因此10.0.2.15来启动服务器。该IP稍后会被通告给与其连接的所有使用者。该IP似乎只能在VM内部访问,这使得无法从外部进行连接,例如主人。确切地说,消费者连接到Kafka,然后Kafka发送广告的监听器,即10.0.2.15,然后由于它尝试连接到10.0.2.15,因此它无法发送任何消息。

2 个答案:

答案 0 :(得分:3)

  

| eth0(10.0.2.15)| <---为什么创建它?

基本上,VirtualBox需要2个接口,因为它使用vboxnet0 eth0接口通过NAT与eth1网络上的另一个接口192.168.99.x与NAT进行外部通讯,以便您的计算机可以通话到VM。 192.168.99.100使用minikube 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上以太网接口的顺序,但这会做更多的工作。

答案 1 :(得分:0)

我一直在使用默认配置,因此在启动Kafka时,我改写了以下属性。效果很好。

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