openstack 虛擬機網卡被重名為cirename0

虛擬機網卡被重名為cirename0

   在虛擬機掛載多網卡情況下,你在虛擬機上卸載網卡後,再創建新的port掛給虛擬機使用,如果虛擬機不經過重啟的話,是不會有任何問題的。但是,如果虛擬機重啟了,你可能會發現沒有了原來的eth0或者eth1,而多了一個 cirename0 的網卡。這就是cloudinit搞的鬼,在cloudinit的local階段,好像會記錄之前的mac地址,如果發現不一致,就會觸發rename_interface。當然你在創建新的port再掛給虛擬機使用時,上去把新的網卡配置文件配置好,比如HWADDR要配置對應的mac地址,可以得到解決。

問題現象

虛擬機實際網卡的對應MAC地址:

eth0 mac地址 fa:16:3e:15:84:55
eth1 mac地址 fa:16:3e:62:a6:a4
$ ip add
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:15:84:55 brd ff:ff:ff:ff:ff:ff
    inet 10.100.43.184/24 brd 10.0.43.255 scope global dynamic eth1
       valid_lft 86266sec preferred_lft 86266sec
    inet6 fe80::f816:3eff:fe15:8455/64 scope link 
       valid_lft forever preferred_lft forever
3: cirename0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether fa:16:3e:62:a6:a4 brd ff:ff:ff:ff:ff:ff
# 根據以上ip add信息,很明顯eth0名字是變了,變為cirename0了。且eth0(cirename0)和eth1的MAC地址也不對應。
解決問題
1、修改udevs文件, 把網卡對應的MAC地址對應上。
$ cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="fa:16:3e:62:a6:a4", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="fa:16:3e:15:84:55", NAME="eth0"

2、修改eth0和eth1配置文件,這裡要把獲取IP方式要寫成靜態和網卡對應MAC地址也要寫上。因為後面我們會把cloud-init關掉。
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
BOOTPROTO=none
IPADDR=10.100.43.184
PREFIX=24
GATEWAY=10.100.43.1
DEVICE=eth0
HWADDR=fa:16:3e:15:84:55 # 一定要配置上MAC
MTU=1500
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet
USERCTL=no
DEFROUTE=no

$ cat /etc/sysconfig/network-scripts/ifcfg-eth1
# Created by cloud-init on instance boot automatically, do not edit.
BOOTPROTO=none
IPADDR=192.168.100.120
PREFIX=24
GATEWAY=192.168.100.1
DEVICE=eth1
HWADDR=fa:16:3e:62:a6:a4  # 一定要配置上MAC
MTU=1500
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet
USERCTL=no
DEFROUTE=yes

3、關閉cloud-init相關服務和重新reset網卡名,然後reboot主機
$ systemctl disable cloud-init.service cloud-init-local.service cloud-final.service cloud-config.service
# 本環境遇到的是eth0網卡名變為cirename0,其它環境具體問題具體修改網卡。
$ ip link set cirename0 name eth0
$ reboot 

參考文獻

github iswbm