kubernetes - 为什么 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 个接口,即eth0
和eth1
?
| Host | | VM |
|--------------------------| |-----------------------|
| vboxnet0 (192.168.99.100)| | eth0 (10.0.2.15) | <--- why is this created?
| ... | | eth1 (192.168.99.100) |
附带说明一下,KafkaPLAINTEXT://:9092
在 listeners 设置中使用,这使得它使用eth0
and 作为结果来启动服务器10.0.2.15
。这个 IP 稍后会被通告给任何连接到它的消费者。此 IP 似乎只能在 VM 内访问,这使得无法从外部(例如主机)连接。准确地说,消费者连接到 Kafka,然后 Kafka 发送广告的侦听器,即10.0.2.15
它不能发送任何消息,因为它试图连接到10.0.2.15
.
解决方案
| eth0 (10.0.2.15) | <--- 为什么要创建这个?
基本上,VirtualBox 需要 2 个接口,因为它使用该vboxnet0 eth0
接口通过 NAT 与外部世界通信,另一个接口eth1
在192.168.99.x
网络上,以便您的机器可以与 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的不同机制。
advertised.host.name
我的建议是在您的 Kafka 配置中使用该选项。另一种选择是上游minikube中的一个选项,该选项允许您更改 VirtualBox 上以太网接口的顺序,但这会更有效。
推荐阅读
- javascript - npm run dev 在 DigitalOcean 应用程序上返回“失败:EOF”错误
- flutter - 如何在颤动中覆盖 MaterialApp 的主题
- ios - 单击按钮时(不在模拟器中),如何在 XCode 12.3“预览”中的 SwiftUI 中打印某些内容?
- javascript - 如何使用 firebase 函数从 firestore 检索文档并从另一个 firestore 文档添加新数据?
- python - 如何在 Python 中更改浮点精度?
- javascript - 运行多个实例的网站干扰 (JavaScript)
- python - HTML单选按钮在分配值时截断空格后的所有字母
- c - xcb_poll_for_event,这个函数如何返回错误?
- excel - 如何在excel中使用office js查找和访问匹配的单元格/范围
- excel - 如何为 Excel 电子表格中的缺失行插入空白条目(与参考表相比)?