[Openstack] 잘못된 ovs 브릿지 인터페이스 설정으로 인해 시스템 재부팅 후 네트워크가 단절된 문제 해결

blog post 

 

 

이 문제는 오픈스택의 네트워크 노드 재부팅 후 발생한 문제로, openvswitch(이하 ovs)의 기술적 문제라기 보다는 사실 관리자의 시스템 설정 실수에 가깝습니다. 지난 밤에 예상치 못하게 전원이 내려가는 바람에 시스템을 재부팅하게 되었습니다. 대부분 노드가 정상적으로 부팅되었으나, 네트워크 노드에 ssh 연결이 되지 않았습니다. 간단한 문제였지만 상황에 대해 정리해 두기 위해 포스팅합니다.

 

 

 

상황

 

 

우선 시스템 터미널로 직접 들어가 봅니다. 역시나 ping은 게이트웨이까지도 가지 않는 상황입니다.

 

[root@Network ~]# ping 8.8.8.8
...반응없음...

 

ip, 게이트웨이 정보도 잘 잡혀있습니다. 

 

[root@Network ~]# ifconfig eno16777736
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.27  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 ...  prefixlen 64  scopeid 0x20<link>
        ether ...  txqueuelen 1000  (Ethernet)
        RX packets 22543  bytes 3005069 (2.8 MiB)
        RX errors 0  dropped 34  overruns 0  frame 0
        TX packets 17005  bytes 3007077 (2.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@Network ~]#
[root@Network ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eno33554976
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eno33554976

 

혹시나 브릿지나 ovs에 바인딩되어 있는지(네트워크 설정을 구성한지 좀 오래돼서 정확히 기억이 나지 않는 상황) 확인해봅니다.

 

[root@Network ~]# ovs-vsctl show
...생략...
 Bridge "br-eth1"
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port "phy-br-eth1"
            Interface "phy-br-eth1"
                type: patch
                options: {peer="int-br-eth1"}
        Port "br-eth1"
            Interface "br-eth1"
                type: internal
        Port "eno16777736"
            Interface "eno16777736"
    ovs_version: "2.11.0"

 

문제를 찾았습니다. eno16777736인터페이스가 br-eth1에 바인딩 되어 있는 것을 볼 수 있습니다.

 

문제는 아래와 같이, 현재 network 스크립트를 통해 eno16777736 인터페이스에 ip 및 게이트웨이를 할당받도록 설정되어 있었고,

 

[root@Network ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eno16777736"
DEVICE="eno16777736"
ONBOOT="yes"
IPADDR="192.168.0.27"
PREFIX="24"
GATEWAY="192.168.0.1"
DNS1="8.8.8.8"

 

ovs 브릿지(br-eth1)도 리눅스 인터페이스에서 다운되어 있던 상황이었습니다.

 

[root@Network ~]# ip link
...생략...
12: br-eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:2b:2e:4c brd ff:ff:ff:ff:ff:ff

 

 

 

 

해결

 

 

우선 eno16777736 물리 인터페이스의 ip, gateway, dns 정보를 제거했습니다. 왜냐하면 바인딩한 브릿지가 직접 ip를 할당받아야 하기 때문입니다.

 

[root@Network ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eno16777736"
DEVICE="eno16777736"
ONBOOT="yes"

 

 

다음으로 재부팅 후 자동으로 브릿지 인터페이스를 활성화 할 수 있도록 아래와 같이 스크립트를 하나 작성했습니다.

 

[root@Network ~]# vim /var/tmp/create_interface.sh
#!/bin/bash

ip link set up br-eth1
ip addr add 192.168.0.27/24 dev br-eth1
route add default gw 192.168.0.1 dev br-eth1
echo "nameserver 8.8.8.8" > /etc/resolv.conf

 

시스템에서 스크립트를 사용할 수 있도록 권한을 변경해 주었고,

 

[root@Network ~]# chmod 755 /var/tmp/create_interface.sh

 

스크립트를 부팅 과정에서 실행해 주도록 했습니다. 다만 물리 인터페이스가 올라온 후에 ovs 브릿지 인터페이스를 활성화 해 주기 위해 set_interface라는 systemd 서비스 스크립트를 작성하여 systemd를 통해 스크립트가 실행되도록 했습니다.

 

[root@Network ~]# vim /etc/systemd/system/set_interface.service
[Unit]
Description=Description for sample script goes here
After=network.target

[Service]
Type=simple
ExecStart=/var/tmp/create_interface.sh
TimeoutStartSec=0

[Install]
WantedBy=default.target

 

마지막으로 이 서비스를 활성화 해주고 재부팅해 보았습니다.

 

[root@Network ~]# systemctl enable set_interface
[root@Network ~]# shutdown -r now

 

정상적으로 ovs 브릿지 인터페이스가 ip를 할당받은 것을 볼 수 있습니다.

 

[root@Network ~]# ifconfig
br-eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.27  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 ...  prefixlen 64  scopeid 0x20<link>
        ether ...  txqueuelen 1000  (Ethernet)
        RX packets 26436  bytes 3524796 (3.3 MiB)
        RX errors 0  dropped 316  overruns 0  frame 0
        TX packets 19324  bytes 3468697 (3.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 ...  prefixlen 64  scopeid 0x20<link>
        ether ...  txqueuelen 1000  (Ethernet)
        RX packets 2179769  bytes 1653637286 (1.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19353  bytes 3558987 (3.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
...생략...

[root@Network ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 br-eth1
10.0.0.0        0.0.0.0         255.255.255.0   U     101    0        0 eno33554976
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 br-eth1

 

 

TAGS.

Comments