OpenStack Neutron DVR

2025. 11. 26. 18:57·Cloud

개요

OpenStack Neutron은 프로젝트 네트워크에 L3 라우팅 서비스를 제공합니다. 라우터는 같은 프로젝트 내의 서로 다른 네트워크는 물론, 외부 네트워크(업스트림)와의 통신을 가능하게 하는 핵심 요소입니다.

OpenStack 배포 시 기본적으로 중앙 집중식 라우팅(Centralized Routing) 모델이 사용되며, 필요에 따라 분산 가상 라우팅(DVR) 으로 전환할 수 있습니다.

OpenStack 라우팅 흐름

OpenStack에서 발생하는 트래픽은 라우팅 목적과 방향에 따라 세 가지 주요 흐름으로 나눌 수 있습니다.

  • East-West 라우팅: 동일 프로젝트 내, 서로 다른 네트워크 간의 트래픽 라우팅
  • North-South 라우팅 (유동 IP): 인스턴스에 유동 IP를 할당하여 외부와 통신하는 트래픽
  • North-South 라우팅 (SNAT)
    • 유동 IP가 없는 VM이 외부와 통신하는 트래픽
    • 라우터의 PAT 서비스를 통해 외부와 통신
    • 다만, 외부의 사용자는 해당 인스턴스에 직접 접속할 수 없음

중앙 집중식 라우팅 (기본 방식)

중앙 집중식 모델은 구조가 단순하여 구현이 쉽지만, 트래픽이 한 곳에 집중되는 구조적 문제점을 내포하고 있습니다.

원리와 구조

  • 배포 위치: 모든 프로젝트의 가상 라우터는 Neutron L3 Agent가 관리하며, 네트워크 노드 또는 컨트롤 노드에 배포됩니다.
  • 트래픽 경로: 라우팅 기능(L3, SNAT, Floating IP)이 필요할 때마다 모든 트래픽은 토폴로지의 전용 노드(네트워크 or 컨트롤러 노드)를 통과해야 합니다.

문제점

중앙 집중식 모델은 다음과 같은 이유로 성능 저하와 비효율적인 트래픽 흐름을 야기합니다.

  1. 비효율적인 East-West 트래픽 흐름
    같은 컴퓨팅 노드에 있는 두 VM이 L3 라우팅을 통해 서로 통신해야 하는 경우에도, 트래픽은 불필요하게 긴 경로를 거칩니다. 트래픽은 Compute Node → Network Node(Controller) → Compute Node로 통신해야 하므로, 불필요한 레이턴시가 발생하고 성능에 부정적인 영향을 미칩니다.
  2. 확장성 및 병목 현상
    Floating IP 트래픽과 SNAT 트래픽 모두 중앙 노드의 외부 네트워크 게이트웨이 인터페이스에 집중됩니다. 대규모 환경에서는 이 컨트롤러 노드가 트래픽 부하의 영향을 매우 크게 받으며, 이는 성능 및 확장성에 직접적인 악영향을 미칩니다. 이 때문에 대규모 환경에서는 컨트롤러 노드에 트래픽 부하가 집중되어 성능 저하가 발생합니다.

분산 가상 라우팅 (Distributed Virtual Routing, DVR)

  • 분산 가상 라우팅(DVR)*은 중앙 집중식 라우팅의 구조적 문제를 해결하기 위한 대안으로 나왔습니다. DVR은 L3 에이전트를 모든 컴퓨팅 노드에 배포하고 라우터를 예약하여 네트워크 트래픽을 최적화하고 컨트롤러 노드의 장애 도메인을 격리합니다.

주요 특성 및 이점

  1. East-West 트래픽 최적화: East-West 트래픽은 분산 방식으로 처리되며, 라우팅이 필요한 경우 트래픽이 컴퓨팅 노드 내에서 직접 라우팅되어 불필요하게 중앙 노드를 거치지 않습니다.
  2. Floating IP 트래픽 분산: 유동 IP를 사용한 North-South 트래픽 처리 기능도 컴퓨팅 노드에 분산되어 라우팅됩니다. 이는 중앙 컨트롤러 노드에 집중되던 Floating IP 부하를 컴퓨팅 노드로 분산시켜 확장성을 높입니다. 다만, 이 기능을 사용하려면 외부 네트워크가 모든 컴퓨팅 노드에 연결되어 있어야 합니다.
  3. SNAT 기능 분리 및 전용화: 유동 IP가 없는 VM의 SNAT 처리 기능은 분산되지 않습니다. SNAT 트래픽만 제공하도록 전용 컨트롤러 노드가 필요하며, 이 노드의 L3 에이전트는 dvr_snat 모드를 사용하여 구성됩니다.

