팀실습)

  • web지사

- /tem 라는 경로로 간단한 웹 템플릿 제공

- /test 라는 경로로 3 tier 구조의 tomcat과 db의 연동확인(dbtest.jsp)

  • was지사

was(tomcat)

  • db지사

db nfs-server

각 지사는 물리적으로 떨어져있으며 팀원 1명당 한개의 지사를 관리한다. 2명인 경우 2개까지 가능. 각 지사는 내부에 1개의 사설네트워크를 가진다. tomcat의 라이브러리 파일을 제외한 웹템플릿 파일, jsp파일들의 원본은 db지사의 nfs-server에만 존재해야한다.

web vyos-web
ip) 10.10.3.10/24 eth0) 192.168.2.73/22
gw) 10.10.3.50/24 eth1) 10.10.3.50/24 
was db VPN for was VPN for db
eth0) 192.168.2.234/22 eth0) 192.168.3.45/22 head-esp tail-esp
eth1) 10.10.1.10/24 eth1) 10.10.2.10/24 head-ike tail-ike
.8080 .80 peer) 192.168.2.234 peer) 192.168.2.73
tomcat web template local prefix) 10.10.1.0 local prefix
Reverse Proxy NFS pre-shared-secret) hoo pre-shared-secret) seo

VyOS-web

  • eth0에 dhcp 할당
vyos@vyos# set int eth eth0 add dhcp
vyos@vyos# commit
  • eth1 어댑터 추가 후 web의 GW 추가
vyos@vyos# set int eth eth1 add 10.10.3.50/24
vyos@vyos# commit

  • web의 DNAT

  • Site-to-Site VPN
vyos@vyos# sh vpn
 ipsec {
     esp-group head-esp {
         compression disable
         lifetime 1800
         mode tunnel
         pfs enable
         proposal 1 {
             encryption aes256
             hash sha256
         }
     }
     esp-group tail-esp {
         compression disable
         lifetime 1800
         mode tunnel
         pfs enable
         proposal 1 {
             encryption aes256
             hash sha256
         }
     }
     ike-group head-ike {
         ikev2-reauth no
         key-exchange ikev1
         lifetime 1800
         proposal 1 {
             encryption aes256
             hash sha256
         }
     }
     ike-group tail-ike {
         ikev2-reauth no
         key-exchange ikev1
         lifetime 1800
         proposal 1 {
             encryption aes256
             hash sha256
         }
     }
     ipsec-interfaces {
         interface eth0
     }
     site-to-site {
         peer 192.168.2.234 {
             authentication {
                 mode pre-shared-secret
                 pre-shared-secret hoo
             }
             ike-group head-ike
             local-address 192.168.3.73
             tunnel 0 {
                 allow-nat-networks disable
                 esp-group head-esp
                 local {
                     prefix 10.10.3.0/24
                 }
                 remote {
                     prefix 10.10.1.0/24
                 }
             }
         }
         peer 192.168.3.45 {
             authentication {
                 mode pre-shared-secret
                 pre-shared-secret seo
             }
             ike-group tail-ike
             local-address 192.168.3.73
             tunnel 1 {
                 allow-nat-networks disable
                 esp-group tail-esp
                 local {
                     prefix 10.10.3.0/24
                 }
                 remote {
                     prefix 10.10.2.0/24
                 }
             }
         }
     }
 }

Web

  • /test 추가
[root@web ~]#  vi /etc/httpd/conf/httpd.conf
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<VirtualHost *:80> # 80번 포트로 들어오는 모든 ip에 대한 설정
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /test http://10.10.1.10:8080
    ProxyPassReverse /test http://10.10.1.10:8080
</VirtualHost>

 

  • /tem 추가
[root@web ~]# mkdir /var/www/html/tem
  • mount
[root@web ~]# mount -t nfs 10.10.2.10:/var/www/html /var/www/html/tem
  • mount 유지
[root@srv2 ~]# vi /etc/fstab
10.10.2.10:/var/www/html /remote nfs defaults 0 0


네트워크 - 서버(physical, Legacy)

클라우드

인터넷으로 필요한 컴퓨팅 자원을 돈내고 자유롭게 사용할 수 있음

가상화

  • 서버(Hypervisor) 가상화: VMware vSpere, workstation, KVM(Kernel-Based Virtual Machine)
  • 컨테이너(Container) 가상화: Docker, Kubernetes

→ App을 잘 작동시키기 위한 목적으로 사용

서버 가상화(Hypervisor)

1. 하이퍼바이저의 위치가 어디인지

  • Type 1: Host OS+Hypervisor(OS 자리), 자원 효율 측면에서 유리함
  • Type 2: Host OS, Hypervisor(프로그램 자리), 간단함

2. 어떻게 보내는지

    • 전(Full) 가상화: 모든 명령을 Dom0를 통해 처리
      = 모두개입 =효율↓ =Guest 스스로 가상임을 인지하지 못함 =Guest Os의 수정이 불필요
    • 반(Para) 가상화
      =자신이 VM임을 인지 =Guest OS의 수정이 필요 =Host OS와 호환되어야 함
      hypercall = Hypervisor를 거치지 않는 명령


KVM(Kernel-based Virtual Machine)

