ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Openstack Network 구축 과정 이해 – LinuxBridge
    오픈스택 2019. 10. 3. 23:22

    그림1. Openstack Mitaka 설치가이드의 네트워크 구성도

    Ubuntu 14.04 Openstack Mitaka Install Guide 에서는 위의 네트워크 구성도를 기반으로 설정을 진행합니다.. 이 그림만 봐서는 Provider Network 의 역할이 무엇인지, 그리고 대부분의 오픈스택의 네트워크 구성도와는 다른 모습이여서 이해하는데 많은 어려움이 있었습니다.

    이 포스트에서는 Install Guide 에서 제시하는 네트워크 구성도에 대한 이해와, 그것이 내부적으로 어떻게 구성되는지 명령어단위로 하나하나 분석하면서 알아보도록 하겠습니다.

     

    Openstack Network 종류

    많이 공개된 오픈스택 네트워크 구성도를 보면 크게 아래와 같이 3가지 네트워크로 구성됩니다.

    • Management Network : 관리용 네트워크. 각 컴포넌트(Nova, Neutron 등)이 서로 API 를 호출하는데 사용됩니다.
    • Tunnel Network : vm instance 간 네트워크를 구축하는데 사용되는 네트워크입니다. GRE, VXLAN 등의 기술이 사용됩니다. Overlay Network 라고도 부릅니다.
    • External Network : vm instance 가 인터넷과 통신하기 위한 네트워크.

    Host 머신에 오픈스택을 설치하기 위한 인터넷 연결으로는 별도의 네트워크를 연결하거나, Management Network 를 인터넷에 연결되도록 구성합니다.

    그림1을 보면 오픈스택 설치 가이드에서는 Management Network 와 Provider Network 이렇게 두 가지의 네트워크로만 구성하고 있습니다. Provider Network 는 무엇이고 Tunnel / External Network 는 어디로 간 것일까요? 이것은 설치 가이드에 나오는 Provider / Self-Service Network 에 대해 먼저 이해하고, 가이드에서는 각각의 네트워크를 어떤 용도로 사용하는지 파악하면 알 수 있습니다.

    Provider / Self-Service Network 란?

    설치 가이드 문서의 Neutron 설정부분에서 네트워킹 서비스를 설정하기 위해서 2가지 옵션 중 한가지를 선택해야합니다.

    • Provider Network : 오픈스택을 서비스하는 사람이 구축한 네트워크가 vm instance 에 할당되는 네트워크입니다. 서비스하는 사람이 ‘제공’ 하는 네트워크라는 의미에서 Provider Network 라고 합니다. 이 네트워크는 인터넷에 연결이 되어있는 네트워크입니다. (그렇다고 public ip 를 반드시 가진다는 것은 아닙니다.)
    • Self-Service Network : 오픈스택을 사용하는 사용자(Tenant)가 직접 자신만의 vm instance 를 위한 네트워크를 구축할 수 있는 네트워크입니다. 이 네트워크는 provider network 를 기반으로 GRE, VXLAN 등의 터널링을 통해 구축됩니다.

    이 두 가지 옵션과 위에서 설명한 3가지 네트워크 종류와의 연관성을 정리하면 다음과 같습니다.

    • Provider Network = External Network
    • Self-Service Network = Tunnel Network + External Network

    Virtualbox 로 네트워크 구성하기

    이제 오픈스택을 설치하기 위해, virtualbox 로 네트워크를 구성해보도록 하겠습니다.

    • Internet
      • virtualbox의 NAT 인터페이스
      • 오픈스택 설치용 네트워크
      • IP : Controller / Compute 가 동일하게 10.0.2.15
    • Provider Network
      • virtualbox 의 bridge 인터페이스
      • 공유기와 연결된 인터넷을 사용할 수 있는 네트워크
      • Controller IP : 할당하지 않음
      • Compute IP : 할당하지 않음
      • IP 대역 : 172.32.0.0/24
    • Management Network
      • virtualbox 의 host-only network
      • host에서 virtualbox 의 vm 에 접속할 수 있는 네트워크
      • Controller IP : 192.168.56.101/24
      • Compute IP : 192.168.56.102/24

    Neutron 주요 설정

    Neutron 설정은 Mitaka 설치 가이드의 Self-Service Network 부분대로 진행하였지만, 기록을 위해 주요 설정 부분을 보여드립니다.

    Controller

    /etc/neutron/plugins/ml2/linuxbridge_agent.ini

    [linux_bridge] physical_interface_mappings = provider:eth1 [vxlan] enable_vxlan = True local_ip = 192.168.56.101 l2_population = True

    [linux_bridge]
    physical_interface_mappings = provider:eth1
    
    [vxlan]
    enable_vxlan = True
    local_ip = 192.168.56.101
    l2_population = True

    Compute

    /etc/neutron/plugins/ml2/linuxbridge_agent.ini

    [linux_bridge]
    physical_interface_mappings = provider:eth1
    
    [vxlan]
    enable_vxlan = True
    local_ip = 192.168.56.102
    l2_population = True

    Self-Service 네트워크가 구축되는 과정

    그림 2. Self-Service networks 개요도

     

    그림 3. Self-Service networks 연결도

    설치 가이드 문서의 Launch Instance 의 인스턴스를 위한 네트워크 구축 – Self-Service 파트 에서 위와 같은 구성도를 보여주고 있습니다.

    이제 neutron 에서 네트워크, 서브넷, 라우터를 생성하면서 그림 3의 연결도가 어떤 명령어로 어떻게 생성되는지 하나하나 살펴보도록 하겠습니다.

    Self-Service Network 는 provider network 를 통해 인터넷과 통신하기에, neutron에 provider network를 사용할 수 있도록 설정해주어야 합니다.

    Create the provider network

    # 모든 오픈스택 사용자가 사용할 수 있도록 shared 네트워크를 생성.
    neutron net-create --shared --provider:physical_network provider \
      --provider:network_type flat provider
    
    # 위에서 생성한 네트워크에 서브넷을 생성.
    neutron subnet-create --name provider --allocation-pool start=172.32.0.100,end=172.32.0.200 --dns-nameserver 8.8.8.8 --gateway 172.32.0.1 provider 172.32.0.0/24

    위 작업을 하고 나면 Controller 노드에 아래와 같이 구성됩니다.

    Controller 노드에서 bridge 와 네임스페이스는 아래와 같이 구성되어있다.

    # 리눅스 bridge 확인
    $ brctl show 
    bridge name bridge id       STP enabled interfaces
    brqc1997735-77      8000.08002772b679   no      eth1
                                tape9fb1eac-9b
    
    # 리눅스 네트워크 네임스페이스 확인
    $ ip netns
    qdhcp-c1997735-771e-463c-b64f-7724800bbb1a
    
    $ sudo ip netns exec qdhcp-c1997735-771e-463c-b64f-7724800bbb1a ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    
    2: ns-e9fb1eac-9b@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether fa:16:3e:07:a8:82 brd ff:ff:ff:ff:ff:ff
        inet 172.32.0.100/24 brd 172.32.0.255 scope global ns-e9fb1eac-9b
           valid_lft forever preferred_lft forever
        inet 169.254.169.254/16 brd 169.254.255.255 scope global ns-e9fb1eac-9b
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe07:a882/64 scope link
           valid_lft forever preferred_lft forever

     

    어떤 명령어들이 저런 구성을 완성했는지, neutron 서비스들의 디버그 메세지를 통해 확인해보겠습니다.

    아래 내용은 구성을 위한 필수 명령어들만 정리한 내용입니다.

    # 먼저 어디에선가 tape9fb1eac-9b 인터페이스가 만들어집니다 (어디서 만들어지는지 찾지 못했습니다. 명령어도..)
    
    # DHCP Agent 에서 DHCP Namespace 생성하는 작업을 진행합니다.
    ip netns add qdhcp-c1997735-771e-463c-b64f-7724800bbb1a
    ip netns exec qdhcp-c1997735-771e-463c-b64f-7724800bbb1a ip link set lo up
    
    # 이때 ns-e9 인터페이스가 생성되고, tape9fb 랑 연결됩니다.
    ip link add tape9fb1eac-9b type veth peer name ns-e9fb1eac-9b netns qdhcp-c1997735-771e-463c-b64f-7724800bbb1a
    
    ip netns exec qdhcp-c1997735-771e-463c-b64f-7724800bbb1a ip link set ns-e9fb1eac-9b address fa:16:3e:07:a8:82
    ip link set tape9fb1eac-9b up
    ip netns exec qdhcp-c1997735-771e-463c-b64f-7724800bbb1a ip link set ns-e9fb1eac-9b up
    
    # dhcp 서버에 172.32.0.100 을 할당합니다.
    ip netns exec qdhcp-c1997735-771e-463c-b64f-7724800bbb1a ip -4 addr add 172.32.0.100/24 scope global dev ns-e9fb1eac-9b brd 172.32.0.255
    
    ip netns exec qdhcp-c1997735-771e-463c-b64f-7724800bbb1a ip -4 route replace default via 172.32.0.1 dev ns-e9fb1eac-9b
    
    # dhcp 를 구성합니다.
    ip netns exec qdhcp-c1997735-771e-463c-b64f-7724800bbb1a dnsmasq --no-hosts --no-resolv --strict-order --except-interface=lo --pid-file=/var/lib/neutron/dhcp/c1997735-771e-463c-b64f-7724800bbb1a/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/c1997735-771e-463c-b64f-7724800bbb1a/host --addn-hosts=/var/lib/neutron/dhcp/c1997735-771e-463c-b64f-7724800bbb1a/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/c1997735-771e-463c-b64f-7724800bbb1a/opts --dhcp-leasefile=/var/lib/neutron/dhcp/c1997735-771e-463c-b64f-7724800bbb1a/leases --dhcp-match=set:ipxe175 --bind-interfaces --interface=ns-e9fb1eac-9b --dhcp-range=set:tag0172.32.0.0static86400s --dhcp-option-force=option:mtu1500 --dhcp-lease-max=256 --conf-file= --domain=openstacklocal

     

     

    [Linux-Bridge-Agent] Bridge 생성

    # 새로운 bridge 생성
    brctl addbr brqc1997735-77
    ip link set brqc1997735-77 up
    
    # 인터페이스 추가
    brctl addif brqc1997735-77 eth1
    brctl addif brqc1997735-77 tape9fb1eac-9b

    여기까지가 provider 네트워크를 생성했을 때 일어나는 일입니다. 여기서 compute 노드에 vm instance 를 생성하면, compute 쪽에서 provider bridge 가 생성되고 instance 와 연결되는 작업이 이루어집니다

    이 부분은 self-service 네트워크를 생성 후, vm instance 를 만드는 것과 비슷한 작업이기에 아래에서 알아보도록 하겠습니다.


    Create the Self Service Network

    $ neutron net-create selfservice
    
    $ neutron subnet-create --name selfservice --dns-nameserver 8.8.4.4 --gateway 172.16.1.1 selfservice 172.16.1.0/24

    위와 같이 self-service network 와 서브넷을 생성하면 아래와 같이 구성됩니다.

    그림을 보면 vxlan-70 이 eth0에 연결되어있는 것을 볼 수 있습니다. eth0 은 Management Network 로 할당된 인터페이스입니다.

    이걸 통해서 Openstack Mitaka 설치 가이드에서는 Management Network 를 Tunnel Network와 같이 사용한다는 것을 알 수 있습니다.

    사실 이것을 설명드리고 싶어서 이 문서를 작성한 것이 가장 큽니다. Management Network 를 통해서 Tunnel Network 를 사용하고 있었습니다.

    [DHCP Agent] self-service dhcp namespace 생성

    # 마찬가지로 tapb5ab7d31-e1 가 생성됩니다. 어디에선가..
    
    ip netns add qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899
    ip netns exec qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899 ip link set lo up
    
    # ns-b5ab7d31-e1를 생성하고 tabb5ab7d31-e1 와 연결합니다.
    ip link add tapb5ab7d31-e1 type veth peer name ns-b5ab7d31-e1 netns qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899
    
    ip netns exec qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899 ip link set ns-b5ab7d31-e1 address fa:16:3e:76:6d:74
    ip link set tapb5ab7d31-e1 up
    ip netns exec qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899 ip link set ns-b5ab7d31-e1 up
    
    # dhcp 서버 ip를 172.16.1.2 로 설정합니다.
    ip netns exec qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899 ip -4 addr add 172.16.1.2/24 scope global dev ns-b5ab7d31-e1 brd 172.16.1.255
    
    ip netns exec qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899 ip -4 addr add 169.254.169.254/16 scope global dev ns-b5ab7d31-e1 brd 169.254.255.255
    ip netns exec qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899 ip -4 route replace default via 172.16.1.1 dev ns-b5ab7d31-e1
    
    # dhcp 기능을 활성화합니다.
    ip netns exec qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899 dnsmasq --no-hosts --no-resolv --strict-order --except-interface=lo --pid-file=/var/lib/neutron/dhcp/34078f0c-3e23-46d5-a03c-4c9af2778899/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/34078f0c-3e23-46d5-a03c-4c9af2778899/host --addn-hosts=/var/lib/neutron/dhcp/34078f0c-3e23-46d5-a03c-4c9af2778899/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/34078f0c-3e23-46d5-a03c-4c9af2778899/opts --dhcp-leasefile=/var/lib/neutron/dhcp/34078f0c-3e23-46d5-a03c-4c9af2778899/leases --dhcp-match=set:ipxe175 --bind-interfaces --interface=ns-b5ab7d31-e1 --dhcp-range=set:tag0172.16.1.0static86400s --dhcp-option-force=option:mtu1450 --dhcp-lease-max=256 --conf-file= --domain=openstacklocal

    [neutron-linuxbridge-agent] bridge 생성

    # vxlan-70 인터페이스를 생성하고, vxlan id 는 70로 설정하고 eth0 과 연결되도록 합니다.
    ip link add vxlan-70 type vxlan id 70 dev eth0
    
    ip link set vxlan-70 up
    
    # 새로운 bridge 를 생성합니다.
    brctl addbr brq34078f0c-3e
    brctl stp brq34078f0c-3e off
    ip link set brq34078f0c-3e up
    
    # 인터페이스들을 추가합니다.
    brctl addif brq34078f0c-3e vxlan-70
    brctl addif brq34078f0c-3e tapb5ab7d31-e1
    ip link set tapb5ab7d31-e1 up

    Create a router

    self-service network 와 provider network 를 연결해주는 라우터를 생성합니다.

    $ neutron net-update provider --router:external
    
    $ neutron router-create router
    
    $ neutron router-interface-add router selfservice

     

    위 작업을 하고 나면 아래와 같은 구성이 만들어집니다.

    [l3-agent] router namespace 생성

    # tap19d1547d-a0 가 어디에선가 생성됩니다.
    
    # 새로운 namespace 를 만듭니다.
    ip netns add qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip link set lo up
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 sysctl -w net.ipv4.ip_forward=1
    
    # qr-19d1547d-a0 인터페이스를 만들고 tap19d1547d-a0 와 연결합니다
    ip link add tap19d1547d-a0  type veth peer name qr-19d1547d-a0 netns qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip link set qr-19d1547d-a0 address fa:16:3e:02:b0:b9
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip link set qr-19d1547d-a0 up
    
    # qr-19d1547d-a0 인터페이스에 self-service 네트워크의 게이트웨이로 설정하기 위해 172.16.1.1 를 할당합니다.
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip -4 addr add 172.16.1.1/24 scope global dev qr-19d1547d-a0 brd 172.16.1.255

     

    [neutron-linuxbridge-agent] brq34078f0c-3e bridge 에 새로운 인터페이스 추가

    # 이전에 만들어져있는 bridge에 router 와 연결되는 인터페이스를 추가합니다.
    brctl addif brq34078f0c-3e tap19d1547d-a0
    
    ip link set tap19d1547d-a0  up

    ‘router’ 이름의 라우터를 provide 네트워크의 gateway 로 설정

    neutron router-gateway-set router provider

    이 작업을 하고 나면 본격적으로 self-service 네트워크와 provider 네트워크가 연결되어, self-service 네트워크에서 인터넷으로 트래픽이 나갈 수 있게 됩니다.

    구성은 아래와 같이 됩니다.

    네트워크 인터페이스 구성

    여기까지 왔을 때, controller 노드의 네트워크 인터페이스 구성은 아래와 같이 됩니다.

    $ brctl show 
    
    bridge name bridge id       STP enabled interfaces
    brq34078f0c-3e      8000.7aa146e736c5   no      tap19d1547d-a0
                                tapb5ab7d31-e1
                                vxlan-70
    brqc1997735-77      8000.08002772b679   no      eth1
                                tape01914d2-a0
                                tape9fb1eac-9b
    
    
    $ sudo ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip a
    
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: qr-19d1547d-a0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP group default qlen 1000
        link/ether fa:16:3e:02:b0:b9 brd ff:ff:ff:ff:ff:ff
        inet 172.16.1.1/24 brd 172.16.1.255 scope global qr-19d1547d-a0
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe02:b0b9/64 scope link
           valid_lft forever preferred_lft forever
    // 새로 생성
    3: qg-e01914d2-a0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether fa:16:3e:04:32:27 brd ff:ff:ff:ff:ff:ff
        inet 172.32.0.101/24 brd 172.32.0.255 scope global qg-e01914d2-a0
           valid_lft forever preferred_lft forever
        inet6 fe80::f816:3eff:fe04:3227/64 scope link
           valid_lft forever preferred_lft forever

     

    [l3-agent] router namespace 에 인터페이스 추가

    # tape01914d2-a0 가 어디에선가 생성
    
    # qg-e01914d2-a0 를 생성하고, tape01914d2-a 와 연결합니다.
    ip link add tape01914d2-a0 type veth peer name qg-e01914d2-a0 netns qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8
    
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip link set qg-e01914d2-a0 address fa:16:3e:04:32:27
    ip link set tape01914d2-a0 up
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip link set qg-e01914d2-a0 up
    
    # qg-e01914d2-a0에 provide 라우터 인터페이스 ip로 172.32.0.101 을 할당합니다.
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip -4 addr add 172.32.0.101/24 scope global dev qg-e01914d2-a0 brd 172.32.0.255
    ip netns exec qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 ip -4 route replace default via 172.32.0.1 dev qg-e01914d2-a0
    

     

    [neutron-linuxbridge-agent] brqc1997735-77에 인터페이스 추가

    ip link set brqc1997735-77 up
    brctl addif brqc1997735-77 tape01914d2-a0
    ip link set tape01914d2-a0 up

    여기까지 neutron 에서 provider / self-service 네트워크를 생성 및 설정할 경우 controller 노드에서 물리적(?)으로 어떤 작업을 통해 네트워크들이 구성되는지 확인해보았습니다.

    이제 self-service 네트워크에 vm instance 를 생성해보고, 어떤 일이 일어나는지 확인해보겠습니다.

    Self-service 네트워크에 vm instance 생성

    vm instance 를 생성하면, controller 와 compute 에 작은 변화가 생깁니다. 우선 vm instance 를 생성하면 어떻게 구성되는지 아래 그림으로 확인해보겠습니다.

    여기서 중요한 것은, compute 노드에서 vxlan70 인터페이스가 생성되고 그것을 통해 controller 노드와 연결이 되고 있는 것입니다.

    이제부터 bridge 구성을 포함해서 어떻게 리눅스에서 vxlan 설정이 들어가는지 알아보도록 하겠습니다.

     

    [compute node 의 neutron-linuxbridge-agent] etables 설정 / 새로운 bridge 생성 / vxlan 설정

    # tap66aa1ee8-9b 이 생성된다.
    
    # etables 설정 (이더넷 프레임에 대한 테이블)
    ebtables -N neutronMAC-tap66aa1ee8-9b -P DROP
    ebtables -A FORWARD -i tap66aa1ee8-9b -j neutronMAC-tap66aa1ee8-9b
    ebtables -A neutronMAC-tap66aa1ee8-9b -i tap66aa1ee8-9b --among-src fa:16:3e:3f:4b:28 -j RETURN
    ebtables -N neutronARP-tap66aa1ee8-9b -P DROP
    ebtables -F neutronARP-tap66aa1ee8-9b
    ebtables -A neutronARP-tap66aa1ee8-9b -p ARP --arp-ip-src 172.16.1.3 -j ACCEPT
    ebtables -A FORWARD -i tap66aa1ee8-9b -j neutronARP-tap66aa1ee8-9b -p ARP
    
    # vxlan-70 인터페이스를 생성하고 vxlan id 를 70으로 할당 후 eth0 에 연결되도록 설정
    ip link add vxlan-70 type vxlan id 70 dev eth0
    ip link set vxlan-70 up
    
    # bridge 생성 및 인터페이스 추가
    brctl addbr brq34078f0c-3e
    brctl addif brq34078f0c-3e vxlan-70
    brctl addif brq34078f0c-3e tap66aa1ee8-9b
    
    # 여기에서 vxlan 터널링을 설정합니다.
    # vxlan-70 의 모든 l2 트래픽의 목적지를 192.168.56.101 으로 설정
    bridge fdb add 00:00:00:00:00:00 dev vxlan-70 dst 192.168.56.101
    
    # 172.16.1.1 에 대한 목적지 ip 는 192.168.56.101, mac address 는  fa:16:3e:02:b0:b9 로 설정
    # fa:16:3e:02:b0:b9 는 qrouter-594a2a7a-c79b-42f2-9011-8373f3186cb8 의 qr-19d1547d-a0@if13 인터페이스 mac address
    ip -4 neigh replace 172.16.1.1 lladdr fa:16:3e:02:b0:b9 nud permanent dev vxlan-70
    bridge fdb replace fa:16:3e:02:b0:b9 dev vxlan-70 dst 192.168.56.101
    
    # 172.16.1.2 에 대한 목적지 ip 는 192.168.56.101, mac address 는  fa:16:3e:76:6d:74 로 설정
    # fa:16:3e:76:6d:74 는 qdhcp-34078f0c-3e23-46d5-a03c-4c9af2778899 의 ns-b5ab7d31-e1@if10
    # 172.16.1.2 는 self-service dhcp 서버 주소
    ip -4 neigh replace 172.16.1.2 lladdr fa:16:3e:76:6d:74 nud permanent dev vxlan-70
    bridge fdb replace fa:16:3e:76:6d:74 dev vxlan-70 dst 192.168.56.101

    [controller node 의 neutron-linuxbridge-agent]

    # vxlan-70 의 모든 l2 트래픽의 목적지를 192.168.56.102로 설정
    bridge fdb add 00:00:00:00:00:00 dev vxlan-70 dst 192.168.56.102
    
    # 172.16.1.3 은 instance ip
    # 172.16.1.3 으로 가는 트래픽을 fa:16:3e:3f:4b:28 로 가도록 설정
    # fa:16:3e:3f:4b:28 는 compute 노드의 tap66aa1ee8-9b 인터페이스 mac address
    ip -4 neigh replace 172.16.1.3 lladdr fa:16:3e:3f:4b:28 nud permanent dev vxlan-70
    
    // fa:16:3e:3f:4b:28 로 가는 트래픽의 목적지 ip 를 192.168.56.102 로 설정
    bridge fdb replace fa:16:3e:3f:4b:28 dev vxlan-70 dst 192.168.56.102

    여기까지 아주 긴 과정을 거쳐 provider network / self-service network 를 생성 및 설정이 이루어지는 방법을 알아보았습니다.

    내용은 많지만 중요한 것만 정리하면 다음과 같습니다.

    • linuxbridge 를 이용하여 네트워크를 구축할 경우, linux bridge, namespace 를 이용해서 가상 네트워크를 구축한다.
    • linuxbridge 는 vxlan 만 지원하는데 이는, bridge 라는 명령어를 통해 vxlan 을 설정한다.
    • self-service 네트워크는 provider 네트워크를 통해 외부와 통신한다.

    두서없이 정리하느냐 틀린 내용이나 누락된 내용이 있을 수 있습니다. 혹 발견하시면 댓글로 남겨주시면 감사하겠습니다.

    '오픈스택' 카테고리의 다른 글

    Openstack Network 구축 과정 이해 – LinuxBridge  (0) 2019.10.03

    댓글 0

Designed by Tistory.