GitHub

https://github.com/Choidongjun0830

클라우드

OpenStack 기초, VLAN과 VXLAN

gogi masidda 2024. 10. 5. 19:05

OpenStack 기초

  • OpenStack은 Cloud OS이다. 
  • VM을 관리해준다. 
  • 지금은 컨테이너를 서비스하는 용도로도, Bare Metal을 서비스하는 용도로도 가능하다. => IaaS
    • Bare Metal: 서버를 한꺼번에 쓰고 싶을 때. 하드웨어의 리소스를 공유하는 가상화 방식과는 다르게, 하드웨어의 모든 성능을 사용할 수 있는 방식이 베어 메탈 방식이다. 
      • 서버를 직접 구축하는 것보다 Bare Metal을 빌려 쓰는 것의 장점
        • Capex(Capital): 살 때 들어가는 돈
        • Opex(Operation): 운용하는데 들어가는 돈
        • Capex 때문에 Bare Metal을 빌려 쓰는 것임. Opex는 사용료가 들어가서 더 비쌀 수도 있음.
        • 회사 안에 두는 것: On premise 
        • 빌려 쓰는 것은 Cloud?
        • 둘이 섞어 쓰는 것은 Hybrid

nova의 시작

  • Controller Node에서 Compute Node로 요청

  • nova-api가 여기저기서 오는 요청을 받는다. (Horizon, heat engine, key stone, ...)
    • nova-api는 사용자의 요청을 수신한다.
    • key-stone은 인증을 받아서 이용하는데 사용
    • heat-engine은 사람이 정의하는 스펙보다 더 정교한 스펙을 요구할 경우
  • nova-compute는 hypervisor와 상호작용한다.
    • nova는 hypervisor를 관리하는 api를 제공하며, 인스턴스(VM) 생성을 관리한다.
    • 제어 기능이 Controller Node에 위치하여 Compute Node를 관리한다.
  • 중앙에 Controller Node가 Hypervisor를 컨트롤한다.
    • 한번에 여러개의 요청이 들어오면 Queue를 통해 스케줄링을 한다. (Scheduler가 있음)
    • Scheduler는 컨트롤러가 어느 Compute Node에 실행될지 결정한다. 
    • 이것을 저장하기 위한 것이 nova database
  • Compute Node 역할
    • 인스턴스 실행
      • Compute Node는 VM이나 인스턴스를 실행하는 물리적 서버이다. Hypervisor를 사용해 가상 머신을 구동한다. 
    • 하이퍼바이저와 상호 작용
      • Compute Node의 nova compute는 Hypervisor와 직접 상호작용하여 VM을 생성하고 관리한다.
  • Controller Node 역할
    • API 요청 처리
    • 스케줄링
    • 네트워크 관리(neutron)
    • 인증 및 권한 관리(keystone)
    • 이미지 관리 (Glance)

Controller Node와 Compute Node의 상호 작용

  1. 사용자 요청: Controller Node의 nova-api를 통해 사용자 요청이 받아 들여진다.
  2. 스케줄링: 어떤 Compute Node에 VM이나 컨테이너를 배치할지 결정한다. 
  3. 큐를 통한 통신: Controller Node의 nova-api는 요청을 큐에 넣고, Compute Node의 nova-compute는 이 큐에서 요청을 읽어 작업을 처리한다.
  4. 하이퍼바이저에서 VM 실행: 선택된 Compute Node의 nova-compute는 Hypervisor를 통해 실제로 VM이나 컨테이너를 생성한다.
  5. 상태 보고: Compute 노드에 VM이나 컨테이너가 생성이 완료되면, 그 상태를 큐를 통해 Controller Node에 보고하고, Controller Node는 이를 보고 필요한 후속 작업을 진행한다. 

Controller Node와 Compute Node는 내부적인 네트워크에 연결이 되어 있어야 한다. => VLAN, VXLAN

 

