Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions _quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ website:
contents:
- text: "6-1. Neutron의 agent에 대해 알아보기"
file: lectures/ch6/neutron_agents.qmd
- text: "6-5. 똑똑한 네트워크 백엔드 - OVN"
file: lectures/ch6/ovn_ovs_part1.qmd
- text: "6-12. SNAT/DNAT란?"
file: lectures/ch6/snat_dnat.qmd
- text: "6-15. OVS와 VXLAN를 이용해 가상 네트워크 만들기"
Expand Down
Binary file added lectures/ch6/images/ovn_ovs_part1/image 1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
90 changes: 90 additions & 0 deletions lectures/ch6/ovn_ovs_part1.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
title: "6-5. 똑똑한 네트워크 백엔드 - OVN"
description: "앞서 배운 OVS 개념을 바탕으로, 보다 효율적인 네트워크 라우팅을 위해 사용되는 OVN을 알아보고 실제 오픈스택 환경에 적용하는 과정을 다룹니다"
code: "6-5"
---

# [6-5-0] 여는 글

Openstack에서는 네트워크를 제공하는 Neutron 컴포넌트가 있습니다.

Neutron은 웹 상에서 제어를 용이하게 하기 위한 API 엔드포인트에 불과하므로, 이를 지탱하는 백엔드 서비스로 OVS, OVN 등 여러 선택지를 제공하여 여러 가상화 백엔드를 연결할 수 있도록 지원합니다.

본 문서에서는 이 백엔드 level에 주목하여 OVS와 OVN의 기술적 바탕을 알아보고, 각각을 Openstack 연동 시 어떤 차이가 있는지 알아봅니다.

# [6-5-1] OVS의 문제점

OVN을 소개하기에 앞서, OVS가 가지고 있는 문제점들에 대해 정리해 볼 필요가 있습니다.

[이전문서]()에서 언급된 바와 같이, OVS는 가상 스위치를 만들어주는 오픈소스 소프트웨어로, OpenStack에서는 KVM 등을 통해 생성된 가상머신들을 연결하는 가상 네트워크를 구축하기위한 용도로 사용됩니다.

HW 스위치처럼 동작하지만 SW로 구현되어있어 수정 등에 용이하고, 상대적으로 환경구성이 간편(?)해 많이 사용되지만,
아래와 같은 문제점들을 가집니다:

- 라우팅, NAT, DHCP 서비스가 모두 Network Node에 몰려있습니다

=> Network Node가 전체 클라우드 인프라의 병목지점이 됩니다

=> 적절한 조치가 없다면, 장애가 발생하는 경우 단일 실패 지점 (SPOF)이 됩니다

=> 분산라우팅을 할 수 있도록 설정할 수 있지만, 그 방법이 매우 복잡하고 불안정합니다

- 네트워크를 제어하기 위해, Neutron이 여러 Python 프로세스에 명령을 하달해야 합니다

=> 요청이 한 곳에서라도 꼬이면 전체 네트워크에 장애가 발생합니다 (특히 라우팅)

=> 대규모 클러스터에서는 이 메세지가 이동하는 메시지큐에 부하가 가중됩니다

- OVS를 단독으로 사용 시 여러 네트워크 서비스들을 외부서비스들에 의존해야 합니다

=> L3나 DHCP의 처리를 위해 별도 프로세스가 필요합니다

=> 특히 '보안그룹'을 구성 시 Linux Bridge를 통해 패킷이 통하도록 설계되어 CPU 부하가 발생합니다

# [6-5-2] OVS의 관리자, OVN

OVN(Open Virtual Network)은 이러한 위 문제들을 해결할 수 있도록 하기 위해 고안된 OVS 프로젝트의 공식 서브 프로젝트입니다.

OVS가 단순히 개별 호스트에서 작동하는 가상 스위치라면, OVN은 가상 스위치에 들어가는 설정들을 중앙에서 관리해 그 효율성을 높여주는 역할을 합니다.

기존 OVS가 Neutron으로부터 명령을 바로 전달받던 방식과 달리, OVN은 상태 정보와 설정 정보를 DB에 저장하고, 이를 Controller가 계속 관찰하도록 해 '필요한 정보만 가져가는' 방식을 취합니다:

- **Northbound DB (NB):** CMS(OpenStack 등)로부터 요청받은 논리적인 네트워크 설정(논리 스위치, 라우터, 방화벽 등)을 저장합니다.

