0부터 시작하는 KVM 공부 - [ OpenVSwitch ] OVS 와 SDN 이란 & 설치 & 생성 & 네트워크 설정

Jaehong Lee·2022년 8월 10일
2
post-thumbnail

0. Kernel 업데이트 하기

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml
  • 위 코드를 통해 Kernel 을 5 버전으로 업데이트 하자. 3 버전을 사용하면 OVS 사용시 error 가 발생할 수 있다
  • 업데이트 후 Kernel 5 버전으로 부팅해주자
  • uname -nr & uname -a 로 Kernel 정보를 확인할 수 있다

1. OVS ( OpenVSwitch ) 란

  • 일반 리눅스 브릿지는 단순한 L2 기능만을 제공한다. 허나, OVS 는 Vlan , 모니터링을 위한 flow , ACL , NAT , QoS , SDN ( OPENFLOW ) 을 제공한다
    • QoS 는 서비스의 품질을 보장하는 기술이다

터널링 기술

  • OVS 에서 제공하는 가장 중요한 기능중에 하나는 GRE , Vxlan 과 같은 터널링 기술 이다. 이를 통해 물리적으로 떨어져 있는 가상 머신 ( 인스턴스 ) 들을 마치 하나의 스위치에 두고 통신시키는 것과 같은 OverLay 기술을 제공할 수 있다

제공 protocol

  • OpenVSwitch 는 software based switch 로 아래와 같은 Protocol 을 제공한다
    • Netflow , sFlow , CLI , 여러 물리 서버를 가로지르는 분배 Switch 기능

모니터링 기술

  • span , rspan ( remote span ) 을 이용하면, 트래픽을 복사하여 모니터링 도구에 보내진다. 이 복사된 트래픽을 통해 모니터링 도구에 그래프로 표시되어 모니터링이 가능하다

2. SDN ( Software Defined Network ) 이란

  • 일반적인 L3 스위치 구조는 아래와 같다

    • DATA Plane 은 데이터 처리부이며 인터페이스가 존재한다. 패킷이 들어오면, DATA Plane 에서 L2 주소를 처리한다. 즉, MAC Table ( CAM Table ) 을 이용하여 MAC 주소의 BIT 를 매핑하여 처리한다. 만약, 여기서 MAC 주소가 처리된다면, L3 부분으로 넘어갈 필요가 없다. 이는 같은 네트워크일때 해당된다
    • DATA Plane 에서 처리 못하는 패킷은 CONTROL Plane 으로 넘어간다. 여기서 TCAM Table ( 라우팅 , QoS , ACL , NAT ) 를 이용해서 처리한다. 이를 통해 다른 네트워크에서 온 패킷을 처리할 수 있다. 처리가 되면 다시 DATA Plane 로 보내서, 외부로 나가게 한다
  • 허나, 위와 같이 구성되면, 다수의 장비가 있을 때, 장비들에 대해 각각 설정을 해줘서 일관성에 대한 위험과 불편함이 있다

  • 따라서, 위와 같이 논리적 혹은 물리적 분리를 하여, 각 장비에는 DATA Plane 만을 놓고, CONTROL Plane 을 한 곳에 모을 수 있다. 이 모은 것을 Controller 에 연결하여 Controller 를 통해 Program 을 이용한 명령으로 연결된 모든 Network Device 를 제어할 수 있다. 아래와 같은 구조이다

  • 기존에는 각 통신 장비를 만드는 업체들은 폐쇄형 이기에 위와 같이 할 수 없었다. 허나, 오픈 소스로 만들어진 통신 장비들이 등장하면서 위와 같이 설정할 수 있게 되었다

  • SDN Controller 는 이렇게 Program 을 통한 명령을 OpenFlow Protocol 를 통해 Network Device 의 Data Plane 을 제어할 수 있다

  • SDN 은 L3 Switch 에서 Control Plane 을 제거하고, 전체 Control Plane 을 컨트롤 하기 위한 Controller 로 연결한다. 이 Controller 에서 Openflow 를 이용하여 정책 ( rule ) 을 각각의 Data Plane 으로 전송한다. SDN 은 NFV ( Network Functions Virtualization ) 와 함께 사용해야 성능이 극대화 된다

Openflow Protocol

  • Openflow 는 Control Plane 과 Data Plane 을 분리하고, 이를 연결시에 사용하는 인터페이스 이다. 이를 통해 소프트웨어로 이러한 Plane 을 구현할 수 있다

  • 일반적으로 L2 Switch 에 Openflow Protocl 을 펌웨어로 넣어 Openflow Switch 를 구성하고, Openflow Controller 는 소프트웨어로 구현한다

  • Openflow 는 Flow table 을 사용하는데, 여기에는 Port , 출발지 / 목적지 정보가 저장된 RULE 부분과, 특정 port 로 패킷을 전달 혹은 Drop / 정의된 경로에 따라 패킷을 전달하는 등의 정보가 들어간 Action 부분과, 카운터 정보를 통해 제어 정보가 등록된 시간이 저장된 Stats 부분으로 나뉘어진다

