如何使用 cloud-init 重新加载网络配置?

如何使用 cloud-init 重新加载网络配置?

我已经安装了 Ubuntu Server 18.04,与旧的不同/etc/network/interfaces,我的网络配置现在似乎位于一系列 YAML 文件中/etc/netplan,其中我实际拥有的唯一文件是/etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        ens3:
            addresses: []
            dhcp4: true
            dhcp6: true
            nameservers: {}
            optional: true
        ens4:
            addresses: []
            dhcp4: true
            dhcp6: true
            nameservers: {}
            optional: true
    version: 2

这似乎是由 生成的cloud-init,来自/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg

network:
  ethernets:
    ens3:
      addresses: []
      dhcp4: true
      dhcp6: true
      nameservers: {}
      optional: true
    ens4:
      addresses: []
      dhcp4: true
      dhcp6: true
      nameservers: {}
      optional: true
  version: 2

编辑此配置并将更改应用于正在运行的机器的正确方法是什么?Netplan 文件中的注释告诉我它是临时的,并在重新启动时生成cloud-init,所以我应该编辑cloud-init的配置。但即使在编辑并重新启动后,我也没有看到 Netplan 文件有任何更改,而且我绝对不知道如何cloud-init手动应用配置更改。再次阅读注释后,现在我觉得它谈论的是更改不会在机器的破坏和重建,这似乎是不言而喻的。显然我误解了某事。

我的问题是:

  1. 我在新cloud-init系统中的哪个位置netplan应该要进行手动网络配置吗?

  2. 我如何应用所做的更改/etc/netplan

  3. 我如何应用所做的更改/etc/cloud/cloud.cfg.d

答案1

看来从 cfg 生成 yaml 的诀窍是......

cloud-init clean -r

下一个问题是如何从 seed.iso 或 nocloud-net 元数据中获取该 cfg 集

r 标志与任何重启相同shutdown -r now

如果你运行cloud-init init(不重启),则 /etc/netplan/50-cloud-init.yaml 不会发生明显变化

那么,仍然不清楚如何在不重启的情况下触发该功能吗?我试过了cloud-init init,然后systemctl restart cloud-init

我也尝试cloud-init -d modules --mode configcloud-init -d modules --mode final

好的,等一下,我想我找到了......

systemctl restart cloud-init-local.service

cloud-init clean运行后,从云 cfg 重建 netplan yaml 似乎cloud-init init不起作用。[Ubuntu 19.04 云初始化 19]

[此设计中有太多活动部件]

注意:我发现了一个改进,它进一步清楚地表明这两个命令都实现了预期的结果。

cloud-init clean --logs
cloud-init init --local

答案2

首先,将当前/etc/netplan/*.yaml文件备份为类似的文件/etc/netplan/*.yaml.BAK

然后,您可以进行所需的任何更改/etc/netplan/*.yaml。创建/编辑 .yaml 文件时,缩进和间距以及无制表符非常重要。

仅供参考:您现有的 .yaml 文件应以以下内容开头:

network:
  version: 2
  renderer: networkd

然后:

sudo netplan --debug generate# 生成配置文件

sudo netplan apply# 适用于当前系统

reboot# 确认操作正确

有关更多示例和配置指南,请参阅https://netplan.io/examples

答案3

自从版本23.4云初始化子命令中添加了一个新选项clean--配置

在撰写此版本时云初始化在里面Ubuntu Jammy 的“提议”阶段所以你可以不是使用 获取apt-get update

我检查了来源该命令的作用是删除某些文件和目录。经过一些测试,我发现这样我们可以手动云初始化重新生成网络配置:

使 cloud-init 重新生成网络配置的最小更改

sudo rm /var/lib/cloud/data/instance-id
sudo cloud-init init --local

这不会重新启动机器,也不会更改 SSH 主机密钥。

要应用新的网络计划配置执行:

sudo netplan apply

替代方法:

手动安装‘建议’的包:

cd /tmp
wget http://launchpadlibrarian.net/713462297/cloud-init_23.4.3-0ubuntu0~22.04.1_all.deb
sudo apt-get install ./cloud-init_23.4.*.deb

检查版本云初始化

cloud-init --version

23.4.0例如,它应该是或更高/usr/bin/cloud-init 23.4.3-0ubuntu0~22.04.1

现在您可以执行此命令来清理并重新生成您的网络配置:

sudo cloud-init clean --configs network
sudo cloud-init init --local

这将更改 SSH 主机密钥,但不会重新启动机器。

相关内容