Kolla-Ansible에서의 DVR 구현 방법

Kolla-Ansible은 OpenStack을 Docker 컨테이너 기반으로 배포하는 도구로, DVR 환경 구축을 코드 수준에서 매우 쉽게 설정할 수 있습니다.

  1. 컴퓨팅 노드 외부 네트워크 연결
    Kolla-Ansible 설정에서 neutron_external_interface로 지정될 인터페이스가 모든 컴퓨팅 노드에 물리적으로(또는 논리적으로) 구성되어 있어야 합니다.

  2. DVR 활성화 (globals.yml)
    OpenStack 배포 전, Kolla-Ansible의 전역 설정 파일인 globals.yml에서 DVR 기능을 활성화합니다.

     # globals.yml neutron_enable_dvr: "yes"
  3. Inventory에 L3 에이전트 역할 추가
    globals.yml 파일에서 DVR을 활성화하면 Kolla-Ansible은 L3 에이전트와 메타데이터 에이전트의 역할을 인벤토리 그룹에 따라 자동으로 Neutron L3 Agent와 Neutron Metadata Agent가 분산 배포됩니다.

    만약 인벤토리 파일에서 L3 에이전트와 메타데이터 에이전트를 명시적으로 compute 및 network 그룹에 걸쳐 배포하고자 한다면 다음과 같이 지정할 수 있습니다.

     # DVR(Distributed Virtual Routing)을 위한 L3 Agent, Metadata Agent 배포
     [neutron-l3-agent:children]
     neutron
     compute
    
     [neutron-metadata-agent:children]
     neutron
     compute

DVR 동작 확인 방법

L3 에이전트 배포 및 구성 확인

가장 먼저 모든 노드에서 L3 에이전트가 정상적으로 배포되어 있는지 확인합니다.

(venv) root@control01:~# openstack network agent list --agent-type l3
+--------------------------------------+------------+-----------+-------------------+-------+-------+------------------+
| ID                                   | Agent Type | Host      | Availability Zone | Alive | State | Binary           |
+--------------------------------------+------------+-----------+-------------------+-------+-------+------------------+
| c4d19224-ff6f-4a90-b921-2df540e3645b | L3 agent   | compute01 | nova              | :-)   | UP    | neutron-l3-agent |
...
| 5c54fbcd-9746-485f-9b2c-d2c0a60946ea | L3 agent   | network01 | nova              | :-)   | UP    | neutron-l3-agent |
+--------------------------------------+------------+-----------+-------------------+-------+-------+------------------+

다음으로 각 노드에서 neutron.conf 파일이나 실행 중인 에이전트의 구성을 확인합니다.

  • 컴퓨터 노드 확인

      root@compute01:~# docker exec neutron_l3_agent cat /etc/neutron/l3_agent.ini | grep 'agent_mode'
      agent_mode = dvr
  • SNAT 노드 확인

      root@network01:~# docker exec neutron_l3_agent cat /etc/neutron/l3_agent.ini | grep 'agent_mode'
      agent_mode = dvr_snat

참고

  • https://docs.openstack.org/neutron/latest/admin/deploy-ovs-ha-dvr.html
'Cloud' 카테고리의 다른 글
  • Magnum CAPI
  • Installing OpenStack using PackStack on CentOS 9
  • OpenStack Components
  • Amazon Bedrock
yeseong9769
yeseong9769
  • yeseong9769
    ys.tech.blog
    yeseong9769
  • 전체
    오늘
    어제
    • 분류 전체보기 (47)
      • Artificial Intelligence (6)
      • BigData (2)
      • Cloud (12)
      • Linux (3)
      • Network (9)
      • Mobile (1)
        • Android (1)
      • 정보보안 (9)
        • Blockchain (4)
  • 블로그 메뉴

    • 홈
    • 태그
  • 태그

    anvil
    AWS
    bedrock
    Bitcoin
    boto3
    Calico
    cast
    Ceph
    cloudnative
    conda
  • hELLO· Designed By정상우.v4.10.5
yeseong9769
OpenStack Neutron DVR
상단으로

티스토리툴바