- **ovn-northd:** NB DB에 저장된 고수준의 논리 설정을 SB DB가 이해할 수 있는 저수준의 논리 흐름(Logical Flow)으로 변환하는 번역기 역할을 합니다.

- **Southbound DB (SB):** 실제 섀시(Chassis, 각 서버)의 위치 정보와 바인딩된 포트 정보, 논리적 흐름 정보를 담고 있습니다.

- **OVN-Controller:** 각 Compute Node(컴퓨트 노드)에서 실행되는 에이전트입니다. SB DB를 실시간으로 감시하다가 **내 서버와 관련된 변경 사항만** OVS에게 전달하여 노드에 흐름을 적용합니다.

![](./images/ovn_ovs_part1/image 1.png)


# [6-5-3] OVN이 문제를 해결하는 방식

OVN을 도입하면 위에서 언급한 기존 OVS환경에서의 문제들이 아래와 같이 해결됩니다:

- **1. 분산 라우팅 (DVR) 및 분산 서비스의 기본화**
- 기존에는 모든 트래픽이 Network Node를 거쳐야 했으나, OVN은 **분산 라우팅(Distributed Routing)**을 기본으로 제공합니다.
- L3 라우팅과 NAT 처리가 각 컴퓨트 노드에서 직접 수행되므로, 네트워크 노드의 병목 현상이 사라지고 가용성이 비약적으로 상승합니다.

- **2. 가벼워진 프로세스와 "Native" 서비스**
- OVN은 논리적 흐름(Flow) 자체에서 DHCP 응답이나 ARP 응답을 처리하는 **Native DHCP/L3** 방식을 사용합니다.
- 덕분에 컴퓨트 노드의 리소스 소모가 줄어듭니다.

- **3. 리눅스 브릿지의 제거 (Performance)**
- OVN은 OVS의 **Conntrack(연결 추적)** 기능을 직접 활용하여 보안그룹을 구현하므로, 리눅스 브릿지를 걷어내고 패킷 경로를 단순화하여 성능을 최적화합니다.


# [6-5-4] OpenStack Neutron과의 연동

OpenStack에서 OVN을 백엔드로 선택하면, Neutron은 더 이상 직접 에이전트들과 통신하지 않습니다. 대신 `networking-ovn` 드라이버를 통해 **OVN Northbound DB에 설정값을 기록**하기만 하면 됩니다.

| 비교 항목 | Legacy OVS (ML2/OVS) | OVN (ML2/OVN) |
| :--- | :--- | :--- |
| 중앙 집중형 서비스 | Network Node (SPOF 위험) | 없음 (완전 분산) |
| 에이전트 통신 | RabbitMQ (메시지 큐) | OVSDB 프로토콜 |
| DHCP 처리 | 별도 dnsmasq 프로세스 | OVN 내부 논리 Flow 처리 |
| 보안 그룹 | 리눅스 브릿지 사용 (Iptables) | OVS Conntrack 직접 사용 |
| 복잡도 | 노드별 네임스페이스 관리 복잡 | DB 기반 자동 동기화로 단순화 |

1 change: 1 addition & 0 deletions lectures/ch6_lec.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ Neutron은 오픈스택의 네트워킹 서비스입니다. 이 장에서는 Neu
## 하위 목차

- [6-1 Neutron 에이전트 종류 정리](ch6/neutron_agents.qmd)
- [6-5 똑똑한 네트워크 백엔드 - OVN](ch6/ovn_ovs_part1.qmd)
- [6-12 SNAT/DNAT 개념](ch6/snat_dnat.qmd)
- [6-15 OVS/VXLAN 가상 네트워크 만들기](ch6/ovs_vxlan_vpn.qmd)
3 changes: 2 additions & 1 deletion lectures/index.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ title: "오픈스택 강의 자료"
- [4-1장. nova의 서비스 종류]()
- [5장. Glance]()
- [6장. Neutron](ch6_lec.qmd)
- [SNAT/DNAT 개념](ch6/snat_dnat.qmd)
- [Neutron Agent 종류 정리](ch6/neutron_agents.qmd)
- [똑똑한 네트워크 백엔드 - OVN](ch6/ovn_ovs_part1.qmd)
- [SNAT/DNAT 개념](ch6/snat_dnat.qmd)
- [OVS/VXLAN 가상 네트워크 만들기](ch6/ovs_vxlan_vpn.qmd)