2024년 9월 18일 수요일

KVM 가상화 환경 구성

 커널 기반 가상 머신(KVM)은 물리적 Linux 시스템에 설치하여 가상 머신을 생성할 수 있는 소프트웨어 기능이다. 가상 머신은 물리적 시스템과 CPU 사이클, 네트워크 대역폭 및 메모리와 같은 리소스를 공유한다. KVM은 Linux에서 가상 머신에 대한 네이티브 지원을 제공하는 Linux 운영 체제 구성 요소이다. 


KVM 설치 사전 환경 구성

  • Lab Setup
Manufacturer: eSlim Korea
Operating System: CentOS Linux 7 (Core)
processor-version: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz
Kernel: Linux 3.10.0-1160.el7.x86_64


사전 환경 체크

1. Processor 가상화 지원 활성화 확인

$ lscpu | grep -i "virtualization\|svm"
Virtualization:        VT-x
$ egrep '(vmx|svm)' /proc/cpuinfo | wc -l
48


  • Intel 및 AMD 프로세서는 가상화 기술을 제공하기 위해 각각 Intel Virtualization Technology(Intel VT), AMD-V를 사용한다.
  • Intel VT의 경우 Default 설정 값이 비활성화 되어있어 BIOS 설정에서 활성화 해야 한다.
BIOS 진입 -> IntelRCSetup -> Processor Configuraion -> VMX Enabled
BIOS 진입 -> IntelRCSetup -> Intel VT for Directed I/O (VT-d) Enabled


  • AMD-V의 경우 Default 설정값이 활성화 되어있고 BIOS 설정에서 비활성화 또는 활성화 불가능하기 때문에 따로 설정할 필요가 없다.

2. 커널 버전 2.6.20 이상

  • Linux OS 의 커널 버전이 2.6.20 이상(커널 버전 2.6.20부터 리눅스 커널 자체에 내장됨)
$ hostnamectl
   Static hostname: localhost.localdomain
Transient hostname: localhost
         Icon name: computer-server
           Chassis: server
        Machine ID: 
           Boot ID: 
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1160.el7.x86_64
      Architecture: x86-64


3. 그래픽 환경 지원

  • 그래픽 환경 추가
-- 그래픽 환경(GNOME Desktop) 추가
$ yum groupinstall "X Window System" "GNOME Desktop"

-- 그래픽 환경 default 설정
$ systemctl set-default graphical.target

-- 그래픽 환경 지원 모드 확인
$ systemctl get-default
graphical.target
  • vnc 서버 구성 VDI 에 realvnc 등 설치 후, vncport(Default: 5901)로 접속하면 virt manager를 실행하여 GUI에서 관리할 수 있다.



KVM 설치, 설정


1. virt-manager 설치

$ yum install virt-install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-manager -y



2. 네트워크 설정

  • bridge 설정
-- 1. br0 생성
$ vi /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=10.0.10.235
PREFIX=24
GATEWAY=10.0.10.1
DNS1=8.8.8.8

-- 2. eth0 를 br0 bridge에 연결 : ifcfg-eth0 마지막줄에 BRIDGE 설정 추가 하고 ip는 삭제
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0

BRIDGE=br0

-- 3. 반영
$ service network restart

-- 4. 확인
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.2c600c8be5d0 no eth0
nerdctl10 8000.da23e99d353b no vethbe5ee88a
nerdctl11 8000.b2cd54f28bbd no vethb7164a2d
virbr0 8000.525400737e4b yes virbr0-nic
vnet
  • VM 포트를 호스트에서 액세스하는 방법 1: 방화벽 설정(권장)
-- 방화벽 활성화
$ systemctl start firewalld

-- guest vm 이 점유할 포트에 대한 방화벽 규칙 추가
$ firewall-cmd --zone=public --add-port=7000-9000/tcp --permanent

-- 반영
$ firewall-cmd --reload

-- 반영확인
$ firewall-cmd --list-all
  • VM 포트를 호스트에서 액세스하는 방법 2: iptables 설정  
-- 외부 -> 호스트:{목적지 포트} 로 들어오는 연결  허용
$ iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport {목적지 포트} -j ACCEPT
</pre>
* libvirt 데몬 실행
<pre>
$ systemctl enable --now libvirtd
$ systemctl enable --now virtlogd



Guest KVM 인스턴스 생성


1. os를 설치할 base 이미지 파일 생성

qemu-img create -f [format] [저장할 이미지파일] [용량]
ex: qemu-img create -f qcow2 centos.qcow2 100G



2. guest vm 인스턴스 생성

$ virt-install \
 --name centos \
 --ram 8192 \
 --vcpus=4\
 --check-cpu \
 --os-type=linux \
 --cdrom CentOS-7-x86_64-Minimal-2009.iso \
 --disk path=centos.qcow2,device=disk,format=qcow2,bus=virtio \
 --network bridge=virbr0 \
 --hvm \
 --vnc \
 --vncport=8196 \
 --vnclisten=0.0.0.0 \
 --boot hd \
 --noautoconsole



3. VDI 에 realvnc 등 설치 후, vncport(여기서는 8190)로 접속하여 OS 설치 진행



4. Serial Console 지원 설정

$ vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0"
$ grub2-mkconfig -o /boot/grub2/grub.cfg

-- kvm host server에서 console로 접속
$ virsh console <KVM 이미지>




5. 유동 IP (DHCP) 사용 설정

$ cd /etc/sysconfig/network-scripts/
$ mv ifcfg-ens32 ifcfg-eth0
$ vi ifcfg-eth0
BOOTPROTO=dhcp
DEVICE=eth0
ONBOOT=yes

$ service network restart

-- kvm host server에서 할당받은 dhcp ip 확인
$ virsh net-dhcp-leases default




6. ssh 설정

-- 호스트 -> 게스트 VM:22 포트로의 TCP 연결 허용
$ iptables -I FORWARD -m tcp -p tcp --dport 22 -j ACCEPT

-- DNAT 처리 (Port forward: {목적지 포트} --> 22)
$ iptables  -t nat  -A PREROUTING -p TCP  --dport {목적지 포트}  -j DNAT  --to {게스트 VM IP}:22

-- 접속 확인
$ ssh root@10.0.10.235:{목적지 포트}


댓글 없음:

댓글 쓰기

conntrack 세션을 이용한 iptables 최적화 및 관련 버그

  iptables 정책 적용 후에도 기존 세션이 남아 hit count를 업데이트 하고 있는 이슈를 맡게된 계기로 상태를 가진 세션 기반 방화벽처리에 대해 조사해보았다. 장애 대응 개요 1. iptables rule sequence 수정 후에도 수정...