# 노트북 위에 vmware workstation이라는 일종의 하이퍼바이저가 설치되어있고, 이 프로그램을 통해 이미 kvm이라는 이름의 vm을 생성했다. 앞으로 이 kvm이라는 이름의 서버위에 가상화앱을 설치할 예정이다. 결론적으로 가상화 위에 가상화를 하는 느낌이지만, 우리는 kvm이라는 이름의 vm을 ‘물리서버’라고 가정하고, 간주하고 있다. 

# kernel = 하드웨어를 제어하기위한 다양한 모듈들의 모임.

# virtual machine manager가 마치 하이퍼바이저처럼 보이지만, kvm을 관리하기 위한 다양한 도구 중 하나일뿐이다.

KVM 구축

2x2core, 8GB, 50GB,  IP 211.183.3.50 /24

# GUI 환경으로 구성하기위해 minimal 말고 DVD로 설정

  • KVM 설정 수정

  • kvm서버에는 반드시 저게 활성화되어 있는지 확인

  • 방화벽과 셀리눅스를 끄고 레포 수정
[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# systemctl disable firewalld
...
  • 네트워크를 수정하는 방법
  1. 네트워크 스크립트 파일을 수정하는 방법(ifcfg파일)
  2. nmtui
  3. NetworkManager

→ 우리는 NetworkManager를 비활성화해야 한다.

  • NetworkManager 비활성화
[root@kvm ~]# systemctl stop NetworkManager
[root@kvm ~]# systemctl disable NetworkManager

# 네트워크 매니저 비활성화 전 후

인터페이스 이름 수정

  • NIC의 이름(ens32)을 eth0으로 수정

인터페이스 이름을 통일하고, br0라는 가상의 인터페이스를 만들어서 vmware-workstation 브릿지같은 대역을 만들고싶다.

# 부팅이 안될수도 있기때문에 스냅샷 생성

[root@kvm ~]# cd /etc/sysconfig/network-scripts/

# centos에선 장치(ens32,lo)에 해당하는 설정파일이 존재해야 한다.

  • ifcfg-eth0 파일 구성
[root@kvm network-scripts]# mv ifcfg-ens32 ifcfg-eth0
[root@kvm network-scripts]# vi ifcfg-eth0
      1 TYPE=Ethernet
      2 BOOTPROTO=none
      3 DEFROUTE=yes
      4 DEVICE=eth0
      5 NAME=eth0
      6 ONBOOT=yes
      7 IPADDR=211.183.3.50
      8 PREFIX=24
      9 GATEWAY=211.183.3.2
     10 DNS1=8.8.8.8
     11 NM_CONTROLLED=no

# NM_CONTROLLED=no , 네트워크매니저의 영향을 받지 않겠다.

  • 부트로더(grub)에서 장치 네이밍 방식 변경
[root@kvm network-scripts]# vi /etc/default/grub

  • 수정한 내용 반영
[root@kvm network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg

[root@kvm network-scripts]# init 0

# kvm이라는 하이퍼바이저가 호스트의 자원을 잘 끌어다 쓸 수 있게 도와주는 기술을 활성화
# eth0으로 이름 바꼈는지 확인

  • KVM 관련 패키지 설치
[root@kvm ~]# yum install -y qemu-kvm libvirt virt-install virt-manager virt-viewer

# KVM 관련 패키지 설치

# qemu = 하드웨어 자원을 에뮬레이션하여 가상화를 지원

# libvirt = kvm앱

# virt-install = VM 설치하는 기능

# virt-manager = VM관리자(프로그램)

# virt-viewer = 콘솔화면제공(vmware workstation에서 vm을 만들면 화면이 보이는것처럼)

[root@kvm ~]# vi /etc/libvirt/qemu.conf

set nu한 상태에서 'shift + ; + 이동하고싶은 line number'로 이동 가능

ex. shift;442

# root계정 및 그룹에 kvm을 제어할 수 있는 권한 부여

  • 변경사항 반영
[root@kvm ~]# systemctl restart libvirtd
[root@kvm ~]# systemctl enable libvirtd
  • Virtual machine manager 생김

  • VM을 생성해보기 위해 상대적으로 가벼운 vyos.iso파일 다운
wget https://ftp.yz.yamagata-u.ac.jp/pub/vyos/iso/release/1.1.7/vyos-1.1.7-amd64.iso
  • 설치할 운영체제 설치 파일(iso)의 위치

  • 이미지 이름 변경 및 이동
[root@kvm ~]# mv vyos-1.1.7-amd64.iso /var/lib/libvirt/images/vyos.iso
  • iso파일의 위치

# vmware workstation은 폴더를 따로 만들어서 그안에 다양한 파일들로 vm을 구성하는데, 그 다양한 파일들을 모아서 qcow2 파일로 압축 해놨다고 생각하면 좋다.

# kvm에서 vm을 생성하면서 대역을 NAT로 두면 그 vm은 192.168.122.0/24 대역의 아이피를 부여받을 것이다.

'AWS Cloud School 8기 > KVM' 카테고리의 다른 글

42일차) 2025-02-27(KVM)  (0) 2025.02.27
33일차) 2025-02-14(KVM+bridge, Migration)  (0) 2025.02.14