gpt4 book ai didi

networking - 在带有 Terraform/KVM 的 CentOS 7 上使用 Cloud-Init 设置静态 IP

转载 作者:行者123 更新时间:2023-12-04 19:30:44 24 4
gpt4 key购买 nike

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

version: 2
ethernets:
eth0:
# match:
# name: eth0
dhcp4: false
dhcp6: false
addresses:
- 10.18.3.2/24
gateway4: 10.18.3.1

现在我们重新创建虚拟机并打开它的控制台:
terraform destroy -auto-approve
terraform apply -auto-approve
terraform console centos

这会从 Cloud-Init 生成以下输出
[   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: +--------+------+---------------------------+-----------+-------+-------------------+

在 [FAILED] 线路上花了大约 5 分钟无法启动 LSB:启动/关闭网络失败。正如我们所见,机器没有按照 Cloud-Init 的要求分配 ipc4 地址。

为什么我的静态 IP 地址没有分配?我还尝试将 ens3 作为接口(interface)名称,但没有成功。

Terraforms test.tf 文件
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
#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:
# ...

网络服务日志
# 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-Init 进行网络配置

目前我发现的唯一解决方法是禁用 Cloud-Init 的网络部分,这意味着不渲染 network.cfg 文件。相反,在 network_interface 部分设置静态 IP 有效:
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"]
}
# ...
}

最佳答案

我遇到了同样的场景,简单地在配置文件中指定 dhcp4 或 dhcp6 会导致虚拟机尝试通过 dhcp 提取地址(即使值设置为 false。)

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

关于networking - 在带有 Terraform/KVM 的 CentOS 7 上使用 Cloud-Init 设置静态 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com