[클라우드 With리눅스/KVM 실습(2)]

SooYeon Yeon·2022년 8월 30일

클라우드 With리눅스

목록 보기
39/39

linux bridge → openvSwitch

(L2 only)

ovs → vlan, overlay network, SDN(Software Defined Network)

ACL,NAT,QoS

mount 정보 확인

  1. kvm1/kvm2에서 mount
mount | grep /remote
cat /etc/fstab

여기에 아래의 내용이 포함되어 있어야함
storage:/cloud /remote nfs defaults 0 0

만약 없다면 mount -t nfs storage:/cloud /remote (일회성)

  1. 가상머신 정보 확인
virsh list --all
  • xml 파일을 cat으로 열어보는 것과 동일
virsh dumpxml centos1
  • xml 파일을 vi로 연결(수정 가능)
virsh edit centos1
[root@kvm1 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c29d77e7d	no		eth0
virbr1		8000.52540074a21c	yes		virbr1-nic

가상머신을 이용한 실습 → 클라우드에서는 적절하지 않음 → 사용자가 인스턴스를 생성 요청 시 디스크(보륨) 사이즈 지정 할 수 있어야하고 각 인스턴스 별로 별도의 퍼블릭 키를 추가할 수 있어야 함 → virt-customize , virt-builder를 이용한 인스턴스 배포

OVS(OpenvSwitch)

  • 일반 리눅스 브릿지는 단순한 L2기능만을 제공한다
  • OVS는 vlan, flow(모니터링), ACL,NAT,QoS, SDN을 제공한다.
  • ovs에서 제공하는 가장 중요한 기능 중에 하나는 gre, vxlan과 같은 터널링 기술이다.
  • 물리적으로 떨어져있는 가상머신(인스턴스)들을 마치 하나의 스위치에 두고 통신시키는 것과 같은 오버레이 기술을 제공할 수 있다.

SDN(Software Defined Network)

  • 일반적인 L3 스위치의 구조
  • SDN은 L3 스위치에서 컨트롤 플레인을 제거하고 전체 컨트롤 플레인을 컨트롤하기 위한 컨트롤러로 연결한다. 이 컨트롤러에서 openflow를 이용하여 정책(rule)을 각각의 데이터플레인으로 전송한다. SDN은 NFV(Network Functions Virtualization)와 함께 사용해야 효과가 극대화 된다.

OVS 설치

  1. ovs 설치 (kvm1,kvm2)
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
  1. 기존 linux bridge 기반의 br0을 ovs기반의 vswitch01로 변경하기 (kvm1,kvm2)
[root@kvm1 remote]# cd /etc/sysconfig/network-scripts/
[root@kvm1 network-scripts]# mv ifcfg-br0 ifcfg-vswitch01
[root@kvm1 network-scripts]# vi ifcfg-vswitch01

TYPE=OVSBridge
BOOTPROTO=none
NAME=vswitch01
DEVICE=vswitch01
DEVICETYPE=ovs
ONBOOT=yes
IPADDR=211.183.3.101
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8

[root@kvm1 network-scripts]# vi ifcfg-eth0

TYPE=OVSPort
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
DEVICETYPE=ovs
ONBOOT=yes
OVS_BRIDGE=vswitch01

재부팅 후 확인

  1. ifconfig → vswitch01에 ip 주소가 할당되어 있다.

  2. ovs-vsctl show

  3. 내부에서 사설 용으로 사용하는 ovs 스위치 생성하기

ovs-vsctl add-br vswitch02
  1. 인스턴스 생성

kvm1

virt-install --name centos01 --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

kvm2

virt-install --name centos02 --vcpus 1 --ram 1024 --disk /remote/centos02.qcow2  --import --network bridge:vswitch01,model=virtio,virtualport_type=openvswitch --network bridge:vswitch02,model=virtio,virtualport_type=openvswitch,target=centos02_port1 --graphics vnc --noautoconsole
  1. centos01/centos02에서 eth1에 IP주소 입력하기

예) centos01에서

cd /etc/sysconfig/network-scripts

cp ifcfg-ens3 ifcfg-eth1

vi ifcfg-eth1

TYPE=Ethernet

NAME=eth1

DEVICE=eth1

IPADDR=172.16.123.101

PREFIX=24

ONBOOT=yes

이후

ifdown eth1

ifup eth1

ip a 하면 eth1에 ip 주소가 보여야함

  1. overlay 구성하기

vswitch02 ←(gre12)——(gre21)→ vswitch02

[root@kvm1 ~]# ovs-vsctl add-port vswitch02 gre12 -- set interface gre12 type=gre options:remote_ip=211.183.3.102

kvm2

[root@kvm1 ~]# ovs-vsctl add-port vswitch02 gre21 -- set interface gre21 type=gre options:remote_ip=211.183.3.101

