Почему VirtualBox создает 2 интерфейса на адаптере только для хоста? - PullRequest
0 голосов
/ 03 июня 2019

Я настраиваю миникуб, используя VirtualBox в качестве драйвера виртуальной машины, используя адаптер NAT и адаптер только для хоста . После создания виртуальной машины я запускаю несколько модулей, одним из которых является 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) |

В качестве дополнительного примечания, Кафка использует PLAINTEXT://:9092 в настройках слушателей, что заставляет его запускать сервер, используя eth0 и в результате 10.0.2.15. Этот IP позже объявляется любому потребителю, подключенному к нему. Этот IP, кажется, доступен только внутри виртуальной машины, что делает невозможным соединение извне, например, гостья. Если быть точным, потребитель подключается к Kafka, затем Kafka отправляет объявленных слушателей, то есть 10.0.2.15, и затем не может отправлять сообщения, потому что пытается подключиться к 10.0.2.15.

Ответы [ 2 ]

3 голосов
/ 04 июня 2019

| eth0 (10.0.2.15) | <--- почему это создано? </p>

В принципе, VirtualBox требуется 2 интерфейса, поскольку он использует интерфейс vboxnet0 eth0 для связи с внешним миром с помощью NAT, а другой интерфейс eth1 в сети 192.168.99.x, чтобы ваша машина могла общаться с виртуальной машиной. 192.168.99.100 используется minikube ssh. Вы можете попробовать это непосредственно, запустив ssh -i private_key docker@192.168.99.100 и получив закрытый ключ от запуска minikube ssh-key

HyperKit не требует двух интерфейсов, потому что, как вы заметили, у него есть 192.168.99.100, который также используется в мини-кубе для подключения через ssh. Виртуальные машины HyperKit не обязательно должны иметь интерфейс для подключения к внешним устройствам. Для этого обычно используется другой механизм, основанный на VPNKit .

Я предлагаю использовать опцию advertised.host.name в ваших конфигах Kafka. Другой альтернативой является добавление опции в minikube , которая позволяет изменять порядок интерфейсов Ethernet в VirtualBox, но это потребует больше усилий.

0 голосов
/ 11 июня 2019

Я использовал конфигурацию по умолчанию, поэтому вместо запуска я переопределил следующие свойства при запуске Kafka.Это работало просто отлично.

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