본문 바로가기
CS(Computer Science)/소프트웨어공학

6. Network Virtualization

by 동욷 2023. 2. 6.

#network #virtualization #namespace #cgroups

Virtualization

OS = 하드웨어 virtualization S/W

  • Physical 하드웨어를 사용하는 데에서 생기는 제한을 인식하고 모든 하드웨어 자원을 virtualize 할 필요가 있다
  • OS는 driver를 사용하여 하드웨어를 구동하는데 driver는 S/W이다
  • driver가 실제로 하드웨어 자원을 접근하는 대신 두 단계로 나누어서
  • 하위층 driver는 그대로 하드웨어 자원에 접근하되 , OS에게 보여주고 서비스하는 상위층 driver는 하드웨어의 일부를 독립적으로 구분하고 떼어내거나 혹은 다수의 하드웨어처럼 사용할 수 있도록 virtualize

VM : virtualize machine

CPU, DRAM, Storage : 실제 하드웨어의 자원을 나누어 서로 영향 주지 않게 독립적으로 사용

-> virtualization이 간단

Network Interfaces : 하나의 하드웨어 인터페이스를 여러 개 있는 것처럼 제공하고 원래의 하드 웨어가 제공하는 해당 network 계층의 기능 외에 상위 계층의 기능도 제공 -> virtualization이 보다 복잡함

virtualization의 필요성 : 별도의 하드웨어 추가 없이 서로 완전히 독립적으로 사용할 수 있는 환경이 필요

VLAN(macvlan과 ipvlan) in Linux

  • Underlay network drivers : network virtualization의 기반을 제공
  • ethernet interface와 같은 하드웨어에 직접 접근하는 네트워크 가상화 드라이버

bridge => virtualized L2 switch

macvlan / ipvlan => MAC 계층 / IP 계층 virtualized driver

  • 하나의 physical network interface에 다수의 MAC 주소 배정
  • 하나의 MAC 주소에 다수의 IP 주소 배정

VXLAN , NVGRE

  • underlay network와 container/VM사이를 연결하는 overlay 가상화 드라이버

Namespaces and Cgroups in Linux

  • 기본적으로 OS는 투명하다
  • 일반 user가 시스템의 모든 자원, 다른 사용자, PID, 파일 시스템 마운트, 메모리 등등을 모두 다 볼 수 있음
  • 독립적으로 서로 구분된 시스템 view가 필요한 경우에는 부적절
  • Linux kernel 은 시스템 환경을 가상화 하는 다양한 lightweight tool들을 구성하는 cgroups 와 namespaces를 제공
  • Docker가 cgroups 과 namespaces 위에 구축한 대표적인 프레임워크
  • Namespaces는 process trees, network interfaces, user IDs, filesystem mounts 등 시스템 요소들을 경계를 긋고 제한하는 mechanism

Linux의 다양한 namespaces

  1. Mount namespaces : 프로세스가 보는 mount구조를 다른 프로세스 들과 분리
  2. UTS(unix time sharing) namespaces : 호스트와 도메인 이름을 다른 uts와 분리
  3. IPC namespaces : 서로 다른 프로세스 그룹 사이에서 IPC를 서로 분리
  4. PID namespaces : 임의의 프로세스가 자신이 init 프로세스처럼 PID1이 되는 process tree를 구성할 수 있도록 하여 분리
  5. Network namespaces : Network protocol services와 interfaces를 가상화 , 각 network namespace는 자신만의 가상화된 네트워크 장치로 구성
  6. User namespaces : 서로 다른 namespace에 속한 user들은 다른 namespace의 user들의 존재를 모름
  7. Cgroup namespaces : /proc/self/cgroup file의 내용을 가상화, 한 cgroup namespace에 속한 프로세스들은 자기 namespace 내의 자원에만 접근

Control groups (cgroups)

  • 각 프로세스 그룹에 OS 자원을 배정하고, 측정하는 커널 장치
  • Cgroups를 사용하여 CPU time, network, memory, block io 같은 자원을 배정
  • 각 cgroup마다 다른 권한을 부여 가능
  • namespaces에 cgroups를 적용하여 일단의 프로세스들 container로 구성하여 해당 프로세스들만의 virtual 시스템을 구현
  • Linux 에 구현된 namespace system calls : clone(2) , setns(2) , unshare(2)

728x90

'CS(Computer Science) > 소프트웨어공학' 카테고리의 다른 글

8. Ansible - Configuration Management  (0) 2023.02.06
7. KUBERNETES  (0) 2023.02.06
5. Docker3  (4) 2023.02.06
4. Docker2  (0) 2023.02.06
3. Docker  (0) 2023.02.06