확인

centos01: ping 172.16.123.102

  1. vlan 할당하기

kvm1

ovs-vsctl set port centos01_port1 tag=123

kvm2

ovs-vsctl set port centos02_port1 tag=123

tag : 엑세스 포트 지정

trunk : 트렁크 포트 지정

virt-customize와 virt-builder를 이용한 인스턴스 배포

virt-customize -a Cent…qcow2 —root-password password:test123

인스턴스 또는 VM을 만드는 방법

  1. iso 파일을 이용한 설치
  2. 클라우드 환경에서는 사용자별 필요한 볼륨의 사이즈, computing 자원 뿐만 아니라 필요한 key-pair 등을 설치시 즉시 제공할 수 있어야 한다.

볼륨 사이즈 지정 + 웹서버 배포 + index.html 배포

virt-customize는 볼륨 사이즈에 대한 조절은 없다.

resize의 기능이 포함되어있어 원하는 크기의 볼륨지정 및 패스워드, 패키지 설치 등이 가능하다.

[root@kvm1 ~]# virt-builder centos-7.0 --size 20G --format qcow2 -o /remote/test1.qcow2 --root-password password:test123 --install httpd,net-tools --selinux-relabel

virt-builder : 인터넷에 있는 클라우드 이미지 다운로드 하기

centos7.0 클라우드 이미지

virt-resize 기능이 포함되어 있어 클라우드 이미지(볼륨)사이즈를 확장할 수 있다.

—size 20G : 클라우드용 볼륨 이미지를 20GB로 확장시킴 → 볼륨의 이름은 test1.qcow2

—root-password password:test123 : 볼륨 내에 설치되어 있는 centos의 루트패스워드를 test123으로 설정

—install : 볼륨 내에 미리 필요한 패키지를 설치해두겠다.

— install httpd,net-tools ⇒ (yum -y install httpd net-tools)

[root@kvm1 ~]# virt-install --name test1 --vcpus 1 --ram 1024 --network bridge:vswitch01,model=virtio,virtualport_type=openvswitch --disk /remote/test1.qcow2 --import --graphics none

위의 명령어를 실행하면 자동으로 해당 인스턴스로 들어감.

빠져나오고싶다면 Ctrl + ]

다시 인스턴스로 접속하고 싶다면 virsh console test1

virt-builder os-version -o /remote/centos1.qcow2 --size 20G --format qcow2 --install httpd,nfs-utils,vim --upload index.html:/var/www/html/index.html

https://libguestfs.org/virt-builder.1.html

—firstboot-install : virt-install을 통해 인스턴스로 배포될 때 처음 부팅하면서 설치할 패키지

—install : 볼륨 자체에 필요한 패키지를 설치하는 것

—run 스크립트파일 : 호스트에 스크립트를 작성해두고 이 내용을 볼륨에 적용하는 것, 볼륨 내에 여러 명령어를 적용시키고자 할 때

—run-command ‘명령어’ : 한개정도의 간단한 명령어를 볼륨에 적용하고자 하는 경우

—firstboot-command ‘명령어’ : 인스턴스로 처음 부팅될 때 인스턴스 내에서 실행할 명령어

—mkdir DIR : 볼륨 내에 미리 필요한 디렉토리를 생성해두고 싶을 때

—selinux-relabel : selinux 활성화

Quiz. 나는 생성된 이미지가 인스턴스화 될 때 자동으로 웹서비스가 실행되도록 하고싶다.

—install httpd —run-command ‘systemctl enable httpd’

—install httpd —firstboot-command ‘systemctl start httpd’

Quiz

  1. 로컬(kvm1 또는 kvm2)에 index.html파일을 간단히 만드세요
  2. test2.qcow2를 생성하되, 20GB 이고 미리 httpd를 설치해두세요
  3. 로컬에 있는 index.html 파일을 웹서버의 기본 홈 디렉토리로 이동시키세요
  4. 웹서버는 인스턴스로 실행과 동시에 동작해야하며 외부에서 해당 IP 주소로 접속했을 때 웹페이지가 보여야 한다.
  5. 루트의 패스워드는 test123
echo "TEST PAGE" > index.html
virt-builder centos-7.0 --size 20G --format qcow2 -o /remote/test2.qcow2 --root-password password:test123 --install httpd --selinux-relabel --upload index.html:/var/www/html/index.html --run-command 'systemctl enable httpd' --run-command 'systemctl disable firewalld'
[root@kvm1 ~]# virt-install --name test2 --vcpus 1 --ram 1024 --network bridge:vswitch01,model=virtio,virtualport_type=openvswitch --disk /remote/test2.qcow2 --import --graphics vnc --noautoconsole

0개의 댓글