You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KVM桥接配置正常,使用Terraform部署后VM无法获取DHCP IP如何解决?

第一步:恢复原有正常配置

  • 首先销毁Terraform创建的冲突资源,避免继续篡改配置:在你的Terraform工作目录执行 terraform destroy,如果执行失败,可以手动删除libvirt里的错误网络配置:
    1. 先停止Terraform创建的gw虚拟机:virsh destroy gw(如果虚拟机处于运行状态)
    2. 停用冲突的test_network网络:virsh net-destroy test_network
    3. 删除test_network网络定义:virsh net-undefine test_network
  • 恢复宿主机网桥配置:执行 brctl show 确认br0网桥仍绑定eth0物理网卡,如果配置被篡改,直接重启宿主机网络服务恢复你之前手动保存的网桥配置即可(CentOS执行systemctl restart network,Ubuntu执行netplan apply)
  • 恢复原有手动部署虚拟机的网络配置:执行virsh edit <原有虚拟机名称>打开虚拟机XML配置,找到网卡配置段,修改为直接绑定br0网桥的配置即可,示例如下:
    <interface type='bridge'>
      <mac address='原有虚拟机的MAC地址,不需要修改'/>
      <source bridge='br0'/>
      <model type='virtio'/>
    </interface>
    
    修改后重启虚拟机即可恢复原有网络。

第二步:修正Terraform配置避免冲突

你的配置错误点是:已经手动在宿主机创建了br0网桥的场景下,不需要再用libvirt_network资源定义绑定br0的网络,该操作会让libvirt接管你已有的br0网桥,还会自动启动dnsmasq DHCP服务,和局域网原有DHCP服务冲突,导致虚拟机无法正常获取IP,还可能篡改原有网络配置。
删除libvirt_network资源段,直接在虚拟机网卡配置里指定桥接br0即可,修正后的完整配置如下:

terraform {
  required_providers {
    libvirt  = {
      source = "dmacvicar/libvirt"
    }
  }
}

provider "libvirt" {
    uri = "qemu:///system"
}

resource "libvirt_volume" "centos7-qcow2" {
    name   = "centos7.qcow2"
    pool   = "default"
    source = "http://14.7.1.10_0.39637-disk1.qcow2"
    format = "qcow2"

}

data "template_file" "user_data" {
  template = file("${path.module}/cloud_init.cfg")
}

data "template_file" "cloudinit_network" {
  template = file("${path.module}/network.cfg")
}

resource "libvirt_cloudinit_disk" "cloud_init" {
  name           = "commoninit.iso"
  user_data      = data.template_file.user_data.rendered
  network_config = data.template_file.cloudinit_network.rendered
}

# Define KVM domain to create
resource "libvirt_domain" "gw" {
  name   = "gw"
  memory = "8192"
  vcpu   = 4
  
  cloudinit  = libvirt_cloudinit_disk.cloud_init.id
  qemu_agent = true
  
  network_interface {
    # 直接指定桥接已有br0网桥,不需要关联libvirt网络ID
    bridge = "br0"
    model = "virtio" # 启用半虚拟化网卡驱动,提升网络性能
  }

  disk {
    volume_id = "${libvirt_volume.centos7-qcow2.id}"
  }

  console {
    type        = "pty"
    target_type = "serial"
    target_port = "0"
  }

  graphics {
    type         = "spice"
    listen_type  = "address"
    autoport     = true
  }
}

output "ips" {
  value = libvirt_domain.gw.*.network_interface.0.addresses
} 

如果你的系统cloud-init版本较高,gateway4参数已废弃,可以将network.cfg修改为以下配置避免警告:

version: 2
ethernets:
  eth0:
    dhcp4: true
    routes:
      - to: default
        via: 10.100.86.254

第三步:验证配置

修改完成后重新执行terraform init、terraform apply创建虚拟机,即可正常通过DHCP获取IP,也不会再篡改你原有网桥和手动部署虚拟机的配置。

内容的提问来源于stack exchange,提问作者Orly Orly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:39:00