: O. Yuanying

kubevirtのVMをリスタートしたらIPアドレスが消えた

症状

UbuntuのVMをkubectl virt restart した後に ssh しようとしたところ、No route to host となって繋がらなくなった。

$ k virt restart node-01
VM node-01 was scheduled to restart

$ ssh ubuntu@node-01.staging.vms.svc.fraction.cluster
ssh: connect to host node-01.staging.vms.svc.fraction.cluster port 22: No route to host

再起動後の Mac Address が変わっていた

kubectl virt console で調べてみたところ、Mac Addressが再起動後に変わっていた。

➜ diff -u before.txt after.txt
--- before.txt  2022-09-29 00:12:28.024068282 +0000
+++ after.txt   2022-09-29 00:13:00.940507202 +0000
@@ -5,9 +5,5 @@
        valid_lft forever preferred_lft forever
     inet6 ::1/128 scope host
        valid_lft forever preferred_lft forever
-2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
-    link/ether b2:81:6c:00:81:56 brd ff:ff:ff:ff:ff:ff
-    inet 10.244.8.23/24 metric 100 brd 10.244.8.255 scope global dynamic enp1s0
-       valid_lft 86313396sec preferred_lft 86313396sec
-    inet6 fe80::b081:6cff:fe00:8156/64 scope link
-       valid_lft forever preferred_lft forever
+2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
+    link/ether 62:1c:50:f6:fe:e3 brd ff:ff:ff:ff:ff:ff

netplan の設定ファイルを見るに、初回起動時の Mac Address を指定してネットワークの設定を行なっていた。

ubuntu@node-01:~$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp1s0:
            dhcp4: true
            match:
                macaddress: f2:a5:6b:0c:3b:9f
            set-name: enp1s0
    version: 2

解決方法

networkData を指定して、システムデフォルトの設定を上書きする。

      - cloudInitNoCloud:
          networkData: |
            version: 2
            ethernets:
              enp1s0:
                dhcp4: true
          userData: |-
            #cloud-config
            password: password
        name: cloudinitdisk

以上。

  • https://github.com/kubevirt/kubevirt/issues/1646