У меня есть группа серверов CentOS 7.2, работающих как виртуальные машины под ESXi 6.0 VMware. Все они находятся в одной подсети, и у нас нет проблем с обменом данными между различными серверами. Кроме того, на каждом из этих серверов работает несколько контейнеров LXC на основе libvirt, также основанных на CentOS 7.2. Хосты могут связываться со своими контейнерами без проблем, и контейнеры на данном сервере могут связываться друг с другом. Однако контейнеры, размещенные на двух разных серверах, не могут взаимодействовать друг с другом или с другими серверами.
Когда мы дублируем эту настройку на реальном оборудовании, у нас не возникает проблем со связью между контейнерами. Аналогично, если мы дублируем настройку, используя виртуальные машины на основе KVM вместо виртуальных машин ESXi, все работает нормально - не возникает проблем при обмене данными между контейнерами, независимо от того, какая виртуальная машина их размещает.
В другом тесте мы настроили установку на основе AWS с нашими контейнерами, работающими под экземплярами AWS. В этом случае мы столкнулись с той же проблемой, что и в случае с ESXi, когда контейнеры, работающие на разных хостах (экземпляры AWS), не могли взаимодействовать друг с другом. Мы решили проблему в AWS, используя proxy arp. В частности, мы установили следующие параметры CentOS на каждом из наших серверов:
echo 1 > /proc/sys/net/ipv4/conf/br0/forwarding
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp_pvlan
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/br0/send_redirects
С их настройкой контейнеры, работающие под различными экземплярами AWS, могут без проблем взаимодействовать друг с другом независимо от того, кто их размещает. К сожалению, мы попробовали тот же набор параметров на нашей установке на базе ESXi, но безуспешно. Единственное решение, которое мы нашли, - включить беспорядочный режим на vSwitch, который мы определили в нашей среде vSphere. Однако это не идеальное решение, поскольку это означает, что весь трафик, независимо от того, откуда он отправляется, пропускается через хосты и контейнеры. Это не идеально с точки зрения безопасности.
Таким образом, вопрос в том, может ли эта проблема быть решена с помощью proxy arp, как мы использовали в AWS, или же существует совершенно другой подход? Как я уже упоминал, наш кластер на основе KVM работает без использования proxy arp или случайного режима, поэтому, возможно, в ESXi есть что-то, что будет работать аналогично KVM. Любая помощь в этом вопросе будет очень цениться.
Питер