[KVM] virt-builder, SSH

gununoo·2022년 8월 11일
1

KVM

목록 보기
4/4
post-thumbnail

클라우드 컴퓨팅

클라우드 컴퓨팅의 시작

  • 자원 재판매

최초의 컴퓨터(PC) -> inter communication -> 네트워크 -> 서버/클라이언트
-> 인터넷(공중망)의 도래 -> 서버를 인터넷에 공개하기 위해서는? (안정적인 전원 공급, 공간, 관리 인원, 공인 주소) -> 회사 내에서 서버를 안정적으로 운영하는 것이 어려워지면서 서버를 데이터 센터에 보관(관리를 위임)
-> 데이터 센터 서버 입장 -> unix 계열에서만 제공되던 가상화 기술이 범용 CPU에서도 가상화(x86)가 지원되기 시작했다 -> 공간 활용, 전원 -> 미리 자원을 준비해 둔다.

재판매 하는 자원(NIST에서 정의)

  • IaaS(Infrastructure as a Service): server(컴퓨터), 방화벽, 스위치, 라우터
  • PaaS(Platform as a Service): 개발 환경을 제공
  • SaaS(Software as a Service): photoshop

클라우드는 가상화와 함께 구성해야 효과적이다.
애플리케이션의 24시간 온라인 유지 가능
동작 중인 상태에서 서버의 지역 간 이동이 가능하다.
on-demand 서비스 즉, 사용자가 요청하는 즉시(최단 시간 내에) 서비스 제공

하이퍼바이저

가상화를 하는 도구? -> 하이퍼바이저

하이퍼바이저는 물리 자원에 접근하여 CPU, RAM, NIC 등을 추상화하고 이를 결합하여 온전한 형태의 서버가 되도록 가상화를 제공한다.

type 1: 하이퍼바이저가 물리 자원 바로 위에 배치된다. (BareMetal Hypervisor)
KVM, VMware ESXi, XenServer, Hyper-V
type 2: 하이퍼바이저가 호스트OS 위에 배치된다. (Host based Hypervisor)
VMware workstation, virtualbox, virtualpc

클라우드 환경을 구축하기 위한 노드

  • control: 사용자 인증/인가, 모니터링, 사용자가 신청한 작업 지시를 받아 compute로 전달(ex. 서버 1대, cpu 1, ram 1GB, disk 20GB)
  • compute: 하이퍼바이저 -> control로부터 전달 받은 작업을 수행
  • network: 가상 머신들이 배치, 외부 사용자들에게 연결. DHCP, NAT, 방화벽 등의 서비스
  • storage: compute의 하이퍼바이저가 요청/작업 지사한 디스크 볼륨 공간 제공

  1. iso 파일을 이용한 설치
    볼륨(저장 공간)을 먼저 생성해 두고 이 볼륨에 iso 파일을 이용하여 설치를 진행한다.
--disk /remote/centos1.qcow2 \
--location /remote/centos1.iso

부팅 시 설치 마법사가 시작된다.
이 방법은 동시에 다수의 가상 머신을 생성해야 하고 즉시 제공해야 하는 클라우드 환경에는 적합하지 않다. -> 시간이 너무 오래 걸린다.

  1. 클라우드 이미지를 이용하는 방법
    클라우드 이미지란 이미 os가 설치되어 었는 볼륨을 이미지화 한 것. -> 복사하여 동시에 여러 인스턴스(VM)을 배포할 수 있다.
    위의 1번 볼륨을 이용하여 다른 가상 머신을 생성하게 되면 보안상 문제가 발생할 수 있다.
    클라우드 이미지에는 루트 패스워드 등이 미리 지정되어 있어서는 안 된다. 필요할 때 root 패스워드를 설정해서 사용하는 방법이 있다. ->
virt-customize \
-a centos1.qcow2 \
--root-password password:test123 

하지만 볼륨 사이즈는 조정할 수 없다.
클라우드 이미지의 볼륨 크기를 조정하는 것은 virt-resize 를 통해 가능하다.

virt-builder를 이용하면 기본 이미지에 대한 편집과 볼륨 조정이 가능하다.
step 1. 클라우드 상에 있는 기본 템플릿 이미지를 다운로드 (centos-7.0.xz -> 300MB)
step 2. 압축된 파일을 압축 해제한다. (300MB -> 800MB)
step 3. virt-resize를 이용하여 볼륨의 크기를 확장한다. -> 20GB
step 4. disk open! 볼륨 수정 가능
패키지 설치, 특정 파일 업로드, 인스턴스로 부팅 시 실행할 명령 등
step 5. 최종적으로 수정된 볼륨이 생성된다.

virt-install을 이용하여 xml을 만든다.
이 때 위에서 만든 볼륨의 위치를 지정해주어야 한다.


실습

