我已经安装了 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
手动应用配置更改。再次阅读注释后,现在我觉得它谈论的是更改不会在机器的破坏和重建,这似乎是不言而喻的。显然我误解了某事。
我的问题是:
我在新
cloud-init
系统中的哪个位置netplan
应该要进行手动网络配置吗?我如何应用所做的更改
/etc/netplan
?我如何应用所做的更改
/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 config
过cloud-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 主机密钥,但不会重新启动机器。