3. XML 파일 삭제 & Disk 파일 세팅

  • kvm 1 에서 가상 머신의 xml 파일을 삭제하자
  • kvm 2 도 마찬가지다
  • remote 디렉터리에 들어가서 Disk 파일이 남아있는지 확인하자. 확인 후 하나만 남겨두고 삭제하자
  • qcow2 파일의 이름을 변경하고, 복사해주자

4. OpenVSwitch 설치

yum -y install epel-release https://www.rdoproject.org/repos/rdo-release.rpm
yum -y install openvswitch bridge-utils
yum update -y
systemctl start openvswitch && systemctl enable openvswitch

위 코드를 통해 kvm 1 과 kvm 2 에 OVS 를 설치하고 , 실행하자

  • 설치 및 실행이 잘 되었다

5. vswitch01 & eth 0 설정

  • 이제 기존에 Bridge 기반 br0 를 OVS 기반 vswitch01 로 변경하자

  • 먼저, br0 의 이름을 vswitch01 로 변경하자

  • 해당 파일을 편집기로 열어서 위와 같이 설정하자

  • eth 0 도 설정해줘야 한다. 편집기로 열어주자

  • 위와 같이 eth 0 을 설정하자

  • 설정후 kvm 을 재부팅 하자

  • kvm 2 에도 동일하게 설정해주자

6. OVS 정보 확인

  • 재부팅 후 ifconfig 로 위의 내용을 확인하자
  • ovs vswitch 정보도 확인하자
    • ovs 기반의 vswitch01 이라는 스위치가 있는 것을 확인 가능 하다
    • 이 스위치에는 두 개의 Port 가 있는데, 하나는 인터넷과 연결된 eth 0 이고, internal 타입의 vswitch01 이라는 스위치와 동일한 이름의 Port 가 존재하는데, 이는 관리용 이다. 이 Port 는 자동 생성되며, 이를 통해 내부에 명령을 전달할 수 있다

7. 내부에서 사용할 OVS Switch 생성

  • 우리는 위와 같이 또 하나의 vswitch 를 추가하여 터널링이 가능하게 할 것 이다
  • OVS Switch 를 추가하자. 이름은 vswitch02 이다. kvm 1 과 kvm 2 에 각각 추가하자
  • 우리는 이제 인스턴스를 생성해서 두 vswitch 에 연결하고, 터널링이 가능하게 해야 한다

8. 인스턴스 생성하기

  • 우리는 인스턴스 생성시 interface 를 두 개에 연결해야 한다
  • 위와 같이 생성하자. Disk 가 이미 생성되있으므로 import 이다. 만약, 생성되있지 않으면 location 을 통해 iso 파일을 입력 해야 한다
  • target 은 vswitch02 에 연결될 vswitch02의 Port 의 이름을 지정한 것 이다. 여기에 vlan 을 할당할 것 이다
  • 우리는 OVS Switch 를 사용하므로 virtualport_type 을 openswitch 로 설정 하는 것을 추가 해야 한다
virt-install --name centos1 --vcpus 1 --ram 1024 --disk /remote/centos01.qcow2 --import --network bridge:vswitch01,model=virtio,virtualport_type=openvswitch \
> --network bridge:vswitch02,model=virtio,virtualport_type=openvswitch,target=centos01_port1 \
> --graphics vnc --noautoconsole
  • 인스턴스 생성 코드는 위와 같다

9. vswitch02 - eth1 네트워크 설정

  • 우리는 아직 vswitch02 에 대한 네트워크 설정을 안했다. 우리는 위와 같이 네트워크를 설정할 것 이다

생성한 가상 머신에 들어가자

  • cd /etc/sysconfig/network-scripts 에 들어가자
  • cp ifcfg-ens3 ifcfg-eth1 으로 복사해주고, 복사한 파일을 편집기로 열고 들어가서 아래와 같이 설정해주자. 위에 사진에서는 오타이다. eth0 이 아닌 eth1 로 해줘야 한다
TYPE=Ethernet
NAME=eth1
DEVICE=eth1
IPADDR=172.16.123.101
PREFIX=24
ONBOOT=yes

  • 설정해주었다
  • centos2 는 .102 로 설정하자
  • 설정 후 ifdown eth1 & ifup eth1 로 Interface 를 재실행해주고 ip a 를 통해 eth 1 에 Ip 주소가 보이는지 확인하자
  • centos2 에서도 확인하자

10. 실습 구조

  • 현재 위와 같은 구조를 구성했다. 이때, 아직 터널링을 구현하지 않았으므로 172.16.123.101 과 .102 가 통신을 할 수 없다

  • 우리는 다음 장에서 터널링을 구현하여 이 사설 구간 끼리 통신이 가능하게 할 것 이다

profile
멋진 엔지니어가 될 때까지

0개의 댓글