3

Я пытаюсь настроить контейнеры LXC поверх Amazon. Я очень новичок в Amazon и VPC особенно. На самом деле создан VPC впервые экспериментировать lxc.

Моя цель: Моя цель - иметь контейнеры lxc на экземплярах Amazon и размещать их в сети мостового типа. Это означает, что я должен иметь возможность назначать публичные ips или частные ips, доступные для других контейнеров amazon instances/lxc, как в физической локальной сети. Для этого я пробовал virsh(libvirt) с сетевым мостом. При этом я так и не смог добиться того, чего хотел.

Что я сделал: я создал VPC с одной подсетью (общедоступной). Запустил в нем экземпляр Debian. Установил LXC и смог успешно добиться режима nat и режима маршрута. Но это дало мне 192.168.122.0 (по умолчанию lxc) IP-адреса. Но я смог получить интернет в контейнерах с некоторыми приемлемыми правилами. После попытки с libvirt вручную создать мост с помощью bridge-utils не повезло в назначении IP-адреса для контейнера. Я предполагаю, что контейнер должен получить аренду DHCP от службы DHCP Amazon. Наконец, я связал другой Elastic IP с экземпляром debian и запомнил его собственный приватный ip. После этого создал простой мост и добавил eth0 к мосту на хосте. Затем создал простую сеть host-bridge, используя libvirt. И в конфиге lxc жестко закодирован нативный ip, который я запомнил. Затем я запустил контейнер lxc. Контейнер может получить nated ip на нем. Я мог бы SSH к нему с хоста. Но я не получаю интернет в этом контейнере.

/etc/network/interfaces(host) auto lo iface lo inet loopback auto eth0 iface eth0 inet manual

auto br0
iface br0 inet dhcp
    bridge_ports eth0
    bridge_fd 0
    bridge_maxwait 0

virsh net-dumpxml host-bridge

 <network>
 <name>host-bridge</name>
 <uuid>7c41e4ce-311c-c78f-5ea3-a03a224e4a3c</uuid>
 <forward mode='bridge'/>
 <bridge name='br0' />
 </network>

LXC файл конфигурации

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
#lxc.network.name = eth0
lxc.network.ipv4 = 10.0.0.207/24(natted memorized ip)

файл интерфейсов контейнера auto lo iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.0.0.207
netmask 255.255.255.0
gateway 10.0.0.1

Мои вопросы:

  1. Какой VPC я должен выбрать для этого сценария?
  2. Какой сетевой режим облегчает мою работу?
  3. По крайней мере, с тем, чего я достиг, как я могу получить интернет в контейнер?
  4. Без Elastic IP, не могу ли я иметь частный IP в той же подсети, которая доступна для других экземпляров и контейнеров?

2 ответа2

3

Amazon не поддерживает динамические IP-адреса для серверов внутри VPC. Один IP-адрес, который назначается при запуске сервера, является единственным, который вы можете отправлять и получать из сети. Простого динамического добавления серверов-контейнеров LXC к экземпляру и предположения, что мостовая сеть может заставить его работать, не произойдет. IP-сеть Amazon - это сеть специального назначения для маршрутизации между экземплярами, которая не имитирует общую подсеть Ethernet - большинство функций, которые вы ожидаете от одной, не работают.

Если вам нужны такие функции, есть вероятность, что вы можете настроить виртуальную сетевую подсеть поверх IP-адресов Amazon - используя такие вещи, как туннелирование GRE, VDE (виртуальная распределенная сеть Ethernet) или OpenVPN.

Однако, если вы будете делать это с помощью сети Amazon, я постараюсь объяснить ваши варианты.

Эластичные IP-адреса работают так, что частный IP-адрес остается прежним, но с эластичным IP-адресом происходит индивидуальный NAT, если (и только если) адрес направляется на интернет-шлюз.

Существует также возможность удаления проверки источника и назначения из сетевого интерфейса экземпляра, что обычно делается для маршрутизаторов. Возможно, что использование его позволит нескольким серверам находиться в одном экземпляре, но это кажется сомнительным, поскольку я не верю, что Amazon перенаправит запросы ARP на сервер даже в этом случае.

В настоящее время Amazon VPC поддерживает несколько интерфейсов на экземпляр (до 2) и несколько IP-адресов на экземпляр (до 8). Это то, что вы можете использовать, если вы хотите настраивать экземпляр каждый раз, когда добавляете сервер. Там адреса просто дополнительные адреса, связь разрешена как по виртуальному интерфейсу экземпляра. Для них нет поддержки DHCP, поэтому вам нужно вручную настроить IP-адреса после того, как вы добавили их на свой сервер из консоли управления. Обычный способ их использования - просто использовать "ip addr add" для добавления нескольких IP-адресов к одному и тому же интерфейсу, но я не вижу очевидной причины, по которой использование мостов и передача адресов на разные интерфейсы также не сработают.

0

У меня такая же потребность, и я, возможно, только что нашел способ сделать это.

Моя настройка:

Дополнительная карта eth1 с HWaddr 02:5f:fc:b3:0b:b9 и несколькими IP- адресами с 10.2.132.61 по `10.2.132.64 '

Я хочу использовать мостовое соединение и использовать один и тот же сетевой адаптер, чтобы дать каждому из моих контейнеров один из IP-адресов, настроенных для этого интерфейса.

Моей первой попыткой было создать br0 на eth1 а затем использовать эту конфигурацию

lxc.network.type = veth                
lxc.network.hwaddr = 02:5f:fc:b3:0b:b9 
lxc.network.flags = up                 
lxc.network.link = br0

Проблема здесь в том, что когда вы запускаете контейнер, dhcp будет получать пакеты с 02:5f:fc:b3:0b:b9 (внешний мост), идущие на его интерфейс, который имеет тот же HDaddr, и он будет жаловаться:

 kernel: [16809131.333956] br0: received packet on vethVIAEYB with own address as source address

Решение, которое я нашел, состоит в том, чтобы изменить MAC внешнего интерфейса (br0 и eth1 на хосте) на случайный. Таким образом, запуская контейнер, он может сразу получить информацию DHCP!

Так я и сделал

sudo ifconfig eth1 down
sudo ifconfig eth1 hw ether 00:80:48:BA:d1:30
sudo ifconfig br0  hw ether 00:80:48:BA:d1:30
sudo ifconfig eth1 up

Затем перезапуск контейнера сделал свое дело!

Сейчас работает с DHCP. Чтобы использовать другие зарегистрированные IP-адреса для этого интерфейса, мне, очевидно, придется полагаться на статическую настройку IP-адреса в файле CONTAINER/config.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .