Вопрос или проблема
Каков предполагаемый, надежный и чистый способ добавить дополнительные IPv6-адреса в виртуальную систему, работающую на сервере Ubuntu, настроенном с помощью cloud-init (например, облачный провайдер, LXD,…)?
- Обычно cloud-init создает файл /etc/netplan/50-cloud-init.yaml, и было бы легко просто добавить дополнительные адреса в этот файл, но, насколько я знаю, cloud-init перезаписывает этот файл всякий раз, когда провайдер меняет настройки, например, DNS-резолверы. Изменения будут потеряны в этом случае, не так ли?
- С другой стороны, netplan, кажется, принимает только один файл для каждого сетевого устройства, поэтому не ясно, корректно ли добавлять второй файл. Когда я попробовал это со вторым файлом, это сработало, но это противоречит мануалу netplan, который говорит, что “Лексикографически более поздние файлы (независимо от того, в каком они каталоге) дополняют (новые ключи отображения) или заменяют (те же ключи отображения) предыдущие.” , так что добавление второго файла должно — следуя мануалу — переопределить, и, таким образом, стереть конфигурацию адреса в 50-cloud-init.yaml.
Итак, даже если в данный момент добавление второго файла, кажется, работает, будет ли это надежно работать в будущем или исчезнет с каким-либо обновлением netplan?
С уважением
Ответ или решение
Добавление дополнительных IPv6-адресов на виртуальную систему, использующую Ubuntu Server и настраиваемую через cloud-init, – это важная задача, требующая надежного и чистого подхода. Рассмотрим все аспекты этой проблемы и возможные решения.
Проблема и задачи
Сейчас, когда cloud-init инициирует конфигурацию сети, он создает файл /etc/netplan/50-cloud-init.yaml
. Этот файл используется для настройки сетевых интерфейсов через Netplan. Основная проблема заключается в том, что любые изменения, внесенные вручную в этот файл, могут быть потеряны при любой последующей модификации облачного провайдера, например, при изменении DNS серверов.
Краткое резюме проблем:
- Нестабильность: Изменения в
50-cloud-init.yaml
могут быть перезаписаны. - Множественные файлы: Использование второго файла для одного интерфейса противоречит документированным принципам Netplan, что может привести к нежелательным последствиям.
Возможные решения
-
Использование cloud-init для статической конфигурации:
Вы можете добавить дополнительные IPv6-адреса прямо в конфигурации в Cloud-Init, используя формат YAML. Это делается в разделе network внутри cloud-config. Пример:network: version: 2 ethernets: eth0: addresses: - 2001:db8::1/64 - 2001:db8::2/64 gateway6: 2001:db8::1
Такое решение надежно, так как оно сохранится при изменении настроек провайдера.
-
Создание пользовательского Netplan-файла:
Если вы используете netplan, то создание дополнительного конфигурационного файла будет работать, но необходимо быть осторожным с порядком применения. Несмотря на противоречивую документацию, на практике, Netplan обрабатывает файлы по алфавитному порядку, поэтому naming вашего пользовательского файла, например,99-custom.yaml
, обеспечит его последующее применение. -
Скрипты и автоматизация:
Вы можете использовать системные скрипты (например, черезcron
илиsystemd
) для проверки и автоматического изменения конфигурации сети при обнаружении изменений в cloud-init. Это потребует дополнительных умений в shell-скриптинге и знания системных настроек.
Рекомендации и будущее
В долгосрочной перспективе лучший подход — это максимально использовать возможности cloud-init, чтобы сохранить ваши конфигурации в едином и централизованном виде. Однако стоит отметить, что Netplan может со временем изменить свою реализацию, и нужно быть готовым адаптировать конфигурации в ответ на изменения в мануале или обновления в ПО.
Заключение
Для управления дополнительными IPv6-адресами на облачной инфраструктуре Ubuntu рекомендуется использовать расширенные возможности Cloud-Init для конфигурации сети. Это обеспечит надежность и предсказуемость изменений в сетевых конфигурациях, сводя на нет риск перезаписи пользовательских настроек.