VLAN과 VXLAN

  • VLAN
    • LAN의 헤더에는 MAC 주소가 들어간다. (LAN은 데이터 링크계층 (Layer2)) => 연결이 되면 모두에게 닿을 수 있다.
    • VLAN은 LAN에 연결되어 있는 것을 논리적으로 쪼갠다. -> 그룹간, 회사 부서들 간 쪼개기
      • 그룹이 다르면 스위치 막는다. (스위치는 데이터 링크 계층, MAC 주소 기반)
      • 헤더에 MAC 주소와 VLAN ID가 들어간다.
    • 서로 다른 서브넷끼리 연결하려면 라우터 필요하다. 그래서 VLAN을 확장한게 VXLAN이다.
  • VXLAN
    • VLAN의 제한을 확장하기 위해 24bit의 VNI(VXLAN Network Identifier) (->약 1600만개)를 사용한다.
      • VLAN ID는 12bit => 4096개의 VLAN ID 가능
        • 대규모 데이터센터나 클라우드 환경에서는 테넌트 4096개는 부족함.
    • 네트워크 확장
      • VLAN은 물리적인 네트워크 장비와 직접 연결되어 설정
      • 가상화된 서버나 데이터 센터의 환경에서 서버가 물리적으로 이동할 때 네트워크 구성도 변경되어야 한다.
      • VLAN은 같은 브로드캐스트 도메인(같은 물리적 장치에 연결)끼리만 통신 가능하다.
        • VLAN은 물리적으로 가까운 곳만
      • VXLAN은 Layer3 위에 Layer2를 구현한 것이다. 
        • 라우터를 통해 물리적으로 떨어진 위치(다른 건물/ 다른 데이터 센터)에 있는 장치들도 동일한 VXLAN 네트워크 안에서 통신할 수 있게 된다.
    • 주요 구성 요소
      • VTEP(VXLAN Tunnel End Point)
        • VXLAN 터널의 종단점.
        • Layer2의 프레임을 캡슐화하거나, 캡슐화를 해제하는 역할을 한다.
        • Layer2 프레임을 가져와서 Layer3 패킷으로 캡슐화한 후 다른 VTEP으로 전송한다. 패킷을 받은 VTEP은 Layer3패킷의 캡슐화를 해제하고 Layer2로 전달한다.
        • 이렇게 VXLAN 터널을 통해 통신 장치들을 연결한다.
      • VNI
        • 24비트 크기. 약 1600만개의 고유한 VNI 값을 사용 가능하다. 
        • VLAN ID와 유사하게 테넌트를 식별하며 다른 VNI를 할당받은 VM들은 Layer2 환경에서는 서로 통신이 불가능하다.
        • 다수의 VM들이 같은 VNI를 할당 받으면 하나의 테넌트로 인식한다. 
  • Layer2 네트워크는 같은 브로드캐스트 도메인 또는 같은 스위치에 연결된 장치들로 한정. <- VLAN의 한계
  • Layer3 네트워크는 다른 네트워크에 속한 장치들이 IP 주소를 통해 통신 가능 <- VXLAN 확장의 장점

 

  • VXLAN ARP
    • ARP Flooding
      • 만약 VTEP 장비가 ARP 요청을 받은 후, 해당 MAC 주소나 IP를 알고 있지 않으면 ARP 요청 패킷을 네트워크 전체로 Flooding 해야 한다.
      • 과정
        • ARP 요청 발생
          • Host A가 Host B의 MAC 주소 찾기
        • VTEP#1의 Flooding
          • VTEP#1이 B의 MAC 주소를 몰라서 Flooding
        • Host B의 응답
          • B가 ARP 응답으로 MAC 주소를 담아 전송
        • VTEP#2의 정보 학습
          • VTEP#2는 ARP 응답을 수신하고, 다른 모든 VTEP들(네트워크에 연결된 다른 VTEP)에게도 전파하게됨. 다른 모든 VTEP들도 학습
            • 향후 같은 요청이 발생하면 Flooding을 억제
    • ARP Suppression(억제)
      • VTEP 장비가 ARP Request에 응답 => 불필요한 브로드 캐스트를 억제
      • 과정
        • ARP 요청 발생
        • VTEP#1에서 응답
          • VTEP#1이 Host B의 MAC을 알고 있다면 직접 ARP 응답을 생성하여 응답해줌. 
728x90