我正在使用 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个接口,即eth0
和eth1
?
| 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
,因此它无法发送任何消息。
答案 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