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:{목적지 포트}


댓글 없음:

댓글 쓰기

vrrp 장비 failover 시 sync 패킷 전송 중 panic 발생 오류

  vrrp 구성 (Active-Standby or Active-Active) 시 UTM 장비 failover 시 sync 패킷 전송 중 panic 발생하는 문제가 있었다. 외부 고객사에서 발생한 문제라 내부 재현은 불가능하여 코드 분석 레벨에서 se...