YJWANG

Linux Bridge 환경에서의 Openstack Network Deep Dive (Provider) 본문

60.Cloud/60.OpenStack

Linux Bridge 환경에서의 Openstack Network Deep Dive (Provider)

왕영주 2021. 3. 12. 13:36

Linux Bridge 환경에서의 Openstack Network Deep Dive (Provider)


Linux Bridge에서는 OVS와 다르게 qbr qvo qvb 같은 interface가 없어 이해하기 편하다.

이전 포스팅과 마찬가지로 Instance 에서 외부까지 통신되는 flow를 설명하고자한다. (과정은 Libvirt와 동일하다)

  1. Openstack Instance와 Libvirt VM 매핑

우선 Openstack에는 하나의 VM이 실행되고 있고 해당 VM은 UUID로 보아 'instance-00000001' 임을 알 수 있다.

root@yjwang0-stack-01:~/kolla-ansible/tools# openstack server list
+--------------------------------------+-------+--------+--------------------+--------+---------+
| ID                                   | Name  | Status | Networks           | Image  | Flavor  |
+--------------------------------------+-------+--------+--------------------+--------+---------+
| 490bf095-dbbc-44bc-85e7-5dd0bfa3ec4a | demo1 | ACTIVE | public1=10.0.2.168 | cirros | m1.tiny |
+--------------------------------------+-------+--------+--------------------+--------+---------+

VM info in Libvirtd

root@yjwang0-stack-02:~# virsh list
 Id   Name                State
-----------------------------------
 1    instance-00000001   running


root@yjwang0-stack-02:~# virsh dominfo instance-00000001
Id:             1
Name:           instance-00000001
UUID:           490bf095-dbbc-44bc-85e7-5dd0bfa3ec4a
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       110.6s
Max memory:     524288 KiB
Used memory:    524288 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0
  1. VM에 할당된 Interface 정보 확인

VM에 할당된 Interface가 물리적으로는 tap7d82ed52-06 이며 이 Interface는 brqc407e30d-45 bridge에 물려있음을 알 수 있다.

root@yjwang0-stack-02:~# virsh domiflist instance-00000001
 Interface        Type     Source           Model    MAC
------------------------------------------------------------------------
 tap7d82ed52-06   bridge   brqc407e30d-45   virtio   fa:16:3e:14:80:7f

하면 brqc407e30d-45 bridge는 어떤 port로 traffic을 전달하는지 확인해야한다.

  1. brqc407e30d-45 bridge에 매핑된 port list 확인

아래 명령어에서 볼 수 있듯이 ens2로 traffic이 통신됨을 알 수 있다.

root@yjwang0-stack-02:~# brctl show
bridge name    bridge id        STP enabled    interfaces
brqc407e30d-45        8000.cafe0200c021    no        ens2
                            tap7d82ed52-06

여기서 ens2 Interface는 Openstack 내에서 provider network에 할당된 interface이다.
우선 현재 provider network은 public1 이라는 명칭을 갖고있고 해당 network의 interface는 physnet1이다.

root@yjwang0-stack-01:~/kolla-ansible/tools# openstack network show public1
...
| mtu                       | 1500                                 |
| name                      | public1                              |
...
| provider:network_type     | flat                                 |
| provider:physical_network | physnet1   

그리고 physnet1은 아래와 같이 ens2에 매핑돼있다.

root@yjwang0-stack-01:~/kolla-ansible/tools# docker exec  neutron_linuxbridge_agent cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[agent]

[linux_bridge]
physical_interface_mappings = physnet1:ens2
...

즉 지금까지 과정을 그림으로 살펴보면 아래와 같다.

반응형