首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在具有Terraform/KVM的CentOS 7上使用Cloud设置静态IP

在具有Terraform/KVM的CentOS 7上使用Cloud设置静态IP
EN

Stack Overflow用户
提问于 2020-01-15 17:50:49
回答 1查看 5.1K关注 0票数 1

我使用Terraform和CentOS创建了一个KVM 7 VM。作为测试服务器,这个VM应该有一个静态IP,可以使用云-Init

代码语言:javascript
运行
复制
version: 2
ethernets:
  eth0:
    # match:
    #   name: eth0
    dhcp4: false
    dhcp6: false
    addresses: 
      - 10.18.3.2/24
    gateway4: 10.18.3.1

现在我们重新创建VM并打开它的控制台:

代码语言:javascript
运行
复制
terraform destroy -auto-approve
terraform apply -auto-approve
terraform console centos

这将产生来自Cloud的以下输出

代码语言:javascript
运行
复制
[   10.073544] cloud-init[626]: Cloud-init v. 18.5 running 'init-local' at Wed, 15 Jan 2020 17:34:43 +0000. Up 10.04 seconds.
[  OK  ] Started Initial cloud-init job (pre-networking).
[  OK  ] Reached target Network (Pre).
         Starting LSB: Bring up/down networking...
[FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details.
         Starting Initial cloud-init job (metadata service crawler)...
[  OK  ] Reached target Network.
         Starting Postfix Mail Transport Agent...
         Starting Dynamic System Tuning Daemon...
[  OK  ] Started Dynamic System Tuning Daemon.
[  310.701064] cloud-init[820]: Cloud-init v. 18.5 running 'init' at Wed, 15 Jan 2020 17:39:44 +0000. Up 310.67 seconds.
[  310.724568] cloud-init[820]: ci-info: +++++++++++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++++++++++
[  310.727151] cloud-init[820]: ci-info: +--------+------+---------------------------+-----------+-------+-------------------+
[  310.729810] cloud-init[820]: ci-info: | Device |  Up  |          Address          |    Mask   | Scope |     Hw-Address    |
[  310.732602] cloud-init[820]: ci-info: +--------+------+---------------------------+-----------+-------+-------------------+
[  310.735405] cloud-init[820]: ci-info: |  eth0  | True | fe80::5054:ff:fe6a:ca6/64 |     .     |  link | 52:54:00:6a:0c:a6 |
[  310.738253] cloud-init[820]: ci-info: |   lo   | True |         127.0.0.1         | 255.0.0.0 |  host |         .         |
[  310.740787] cloud-init[820]: ci-info: |   lo   | True |          ::1/128          |     .     |  host |         .         |
[  310.743060] cloud-init[820]: ci-info: +--------+------+---------------------------+-----------+-------+-------------------+

花了大约5分钟的时间,线路失败,未能启动LSB:启动/关闭网络失败。正如我们所看到的,机器没有按照Cloud的请求分配ipc4地址。

为什么我的静态IP地址没有分配?我也尝试过ens3作为接口名,但没有成功。

地形test.tf文件

代码语言:javascript
运行
复制
provider "libvirt" {
  uri = "qemu:///system"
}
resource "libvirt_pool" "test_pool" {
  name = "test_pool"
  type = "dir"
  path = "/tmp/kvm_test"
}
resource "libvirt_volume" "centos7-img" {
  name    = "centos7.qcow2"
  pool    = libvirt_pool.test_pool.name
  source =  "/var/lib/libvirt/images/CentOS-7-x86_64-GenericCloud.qcow2"
  format =  "qcow2"
}
data "template_file" "cloudinit_data" {
  template = file("cloudinit.cfg")
}
data "template_file" "cloudinit_network" {
  template = file("network.cfg")
}
resource "libvirt_cloudinit_disk" "cloudinit" {
  name           = "cloudinit.iso"
  # https://github.com/hashicorp/terraform/issues/7919#issuecomment-320816276
  user_data      = data.template_file.cloudinit_data.rendered
  network_config = data.template_file.cloudinit_network.rendered
  pool           = libvirt_pool.test_pool.name
}

resource "libvirt_network" "test_network" {
   name = "test_network"
   addresses = ["10.18.3.0/24"]
   dhcp {
      enabled = false
   }
}
resource "libvirt_domain" "centos" {
  name   = "centos"
  memory = "1024"
  vcpu   = 4
  cloudinit = libvirt_cloudinit_disk.cloudinit.id

  network_interface {
    #network_name = "default"
    network_id = libvirt_network.test_network.id
  }

  disk {
    volume_id = libvirt_volume.centos7-img.id
  }

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

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

cloudinit.cfg

代码语言:javascript
运行
复制
#cloud-config
# https://cloudinit.readthedocs.io/en/latest/topics/modules.html
timezone: Europe/Berlin

fqdn: myhost.internal
manage_etc_hosts: true
resize_rootfs: true

ssh_authorized_keys:
  - ssh-rsa mykey

ssh_pwauth: true
password: password
chpasswd:
  list: |
    root:password
    centos:password
  expire: false

# Here I set the yum proxy and update all packages
# runcmd:
# ...

网络服务日志

代码语言:javascript
运行
复制
# systemctl status network.service -l
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: failed (Result: timeout) since Wed 2020-01-15 18:39:44 CET; 3min 11s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 654 ExecStart=/etc/rc.d/init.d/network start (code=killed, signal=TERM)
   CGroup: /system.slice/network.service
           └─1000 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid -H myhost eth0

Jan 15 18:40:50 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 6 (xid=0x60f0f449)
Jan 15 18:40:56 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 6 (xid=0x60f0f449)
Jan 15 18:41:02 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 11 (xid=0x60f0f449)
Jan 15 18:41:13 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 20 (xid=0x60f0f449)
Jan 15 18:41:33 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 20 (xid=0x60f0f449)
Jan 15 18:41:53 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 17 (xid=0x60f0f449)
Jan 15 18:42:10 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 17 (xid=0x60f0f449)
Jan 15 18:42:27 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 13 (xid=0x60f0f449)
Jan 15 18:42:40 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 9 (xid=0x60f0f449)
Jan 15 18:42:49 myhost dhclient[1000]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 17 (xid=0x60f0f449)

解决办法:不要在网络配置中使用Cloud

目前,我找到的唯一解决办法是禁用Cloud的网络部分,这意味着不呈现network.cfg文件。相反,在network_interface部分中设置静态IP是可行的:

代码语言:javascript
运行
复制
resource "libvirt_domain" "centos" {
  name   = "centos"
  memory = "1024"
  vcpu   = 4
  cloudinit = libvirt_cloudinit_disk.cloudinit.id

  network_interface {
    network_id = libvirt_network.test_network.id

    hostname  = "centos"
    addresses = ["10.18.3.2"]
  }
  # ...
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-03 02:37:08

我遇到了同样的情况,只要在配置文件中指定dhcp4或dhcp6,虚拟机就会试图通过dhcp (即使值设置为false)来提取地址。

对我来说,解决办法是将dhcp4和dhcp6排除在配置文件之外,一切都如预期的那样在快速启动和静态网络配置到位的情况下工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59757022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档