생성된 인스턴스는 211.183.3.222를 사용해야 한다. 생성된 인스턴스에는 퍼블릭키를 미리 저장해두고 외부에서 사설키를 이용하여 접속할 수 있어야 한다.
예) 현재 kvm1에 보관되어 있는 공개키를 인스턴스에 추가하고 윈도우에 있는 개인키로 접속할 예정이다.

계획
virt-install 시 ovs에 배치되고 model은 virtio로 하면 인스턴스의 인터페이스 이름이 eth0가 된다. ifcfg-eth0 파일을 미리 만들어두고 이 안에 211.183.3.222를 기록해둔 뒤 이를 인스턴스에 upload한다.
또한 로컬에 있는 퍼블릭키를 인스턴스의 /root/.ssh/authorized_keys에 붙여 넣는다.

step 1) 업로드할 eth0 인터페이스 파일 생성

[root@kvm1]# vi ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
DEVICE=eth0
NAME=eth0
ONBOOT=yes
IPADDR=211.183.3.222
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8

step 2) virt-builder

[root@kvm1 ~]# virt-builder centos-7.0 \
> --format qcow2 \
> --size 20G \
> -o /remote/centos001.qcow2 \
> --upload ifcfg-eth0:/etc/sysconfig/network-scripts/ifcfg-eth0 \
> --run-command 'ssh-keygen -q -f /root/.ssh/id_rsa -N ""' \
> --upload /root/.ssh/authorized_keys:/root/.ssh/authorized_keys \
> --firstboot-command 'ifdown eth0 ; ifup eth0' \
> --selinux-relabel

[ 15.8] Downloading: http://builder.libguestfs.org/centos-7.0.xz
[ 16.6] Planning how to build this image
[ 16.6] Uncompressing
[ 30.6] Resizing (using virt-resize) to expand the disk to 20.0G
[ 79.0] Opening the new disk
[ 87.8] Setting a random seed
[ 87.9] Setting the machine ID in /etc/machine-id
[ 87.9] Uploading: ifcfg-eth0 to /etc/sysconfig/network-scripts/ifcfg-eth0
[ 87.9] Running: ssh-keygen -q -f /root/.ssh/id_rsa -N ""
[ 88.2] Uploading: /root/.ssh/authorized_keys to /root/.ssh/authorized_keys
[ 88.2] Installing firstboot command: ifdown eth0 ; ifup eth0
[ 88.2] Setting passwords
virt-builder: Setting random password of root to bfRGboXKNtFD4Idp
[ 90.2] SELinux relabelling
[ 100.5] Finishing off
Output file: /remote/centos001.qcow2
Output size: 20.0G
Output format: qcow2
Total usable space: 18.5G
Free space: 17.8G (95%)

로컬에 있는 public-key(/root/.ssh/authorized_keys)를 인스턴스에(/root/.ssh/authorized_keys) 넣는다.

step 3) virt-install

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

WARNING No operating system detected, VM performance may suffer. Specify an OS with --os-variant for
optimal results.
Starting install...
Domain creation completed.

step 4) 호스트 정보 추가

ssh_config 수정

[root@kvm1 ~]# vi /etc/ssh/ssh_config
Host 211.183.3.222
	User root
	PreferredAuthentications publickey
	IdentityFile /root/.ssh/id_rsa

연결할 서버의 정보를 known_host에 먼저 저장해놓는다

[root@kvm1]# ssh-keyscan 211.183.3.222 >> /root/.ssh/known_hosts
# 211.183.3.222:22 SSH-2.0-OpenSSH_6.4
# 211.183.3.222:22 SSH-2.0-OpenSSH_6.4
# 211.183.3.222:22 SSH-2.0-OpenSSH_6.4

step 5) ssh 접속

[root@kvm1 ~]# ssh 211.183.3.222
The authenticity of host '211.183.3.222 (211.183.3.222)' can't be established.
ECDSA key fingerprint is SHA256:2Xifb6QxNGAI3ON61CRLS0zXCqU+o6Tg8RtX39r2aNo.
ECDSA key fingerprint is MD5:01:59:67:61:8b:ec:6f:c7:92:fb:0a:94:bc:2f:71:0c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '211.183.3.222' (ECDSA) to the list of known hosts.
Last login: Wed Aug 10 22:16:43 2022
[root@localhost ~]#
[root@localhost ~]# ip a | grep 222
inet 211.183.3.222/24 brd 211.183.3.255 scope global eth0

ip가 .222로 할당되었음

[KVM1]

[root@kvm1 ~]# ping 211.183.3.222
PING 211.183.3.222 (211.183.3.222) 56(84) bytes of data.
64 bytes from 211.183.3.222: icmp_seq=1 ttl=64 time=0.728 ms
64 bytes from 211.183.3.222: icmp_seq=2 ttl=64 time=0.661 ms
64 bytes from 211.183.3.222: icmp_seq=3 ttl=64 time=0.558 ms

ip가 .222로 할당되어서 정상적으로 통신 가능

profile
take a look

0개의 댓글