问题描述
网络无法在 user-data 中直接配置。
该笔记将记录:在 cloud-init 中,配置网络的方法。
解决方案
方案一、官方方法
cat > user-data <<EOF
#cloud-config
...
EOF
cat > network-config-v2.yaml <<EOF
version: 2
renderer: networkd
ethernets:
enp1s0:
addresses:
- 172.31.253.50/24
gateway4: 172.31.253.1
nameservers:
addresses: [223.6.6.6, 223.5.5.5]
EOF
cloud-localds -v --network-config=network-config-v2.yaml user-data.iso user-data
方案二、变通方法
通过 write_files 与 runcmd 结合:
1)kvm virtualization – how to add network configuration to cloud init image to run a kvm image – Server Fault
补充说明
通过挂载,我们能看到其中的组织方式:
# mount user-data.iso /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
# ls /mnt/
. .. meta-data network-config user-data
# cat /mnt/network-config
version: 2
renderer: networkd
ethernets:
enp1s0:
addresses:
- 172.31.253.50/24
gateway4: 172.31.253.1
nameservers:
addresses: [223.6.6.6, 223.5.5.5]
常见问题
Top level network key in network-config but missing ‘config’ or ‘version’
Bug #1906187 “Version tag is not respected when put last” : Bugs : netplan.io package : Ubuntu
cloud-init/DataSourceNoCloud.py at main · canonical/cloud-init
虽然 network-config-v2.yaml 为 netplan 配置格式,但不能包含 network 键。否则虚拟机的网络将配置失败,并在 /var/log/clous-init.log 中提示 …Top level network key in network-config but missing ‘config’ or ‘version’… 错误。
参考文献
netplan – cloud-init ignoring static IP network configuration – Stack Overflow