Ssup2 Blog logo Ssup2 Blog

OpenStack의 Network Concept을 이해하고 OpenStack에서 Network를 제어하는 Service인 Neutron을 분석한다.

1. OpenStack Network

[그림 1] OpenStack Network 분류

OpenStack Network은 OpenStack을 이용하여 Cloud를 제공하는 Provider 관점에서의 Network와 Cloud를 이용하는 User 관점의 Network로 접근할 수 있다. [그림 1]은 OpenStack Network를 나타내고 있다. Provider 관점에서의 Network는 Management, Guest, External, API 4가지로 분류 할 수 있다.

User 관점에서의 Network는 Provider Network, Self-service Network 2가지로 분류 할 수 있다.

2. OpenStack Neutron

[그림 2] Neutorn Architecture

OpenStack의 모든 Network를 담당하는 Service이다. Neutron은 Network, Subnet, Router, LB 등 Infra 구성에 필요한 대부분의 Network 구성요소를 Provider 또는 User가 쉽게 생성하고 설정 할 수 있도록 도와준다. [그림 2]는 Neutron의 Architecture를 나타내고 있다. Neutron은 Master 역할을 수행하는 Neutron Server과 Slave 역할을 수행하는 ML2 Plugin Agent, L3 Agent, DHCP Agent, Meta Agent 등으로 구성되어 있다.

Neutron Server와 Agent들은 사이의 통신은 Message Queue를 이용한다. Neutron Server, Agent들은 Message Queue와 통신할때 RPC (Remote Procedure Call)를 이용한다. 별도의 SDN Service가 Neutron과 협력하여 Network를 제어하는 경우 Neutron과 SDN Service는 REST API 방식으로 통신한다.

2.1. Management/Provider/Self-service Network, Router, DHCP

OVS (Open vSwitch)의 유뮤에 따라서 Management Network, Provider Network, Self-service Network, Router, DHCP Server가 실제 어떻게 구성되는지 분석한다. Management Network는 VLAN을 이용하지 않으면서 Node의 Network를 직접 이용하는 Flat Network로 구성되어 있다고 가정하였다. 또한 첫번째 Guest Network는 VLAN 10번 Network로 구성되어 있고 두번째 Guest Network는 VXLAN 20번 Network로 구성되어 있다고 가정하였다.

2.1.1. Without OVS

[그림 3] Compute Node Network without OVS

[그림 3]은 OVS 없이 Compute Node의 Network 구성을 나타내고 있다. eth0는 Management Network와 연결되어 있다. 첫번째 Guest Network는 VLAN 10번을 이용하기 때문에 eth0 Interface에 VLAN 10번 Interface와 VLAN 10번에 VM을 붙일때 이용하는 Bridge를 설정한다. 이와 유사하게 두번째 Guest Network는 VXLAN 20번을 이용하기 때문에 eth0 Interface에 VXLAN 20번 Interface와 VXLAN 20번에 VM을 붙일때 이용하는 Bridge를 설정한다. VM의 모든 Inbound/Outbound Packet은 Bridge를 지나며 OpenStack의 Security Group의 Rule에 의해서 설정된 iptables의 Filter Table에 의해서 Filtering 된다.

VM A는 Provider Network에만 연결되어 있기 때문에 VM A의 TAP Interface는 VLAN 10번 Interface와 연결되어 있는 Bridge에만 연결되어 있다. VM C는 Self-serviced Network에만 연결되어 있기 때문에 VM C의 TAP Interface는 VLAN 20번 Interface와 연결되어 있는 Bridge에만 연결되어 있다. VM B는 양쪽 Network 모두와 연결되어 있기 때문에 VM B의 2개의 TAP Interface를 이용하여 모든 Bridge에 연결되어 있다. Bridge, VLAN Interface, VXLAN Interface 모두 ML2 Plugin Agent가 설정한다.

[그림 4] Network Node Network without OVS

[그림 4]는 OVS 없이 Network Node의 Network 구성을 나타내고 있다. eth1는 Management Network와 연결되어있고, eth0은 External/Provider Network에 연결되어 있다. Compute Node와 유사하게 VLAN 10번 Interface, VXLAN 20번 Interface 설정 및 관련 Bridge들을 설정한다. 이와 더불어 External/Provider Network와 연결을 위한 별도의 Bridge가 설정되어 있다. Bridge, VLAN Interface, VXLAN Interface는 ML2 Plugin Agent가 설정한다.

Router와 Network Namespace는 1:1 관계를 갖는다. Router별로 별도의 Network Namespace를 이용하기 때문에 각 Router는 완전히 독립된 Routing Table을 구성할 수 있다. [그림 4]의 Router는 External/Provider Network, Guest/Provider Network, Guest/Self-service Network를 연결하는 Router이다. 각 Network를 연결하는 Bridge에 VETH Interface를 이용하여 Router Network Namespace로 Packet을 전송한다. Router Network Namespace로 전송된 Packet은 iptables을 통해 설정된 Routing Rule에 의해서 Routing된다. Router 설정은 L3 Agent가 수행한다.

DHCP Server는 Network Node에 Guest Network의 Bridge에 dnsmasq를 붙여 구성한다. 각 dnsmasq는 별도의 Network Namespace에서 구동되기 때문에 Network Node에 여러개의 dnsmasq가 동작하여도 충돌이 발생하지 않는다. dnsmasq의 Network Namespace로 Packet을 전송하기 위해서 Router와 동일하게 VETH를 이용한다. dnsmasq 설정은 DHCP Agent가 수행한다.

2.1.2. With OVS

[그림 5] Compute Node Network with OVS

[그림 5]는 OVS를 이용한 Compute Node의 Network 구성을 나타내고 있다. [그림 3]과 동일한 Network 구성이지만 OVS를 이용하여 구성했다는 점이 다르다. VM과 연결된 모든 TAP Interface는 Bridge, VETH를 통해서 통합 OVS 역할을 수행하는 br-int OVS에 연결된다. br-int에서 VXLAN, GRE 기반의 Guest Network는 br-tun OVS를 이용한다. VLAN 기반의 Network는 br-vlan OVS를 이용한다. 첫번째 Guest Network는 VLAN을 이용하기 때문에 br-vlan OVS를 이용하고, 두번째 Guest Network는 VXLAN을 이용하기 때문에 br-tun OVS를 이용한다.

VM의 모든 Inbound/Outbound Packet은 TAP Interface와 연결된 Bridge를 지나며 OpenStack의 Security Group의 Rule에 의해서 설정된 iptables의 Filter Table에 의해서 Filtering 된다. TAP Interface, Bridge, VETH, OVS 모두 ML2 Plugin Agent가 설정한다.

[그림 6] Network Node Network with OVS

[그림 6]은 OVS를 이용한 Network Node의 Network 구성을 나타내고 있다. [그림 4]와 동일한 Network 구성이지만 OVS를 이용하여 구성했다는 점이 다르다. 모든 VETH Interface는 통합 OVS 역할을 수행하는 br-int OVS에 연결된다. br-int에서 VXLAN, GRE 기반의 Guest Network는 br-tun OVS를 이용하고 VLAN 기반의 Network는 br-vlan OVS를 이용한다. 또한 External Network는 br-ex OVS를 이용한다. OVS는 ML2 Plugin Agent가 설정한다.

3. 참조