본문 바로가기

Cloud/MSA

[Kubevirt] Windows VM VNC(TigerVNC, VNC Viewer) 사용

virtvnc에서 vm 접속을 할 때, connected나 disconnected 상태로 검은 화면이 뜰 때가 있다. 이전 포스팅된 Xming의 경우에는 손이 많이 간다. Putty도 그렇고, 일반적으로 파일의 반입, 반출 문제가 되기 때문에 인터넷이 되지 않는 상황에선 가장 최악의 방법이 될 수도 있다는 것이다. CentOS나 Redhat 계열의 OS들은 최소 설치를 진행해도 socat 패키지가 기본적으로 설치가 되어 있는 것으로 보인다. 이러한 기본 설치된 패키지를 통해 vnc 접근을 하게 한다.

 

방법은 vm의 uid를 통해 kubevirt의 proxy기능을 socat을 통해 특정 포트를 오픈시켜 접근을 하는 것이다. 기존 Xming의 경우 10분의 reconnect를 하기 위한 시간을 기다려야 했다면, 즉각적인 접근이 가능하다. 

 


준비

socket : debian.pkgs.org/10/debian-main-amd64/socat_1.7.3.2-2_amd64.deb.html

 

socat_1.7.3.2-2_amd64.deb Debian 10 Download

/usr/bin/filan /usr/bin/procan /usr/bin/socat /usr/share/doc-base/socat /usr/share/doc/socat/BUGREPORTS /usr/share/doc/socat/DEVELOPMENT.gz /usr/share/doc/socat/EXAMPLES.gz /usr/share/doc/socat/FAQ /usr/share/doc/socat/NEWS.Debian.gz /usr/share/doc/socat/P

debian.pkgs.org

TigerVNC : tigervnc.org/

 

TigerVNC

TigerVNC is a high-performance, platform-neutral implementation of VNC (Virtual Network Computing), a client/server application that allows users to launch and interact with graphical applications on remote machines. TigerVNC provides the levels of perform

tigervnc.org

VNC Viewer : www.realvnc.com/en/connect/download/viewer/

 

Download VNC Viewer | VNC® Connect

 

www.realvnc.com

1. VM의 UID 조회 

vmi명령어 통해 내가 조회 하고자 하는 vm의 namespace 및 이름을 확인한다.

$ kubectl get vmi -A

 

UID가 여러개(2~3개) 나오게 되는데, 2개일 경우 하위 UID를 선택하고 3개일 경우 2번째 UID를 선택하면 된다.

$ kubectl get vmi $vm_name $vm_namespace -o json | grep uid

 

2. VM이 Running중인 노드 접속

vmi 명령어를 통해 확인했던 NODENAME으로 해당 노드로 이동한다.

$ ssh $nodename

 

3. VM의 PID 조회 출력

vm이 실행되고 있는 프로세스의 PID 값을 확인한다.

vmi_uid : 1번 조회했던 값을 집어넣으면 된다.

$ ps -ef | grep $vmi_uid | grep virt-vnc  

 

ex) 조회 

실행 : ps -ef | grep 1740aa7b-f481-456c-8524-c1ce333424443 | grep virt-vnc

결과 : 107      24043 23413  3 Jan26 ?        01:56:21 /usr/bin/qemu-system-x86_64 ~... 생략

Bold체로 되어 있는 값이 PID값이다. 

 

4. qemu가 unix 소켓을 삭제하지 않도록 해당 디렉터리의 권한을 변경

$ cd /proc/$PID/root/var/run/kubevirt-private/

$ chmod 0444 $VMI_UID

 

5. vnc 소켓을 vm IP의 포트를 통해 노출

RANDOM_PORT : 외부 접근하고자 하는 포트 입력 ex. 3333

$ socat TCP-LISTEN:$RANDOM_PORT,fork UNIX:/proc/$PID/root/var/run/kubevirt-private/$VMI_UID/virt-vnc &

 

6. Client를 통한 접속(vnc Viewer 혹은  Tiger VNC)

NODEPORT_IP : VM이 실행되고 있는 서버 IP

RANDOM_PORT : 외부 접근하고자 하는 포트 입력 ex. 3333

$NODEPORT_IP:$RANDOM_PORT