Я хочу попытаться создать сетевую инфраструктуру с контейнерами, но как мне настроить другой мост lxd (например: lxcbr1) для моего контейнера lxc?
на хосте I типа:
sudo brctl addbr lxcbr1
, но когда я запускаю новый контейнер, набирая:
lxc launch images:centos/7/amd64 MyCentos
, этот контейнер принимает конфигурацию сети по умолчанию для моста lxdbr0.
ПРИМЕЧАНИЕ. Клиент LXC на компьютере может использовать удаленные экземпляры LXC. Все, что находится в квадратных скобках
[ ]
в информации об использовании, здесь следует игнорировать, так как я объясню, что делать вместе с ним. Я также использую командыlaunch
, предоставленные из вопроса ОП, но вы можете использовать любой образ ОС для запуска, который вам нравится.
Вместо того, чтобы использовать brctl
напрямую, а затем связываться с отдельными конфигурациями контейнеров, рассмотрите вместо этого использование lxc network create
для этого и позвольте LXD управлять этими мостами. Это делает создание мостов действительно простым и не дает нам такой головной боли. (Это то, что я делаю в нескольких средах LXD).
Из использования:
lxc network create [<remote>:]<network> [key=value...]
Create a network.
Фактически, просто сделайте lxc network create lxcbr1
или как хотите, чтобы назвать это.
Проблема в том, что вы должны указать это где-нибудь. Для этого я лично использую профили конфигурации, особенно если мне нужно привязать несколько мостов.
Теперь, обычно У меня есть отдельные профили для отдельных мостов, и я не помещаю два в один и тот же блок, но в вашем случае у вас будет два определения моста LXD. Поэтому нам нужно будет создать профиль конфигурации для них.
Если вам нужно несколько мостов на контейнере одновременно ...
Начните с копирования конфигурации default
в конфигурацию multibridge
:
lxc profile copy default multibridge
После этого нам нужно отредактировать новый файл с несколькими мостами, чтобы он имел несколько сетевых устройств.
lxc profile edit multibridge
Вы увидите нечто подобное в файле:
devices:
eth0:
nictype: bridged
parent: lxdbr0
type: nic
Создайте новую пустую строку после этой строки type
и добавьте строки, чтобы она выглядела следующим образом:
devices:
eth0:
nictype: bridged
parent: lxdbr0
type: nic
eth1:
nictype: bridged
parent: testing
type: nic
Не редактируйте больше ничего в файле и сохраняйте его.
Теперь мы должны указать LXD создать новый контейнер, но использовать профиль multibridge
:
lxc launch images:centos/7/amd64 MyCentos -p multibridge
Это скажет LXD использовать профиль multibridge
, который мы только что настроили как профиль конфигурации для нового контейнера, и он должен использовать как lxdbr0
, так и lxdbr1
на eth0
и eth1
соответственно внутри контейнера.
Одно важное предостережение: Система не умная и не настраивает eth1
должным образом. Таким образом, вам нужно зайти в свою систему CentOS и самостоятельно настроить конфигурацию для eth1
, чтобы установить для нее DHCP или статические IP-адреса в пределах диапазонов IP-адресов конфигурации lxdbr1
. В противном случае этот интерфейс никогда не будет задействован. Поскольку эта конфигурация будет варьироваться от ОС к ОС, я не могу дать вам четкий ответ о том, как настроить каждый сетевой интерфейс на каждом образе. Для этого есть другие ресурсы.
Если вам нужен только новый мост, а не несколько мостов в одном контейнере за раз ...
Затем нам нужно создать профиль специально для этого.
lxc profile copy default lxdbr1
... А затем отредактируйте этот новый профиль.
lxc profile edit lxdbr1
... И попав туда, найдите, где указано lxdbr0
, и измените его на lxdbr1
.
А затем, как и выше, запустите свой контейнер LXD и укажите для него профиль lxdbr1
.
lxc launch images:centos/7/amd64 MyCentos -p lxdbr1
Вам не нужно будет выполнять какую-либо специализированную настройку для сетевого интерфейса, поскольку по умолчанию для первого интерфейса устанавливается DHCP, который автоматически настраивается автоматически.
Теперь просто некоторые заметки о постконфигурации:
Вы также можете пересмотреть все отдельные элементы сети, если вам известны конфигурации для входа, отредактировав конфигурацию сети lxdbr1
без использования brctl
и просто позвоните lxc network edit lxdbr1
и добавьте отдельные конфигурации. Это позволяет lxd
фактически обрабатывать все, и не заставляет вас вручную настраивать мост с помощью brctl
(и позволяет LXD управлять мостом).
Возможно, вы захотите настроить конфигурацию сети, аналогичную приведенной ниже, которая отключает автоматический NAT и заставляет настраивать способ передачи данных в Интернет вручную для вашего второго моста (вы можете внести изменения в саму конфигурацию моста через lxc network edit lxdbr1
, если вы хотите использовать lxdbr1
в качестве имени). Обратите внимание на использование здесь ipv4.nat: "false"
, которое отключает правило iptables
'MASQUERADE
, которое делает его похожим на то, что сама система достигает исходящего:
config:
ipv4.address: 10.75.251.1/24
ipv4.dhcp: "true"
ipv4.dhcp.ranges: 10.75.251.200-10.75.251.250
ipv4.nat: "false"
Также есть и эквивалентные команды IPv6, но IPv4 с ним легче работать, поэтому я опускаю это здесь. Как только это будет сделано, вам необходимо перезагрузить контейнеры. Тем более, что мы установили все на dhcp
.