cloud-init 忽略 staitc 网络配置

cloud-init 忽略 staitc 网络配置

我在 Ubuntu 22.04 主机上执行以下步骤:

下载云镜像

qemu-img create -b ../jammy-server-cloudimg-amd64.img -f qcow2 -F qcow2 myubuntu2204test01-base.img 10G

在目录myubuntu2204test01中创建文件元数据:

instance-id: myubuntu2204test01
local-hostname: myubuntu2204test01.example.com
network:
  version: 2
  ethernets:
    enp1s0: 
    dhcp4: no
    addresses: [192.168.122.146/24]
    nameservers:
         addresses: [192.168.122.1]
    routes:
    - to: 0.0.0.0/0
      via: 192.168.122.1

在目录 myubuntu2204test01 中创建文件 user-data:

#cloud-config
users:
  - name: someuser
    ssh_authorized_keys:
      - ssh-ed25519 somekey comment
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    groups: sudo
    shell: /bin/bash

ci生成数据的 ISO 映像

genisoimage -output cidata.iso -V cidata -r -J user-data meta-data

创建虚拟机 myubuntu2204test01

virt-install \
--name=testvmubuntu2204 \
--ram=512 --vcpus=1 \
--import \
--disk path=myubuntu2204test01-base.img,format=qcow2 \
--disk path=cidata.iso,device=cdrom \
--os-variant=ubuntu22.04 \
--network bridge=virbr0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole

VM 已创建。但 VM 没有元数据中定义的静态 IP 网络。VM 具有默认 DHCP 网络配置。

为客户虚拟机创建静态 IP 的过程中缺少什么或不正确什么?

我尝试在用户数据和元数据文件中定义网络,但它们都无法为客户虚拟机创建静态网络。

答案1

根据cloud-init 文档

还可以通过在名为 的文件中提供 yaml 格式的数据,将网络配置提供给 cloud-init 中的网络配置版本 1 或网络配置版本 2。network-config如果找到,此文件将覆盖network-interfaces文件。

看起来您正在尝试使用版本 2 网络配置;这意味着您在错误的文件中提供了它。您需要添加network-config而不是meta-data

正如我在评论中提到的,您还需要更正网络配置文件的格式:

instance-id: myubuntu2204test01
local-hostname: myubuntu2204test01.example.com
network:
  version: 2
  ethernets:
    enp1s0:
      dhcp4: no
      addresses: [192.168.122.146/24]
      nameservers:
           addresses: [192.168.122.1]
      routes:
      - to: 0.0.0.0/0
        via: 192.168.122.1

你可以使用以下--cloud-init选项来简化你的生活,virt-install而不必自己构建配置磁盘:

virt-install \
--name=testvmubuntu2204 \
--ram=512 \
--vcpus=1 \
--import \
--disk path=myubuntu2204test01-base.img,format=qcow2 \
--os-variant=ubuntu22.04 \
--network bridge=virbr0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--cloud-init user-data=user-data.yaml,network-config=network-config.yaml

(这假定您有本地命名的文件user-data.yaml并且network-config.yaml;根据需要进行调整。)

相关内容