cloud-init игнорирует конфигурацию статической IP-сети

Я запускаю облачный образ Ubuntu 18.04 и пытаюсь настроить сеть с помощью cloud-init. По какой-то причине он игнорирует мою сеть, когда я пытаюсь назначить статический IP-адрес, и просто возвращается к использованию DHCP. Я не уверен, почему, и не знаю, как его отлаживать. Кто-нибудь знает, делаю ли я что-то не так или как мне дальше устранять неполадки:

Вот мой config.yaml Я использую для создания своего config.img:

#cloud-config
network:
    version: 2
    ethernets:
        ens2:
            dhcp4: false
            dhcp6: false
            addresses: [10.0.0.40/24]
            gateway4: 10.0.0.1
password: secret # for the 'ubuntu' user in case we can't SSH in
chpasswd: { expire: false }
ssh_pwauth: true
users:
    - default
    - name: brennan
      ssh_import_id: gh:brennancheung
      sudo: ALL=(ALL) NOPASSWD:ALL
hostname: vm
runcmd:
    - [ sh, -xc, "echo Here is the network config for your instance" ]
    - [ ip, a ]
final_message: "Cloud init is done.  Woohoo!"

Все остальное в конфиге вроде работает, как будто даже не видит network часть хотя.

Прикрепляю .img как cdrom читать cloud-init. Вы можете увидеть, как я его использую, здесь: https://github.com/brennancheung/playbooks/blob/master/cloud-init-lab/Makefile

ПРИМЕЧАНИЕ. После входа в поле я могу заменить конфигурацию в /etc/netplan с networkраздел выше и повторно примените его, и сеть будет работать со статическим IP. Поэтому я думаю, что нет никаких очевидных ошибок, которые мне не хватает. Это заставляет меня думать, что это связано с сетевым модулем (-ами) cloud-init, а неnetplan сам.

2 ответа

Я наконец понял это. Надеюсь, это поможет кому-то другому.

По-видимому, вы не можете предоставить сетевую конфигурацию в user-data. Вы должны указать это в источнике данных облачного провайдера или в метаданных. Для этого вам нужно переместить раздел сети в отдельный файл и создатьcloud-init изображение с --network-config=... вариант.

Пример:

cloud-localds -v --network-config=network-config-v2.yaml seed.img user-data.yaml

У меня есть полная настройка для настройки и загрузки облачного экземпляра на локальном KVM, если это поможет кому-то еще.

https://github.com/brennancheung/playbooks/tree/master/cloud-init-lab

Если вы заметили, в /etc/cloud/cloud.cfg.d существует файл с именем 99-fake-cloud.cfg (или что-то подобное). Если вы удалите это, то cloud-init настроит сеть, используя параметры в вашем файле пользовательских данных (т.е. - /etc/cloud/cloud.cfg)

Другие вопросы по тегам