Контейнеры и сеть LXD со статическим IP

Я провел некоторое тестирование Docker на протяжении многих лет, но для конкретного вида тестирования мне нужно немного больше, чем просто контейнеры приложений. Поэтому я обратился к контейнерам LXC/LXD, что здорово. После установки LXD я создал собственный контейнер:

>> willem@ubuntu:/$ lxc launch images:centos/7/amd64 thing Creating thing
Starting thing 
>> willem@ubuntu:/$ lxc list
+-------+---------+------------------+------+------------+-----------+ 
| NAME  |  STATE  |       IPV4       | IPV6 |    TYPE    | SNAPSHOTS |
+-------+---------+------------------+------+------------+-----------+ 
| thing | RUNNING | 10.0.3.30 (eth0) |      | PERSISTENT |         0 |
+-------+---------+------------------+------+------------+-----------+

большой. Только я, кажется, не контролирую IP-адрес здесь. Я нашел (с помощью Google и locate) контрольный файл:

>> root@ubuntu:/# locate lxc.conf 
/etc/init/lxc.conf 
..
/var/log/lxd/thing/lxc.conf

, в котором вы можете поместить (что выглядит как) статический IP4-адрес. Только после перезагрузки контейнера хост, кажется, забыл мой статический IP и берет тот от DHCP. Вопросы:

  • Как правильно это сделать (я имею в виду, последний Докер имеет --ip переключатель docker run задает IP-адрес) ?
4
задан jeteon
27.02.2023 15:24 Количество просмотров материала 3020
Распечатать страницу

4 ответа

эти конфигурации должны быть помещены в файл /var/lib/lxc/ContainerName/config. Возможные значения параметров в руководстве. Они относятся к различным областям, узла, сети, консоли, ttys, то точка монтирования, группы, функции,...

Под сетью, вы найдете все вам. Для неуказанных переменных автоматически создаются разумные значения. Наиболее актуальны на ваш вопрос следующий:

для lxc.сети.название

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

lxc.сеть.hwaddr

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

lxc.сеть.ipv4

укажите ipv4-адрес, назначаемый виртуальному интерфейсу. В нескольких строках указывается несколько IPv4-адресов. Адрес имеет формат x.y.z.t / m, eg. 192.168.1.123/24. Широковещательный адрес должен быть указан в той же строке сразу после адреса IPv4.

lxc.сеть.ipv4.шлюз

указать ipv4-адрес, используемый в качестве шлюза внутри контейнера. Адрес имеет формат x.y.z.t, eg. 192.168.1.123. Может также иметь специальное значение auto, что означает получение основного адреса из интерфейса моста (как указано в lxc.сеть.опция link) и использовать его в качестве шлюза. авто доступен только при использовании типов сети veth и macvlan.

3
отвечен MariusMatutiae 2023-02-28 23:12

Если вы хотите указать IP-адреса для контейнеров в LXD, посмотрите файл/etc/default / lxd-bridge. Там вы найдете место для включения внешнего файла конфигурации dnsmasq.

Если вы находитесь на Ubuntu 16.04,

откройте /etc/default / lxd-bridge в вашем любимом редакторе. Вам нужно будет использовать sudo.

на строке 16,

LXD_CONFILE=""

добавить запись, указывающую на файл конфигурации dnsmasq. Вы идете чтобы создать этот файл. Так что называй как хочешь. Что-то вроде lxd_bridge.конф.

затем создайте и отредактируйте файл, который вы назвали выше.

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

такой:

dhcp-host=containername, ipaddress

затем необходимо перезапустить lxd-bridge и перезапустить контейнеры.

вот подробная статья о это:

LXD статические IPs

обратите внимание, что если вы используете Alpine linux в контейнерах, необходимо предпринять дополнительные шаги, чтобы сделать эту работу. alpine

5
отвечен Jason Trickett 2023-03-01 01:29

информация о системе: lxc-3.0.1 on Ubuntu Server 18.04.1.

после долгих поисков я нашел эту простую команду для назначения статического ip-адреса контейнеру:

lxc config set [container] raw.lxc 'lxc.net.[i].ipv4.address = [ip]/[subnet-mask]'

здесь [container],[i],[ip] и [subnet-mask] - имя контейнера, номер сетевого интерфейса, требуемый статический ip-адрес и CIDR для желаемой маски подсети соответственно.

например, если вы хотите назначить 240.10.0.20 С маской подсети 255.255.255.0 к 0-ому сетевому интерфейсу контейнер с именем hello, вы можете использовать:

lxc config set hello raw.lxc 'lxc.net.0.ipv4.address = 240.10.0.20/24'

посмотреть здесь для допустимых конфигурационных ключей, добавляемых к lxc.net.[i]. Это страница содержит информацию о нотации CIDR.

вероятно, вам потребуется перезапустить контейнер после выполнения команды.

к сожалению, я не могу вспомнить, где я впервые нашел это решение. Вот это актуально вопрос на GitHub что может содержать полезная информация.

1
отвечен Mohamed Laradji 2023-03-01 03:46

для тех, кто все еще борется, как назначить статические IP-адреса для контейнеров lxd.

моя первая попытка была сделать это через dnsmasq, поэтому я добавил ip-адреса контейнеров в /var/lib/lxd/networks/lxdbr0/dnsmasq.hosts/<container> и перезагрузил службу dnsmasq. Это действительно работало, но не сохранялось после перезапуска Хоста.

Я думал, что это должно быть возможно, чтобы достичь этого с lxd инструмента. На самом деле это было упомянуто в lcd-doc. Я не знаю как настроить key пользователей.network-config С помощью команды lxc config set <container> user.network-config <value>. Так как я не мог ввести несколько ключ: values в аргументе value.

  1. проверьте подсеть контейнера

    lxc network show lxdbr0
    
  2. кулак создать yml (сеть.YML-файл) со следующим значением

    version: 1
    config:
      - type: physical
        name: eth1
        subnets:
          - type: static
            ipv4: true
            address: <ip>
            netmask: 255.255.255.0
            gateway: <gateway> // ends often with .1
            control: auto
      - type: nameserver
        address: 8.8.8.8       // for example
    
  3. создать контейнер с этой конфигурацией сети

    lxc launch ubuntu:18.04 test --config=user.network-config="$(cat network.yml)"    
    

voalá :)

I попытался изменить ip-адрес после создания контейнера

   lxc config set <container> user.network-config "$(cat network.yml)"

я перезапустил контейнер, но ip не обновился. Если любое тело знает, как заставить его работать после создания контейнера, я буду очень благодарна.

LXD по версии 3.0.1

0
отвечен alixander 2023-03-01 06:03

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх