
В настоящее время я устанавливаю сервер, состоящий из хоста виртуализации (kvm на ubuntu) и 7 виртуальных машин, некоторые из которых работают с MySQL и LDAP, другие — с различными веб-серверами и веб-приложениями. Виртуальные машины, на которых работают базы данных, будут запрашиваться только другими виртуальными машинами на том же физическом сервере. Виртуальные машины веб-сервера будут запускать около 10-20 веб-сайтов и веб-приложений. Сервер будет размещен в центре обработки данных, напрямую подключенном к Интернету.
Моя идея состояла в том, чтобы использовать сетевое взаимодействие NAT между хостом и виртуальными машинами (с образованием внутренней локальной сети) и назначить HostOS публичный IP-адрес. HostOS будет запускать брандмауэр (с iptables) и распределять сетевой трафик по виртуальным машинам. Изначально виртуальные машины будут полностью изолированы от внешнего мира, поэтому в этой схеме не будет необходимости иметь полнофункциональный брандмауэр на любой из виртуальных машин. Кроме того, мне понадобится только 1 публичный IP-адрес. Мне придется доплачивать за дополнительные IP-адреса, и я не могу иметь больше 5.
Я решил, что могу использовать обратный прокси-сервер на HostOS для распределения трафика между виртуальными машинами на основе запрошенных имен хостов.
У меня два вопроса:
- Является ли это надежным способом настройки hostOS и виртуальных машин? Или обратный прокси слишком сильно замедлит работу сервера? Стоит ли мне вместо этого просто использовать мостовую сеть (рекомендуется большинством источников), принять тот факт, что все мои виртуальные машины напрямую открыты для внешнего мира, и принять соответствующие меры?
- Какой обратный прокси-сервер будет хорошим для работы на hostOS? Я слышал хорошие истории о HAproxy. Я уже настраивал mod_proxy (правда, в совершенно другом сценарии), но я слышал, что большинство людей предпочитают HAproxy. Или мне нужен какой-то сверхлегкий обратный прокси-сервер, который занимает меньше всего места, чтобы не слишком замедлять hostOS?
решение1
Я использую именно такую архитектуру с Proxmox. Сетевой мост не подходит, так как у меня недостаточно публичных IP для виртуальных машин. Я использую nginx в качестве прокси-виртуальных машин, вы можете настроить его прямо на хосте, но использование виртуальной машины тоже неплохая идея (постарайтесь максимально упростить конфигурацию хоста).
решение2
Единственный способ использовать мостовую сеть — иметь IP для каждой виртуальной машины, которая должна быть подключена к Интернету. Поскольку это означает, что вам придется защищать каждую виртуальную машину по отдельности, может быть проще использовать только один брандмауэр на вашей хост-системе. Для этого также есть хорошие руководства, если вы используете libvirt (https://jamielinux.com/docs/libvirt-networking-handbook/nat-based-network.html). По моему опыту (с nginx) не было заметного замедления при таком решении. Я предполагаю, что HAproxy мог бы быть еще быстрее.