8.7. 가상 머신 콘솔에 액세스

OpenShift Virtualization에서는 다양한 제품 작업을 수행할 수 있도록 여러 개의 가상 머신 콘솔을 제공합니다. OpenShift Container Platform 웹 콘솔과 CLI 명령을 사용하여 이러한 콘솔에 액세스할 수 있습니다.

8.7.1. OpenShift Container Platform 웹 콘솔에서 가상 머신 콘솔에 액세스

OpenShift Container Platform 웹 콘솔에서 직렬 콘솔 또는 VNC 콘솔을 사용하여 가상 머신에 연결할 수 있습니다.

OpenShift Container Platform 웹 콘솔에서 RDP(원격 데스크탑 프로토콜)를 사용하는 데스크탑 뷰어 콘솔을 사용하여 Windows 가상 머신에 연결할 수 있습니다.

8.7.1.1. 직렬 콘솔 연결

웹 콘솔의 가상 머신 개요 화면에 있는 콘솔 탭에서 실행 중인 가상 머신 의 직렬 콘솔에 연결합니다.

절차

  1. OpenShift Virtualization 콘솔의 사이드 메뉴에서 워크로드가상화를 클릭합니다.
  2. 가상 머신 탭을 클릭합니다.
  3. 가상 머신을 선택하여 가상 머신 개요 페이지를 엽니다.
  4. 콘솔을 클릭합니다. 기본적으로 VNC 콘솔이 열립니다.
  5. 전환 전에 연결 끊기 를 선택하여 한 번에 하나의 콘솔 세션만 열려 있는지 확인합니다. 그렇지 않으면 VNC 콘솔 세션이 백그라운드에서 활성 상태로 유지됩니다.
  6. VNC 콘솔 드롭다운 목록을 클릭하고 직렬 콘솔을 선택합니다.
  7. 연결 끊기 를 클릭하여 콘솔 세션을 종료합니다.
  8. 선택 사항: 새 창에서 콘솔 열기를 클릭하여 직렬 콘솔을 별도의 창에서 엽니다.

8.7.1.2. VNC 콘솔에 연결

웹 콘솔의 가상 머신 개요 화면에 있는 콘솔 탭에서 실행 중인 가상 머신의 VNC 콘솔에 연결합니다.

절차

  1. OpenShift Virtualization 콘솔의 사이드 메뉴에서 워크로드가상화를 클릭합니다.
  2. 가상 머신 탭을 클릭합니다.
  3. 가상 머신을 선택하여 가상 머신 개요 페이지를 엽니다.
  4. 콘솔 탭을 클릭합니다. 기본적으로 VNC 콘솔이 열립니다.
  5. 선택 사항: 새 창에서 콘솔 열기를 클릭하여 VNC 콘솔을 별도의 창에서 엽니다.
  6. 선택 사항: 키 보내기를 클릭하여 가상 머신에 키 조합을 보냅니다.
  7. 콘솔 창 외부에서 클릭한 다음 연결 끊기 를 클릭하여 세션을 종료합니다.

8.7.1.3. RDP를 사용하여 Windows 가상 머신에 연결

RDP(원격 데스크탑 프로토콜)를 사용하는 데스크탑 뷰어 콘솔에서는 Windows 가상 머신 연결을 위해 개선된 콘솔 환경을 제공합니다.

RDP를 사용하여 Windows 가상 머신에 연결하려면 웹 콘솔의 가상 머신 세부 정보 화면에 있는 콘솔 탭에서 가상 머신에 대한 console.rdp 파일을 다운로드하여 선호하는 RDP 클라이언트에 제공하십시오.

사전 요구 사항

  • Windows 가상 머신이 실행 중이고 QEMU 게스트 에이전트가 설치되어 있습니다. qemu-guest-agent는 VirtIO 드라이버에 포함되어 있습니다.
  • 계층 2 NIC가 가상 머신에 연결되어 있습니다.
  • RDP 클라이언트가 Windows 가상 머신과 동일한 네트워크의 머신에 설치되어 있습니다.

절차

  1. OpenShift Virtualization 콘솔의 사이드 메뉴에서 워크로드가상화를 클릭합니다.
  2. 가상 머신 탭을 클릭합니다.
  3. Windows 가상 머신을 선택하여 가상 머신 개요 화면을 엽니다.
  4. 콘솔 탭을 클릭합니다.
  5. 콘솔 목록에서 데스크탑 뷰어를 선택합니다.
  6. 네트워크 인터페이스 목록에서 계층 2 NIC를 선택합니다.
  7. 원격 데스크탑 시작을 클릭하여 console.rdp 파일을 다운로드합니다.
  8. RDP 클라이언트를 열고 console.rdp 파일을 참조합니다. 예를 들면 다음과 같이 remmina를 사용합니다.

    $ remmina --connect /path/to/console.rdp
  9. 관리자 이름 및 암호를 입력하여 Windows 가상 머신에 연결합니다.

8.7.1.4. 웹 콘솔에서 SSH 명령 복사

웹 콘솔의 Actions 목록에서 SSH를 통해 실행 중인 VM(가상 머신)에 액세스하려면 명령을 복사합니다.

절차

  1. OpenShift Container Platform 콘솔의 사이드 메뉴에서 워크로드 → 가상화를 클릭합니다.
  2. 가상 머신 탭을 클릭합니다.
  3. 가상 머신을 선택하여 가상 머신 개요 페이지를 엽니다.
  4. 작업 목록에서 SSH 명령 복사 를 선택합니다. 이제 이 명령을 OpenShift CLI(oc)에 붙여넣을 수 있습니다.

8.7.2. CLI 명령을 사용하여 가상 머신 콘솔에 액세스

8.7.2.1. SSH를 통해 가상 머신 인스턴스에 액세스

VM(가상 머신)에 포트 22를 노출하면 SSH를 사용하여 VM에 액세스할 수 있습니다.

virtctl expose 명령은 VMI(가상 머신 인스턴스) 포트를 노드 포트에 전달하고, 활성화된 액세스 권한에 대해 서비스를 생성합니다. 다음 예에서는 클러스터 노드의 특정 포트에서 <fedora-vm> 가상 머신의 포트 22로 트래픽을 전달하는 fedora-vm-ssh 서비스를 생성합니다.

사전 요구 사항

  • VMI와 동일한 프로젝트에 있어야 합니다.
  • 액세스하려는 VMI가 가상 바인딩 방법을 사용하여 기본 Pod 네트워크에 연결되어 있어야 합니다.
  • 액세스하려는 VMI가 실행 중이어야 합니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 다음 명령을 실행하여 fedora-vm-ssh 서비스를 생성합니다.

    $ virtctl expose vm <fedora-vm> --port=22 --name=fedora-vm-ssh --type=NodePort 1
    1
    <fedora-vm>fedora-vm-ssh 서비스를 실행하는 VM의 이름입니다.
  2. 서비스를 점검하여 서비스에서 감지한 포트를 확인합니다.

    $ oc get svc

출력 예

NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)           AGE
fedora-vm-ssh   NodePort   127.0.0.1      <none>        22:32551/TCP   6s

+ 이 예에서는 서비스에서 32551 포트를 감지합니다.

  1. SSH를 통해 VMI에 로그인합니다. 클러스터 노드의 ipAddress 및 이전 단계에서 찾은 포트를 사용하십시오.

    $ ssh username@<node_IP_address> -p 32551

8.7.2.2. YAML 구성을 사용하여 SSH를 통해 가상 머신에 액세스

virtctl expose 명령을 실행할 필요 없이 VM(가상 머신)에 대한 SSH 연결을 활성화할 수 있습니다. VM의 YAML 파일 및 서비스에 대한 YAML 파일이 구성 및 적용되면 서비스는 SSH 트래픽을 VM으로 전달합니다.

다음 예제에서는 VM의 YAML 파일 및 서비스 YAML 파일의 구성을 보여줍니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • oc create namespace 명령을 사용하고 네임스페이스 이름을 지정하여 VM의 YAML 파일의 네임스페이스를 만듭니다.

절차

  1. VM의 YAML 파일에서 SSH 연결을 위해 서비스를 노출하는 레이블과 값을 추가합니다. 인터페이스의 masquerade 기능을 활성화합니다.

    VirtualMachine 정의 예

    ...
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      namespace: ssh-ns 1
      name: vm-ssh
    spec:
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm-ssh
            special: vm-ssh 2
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: containerdisk
              - disk:
                  bus: virtio
                name: cloudinitdisk
              interfaces:
              - masquerade: {} 3
                name: testmasquerade 4
              rng: {}
            machine:
              type: ""
            resources:
              requests:
                memory: 1024M
          networks:
          - name: testmasquerade
            pod: {}
          volumes:
          - name: containerdisk
            containerDisk:
              image: kubevirt/fedora-cloud-container-disk-demo
          - name: cloudinitdisk
            cloudInitNoCloud:
              userData: |
                #!/bin/bash
                echo "fedora" | passwd fedora --stdin
    ...

    1
    oc create namespace 명령으로 생성된 네임스페이스의 이름입니다.
    2
    서비스에서 SSH 트래픽 연결에 활성화된 가상 머신 인스턴스를 식별하는 데 사용하는 레이블입니다. 레이블은 이 YAML 파일에 label로 추가되고 서비스 YAML 파일에 selector로 추가된 모든 key:value 쌍일 수 있습니다.
    3
    인터페이스 유형은 masquerade입니다.
    4
    이 인터페이스의 이름은 testmasquerade입니다.
  2. VM을 생성합니다.

    $ oc create -f <path_for_the_VM_YAML_file>
  3. VM을 시작합니다.

    $ virtctl start vm-ssh
  4. 서비스의 YAML 파일에서 서비스 이름, 포트 번호 및 대상 포트를 지정합니다.

    예시 Service 오브젝트

    ...
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-ssh 1
      namespace: ssh-ns 2
    spec:
      ports:
      - targetPort: 22 3
        protocol: TCP
        port: 27017
      selector:
        special: vm-ssh 4
      type: NodePort
    ...

    1
    SSH 서비스의 이름입니다.
    2
    oc create namespace 명령으로 생성된 네임스페이스의 이름입니다.
    3
    SSH 연결의 대상 포트 번호입니다.
    4
    선택기 이름과 값은 VM의 YAML 파일에 지정된 레이블과 일치해야 합니다.
  5. 서비스를 생성합니다.

    $ oc create -f <path_for_the_service_YAML_file>
  6. VM이 실행 중인지 확인합니다.

    $ oc get vmi

    출력 예

    NAME    AGE     PHASE       IP              NODENAME
    vm-ssh 6s       Running     10.244.196.152  node01

  7. 서비스를 점검하여 서비스에서 감지한 포트를 확인합니다.

    $ oc get svc

    출력 예

    NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)           AGE
    svc-ssh     NodePort       10.106.236.208 <none>        27017:30093/TCP   22s

    이 예에서 서비스는 포트 번호 30093을 획득했습니다.

  8. 다음 명령을 실행하여 노드의 IP 주소를 가져옵니다.

    $ oc get node <node_name> -o wide

    출력 예

    NAME    STATUS   ROLES   AGE    VERSION          INTERNAL-IP      EXTERNAL-IP
    node01  Ready    worker  6d22h  v1.20.0+5f82cdb  192.168.55.101   <none>

  9. VM이 실행 중인 노드의 IP 주소와 포트 번호를 지정하여 SSH를 통해 VM에 로그인합니다. oc get svc 명령에서 표시되는 포트 번호와 oc get node 명령에서 표시되는 노드의 IP 주소를 사용합니다. 다음 예제에서는 사용자 이름, 노드의 IP 주소 및 포트 번호와 함께 ssh 명령을 보여줍니다.

    $ ssh fedora@192.168.55.101 -p 30093

8.7.2.3. 가상 머신 인스턴스의 직렬 콘솔에 액세스

virtctl console 명령은 지정된 가상 머신 인스턴스에 대한 직렬 콘솔을 엽니다.

사전 요구 사항

  • virt-viewer 패키지가 설치되어 있어야 합니다.
  • 액세스하려는 가상 머신 인스턴스가 실행 중이어야 합니다.

절차

  • virtctl을 사용하여 직렬 콘솔에 연결합니다.

    $ virtctl console <VMI>

8.7.2.4. VNC를 사용하여 가상 머신 인스턴스의 그래픽 콘솔에 액세스

virtctl 클라이언트 유틸리티는 remote-viewer 기능을 사용하여 실행 중인 가상 머신 인스턴스에 대해 그래픽 콘솔을 열 수 있습니다. 이 기능은 virt-viewer 패키지에 포함되어 있습니다.

사전 요구 사항

  • virt-viewer 패키지가 설치되어 있어야 합니다.
  • 액세스하려는 가상 머신 인스턴스가 실행 중이어야 합니다.
참고

원격 머신에서 SSH를 통해 virtctl을 사용하는 경우 X 세션을 머신으로 전달해야 합니다.

절차

  1. virtctl 유틸리티를 사용하여 그래픽 인터페이스에 연결합니다.

    $ virtctl vnc <VMI>
  2. 명령이 실패하는 경우 -v 플래그를 사용하여 문제 해결 정보를 수집합니다.

    $ virtctl vnc <VMI> -v 4

8.7.2.5. RDP 콘솔을 사용하여 Windows 가상 머신에 연결

RDP(원격 데스크탑 프로토콜)에서는 Windows 가상 머신 연결을 위해 개선된 콘솔 환경을 제공합니다.

RDP를 사용하여 Windows 가상 머신에 연결하려면 연결된 L2 NIC의 IP 주소를 RDP 클라이언트로 지정하십시오.

사전 요구 사항

  • Windows 가상 머신이 실행 중이고 QEMU 게스트 에이전트가 설치되어 있습니다. qemu-guest-agent는 VirtIO 드라이버에 포함되어 있습니다.
  • 계층 2 NIC가 가상 머신에 연결되어 있습니다.
  • RDP 클라이언트가 Windows 가상 머신과 동일한 네트워크의 머신에 설치되어 있습니다.

절차

  1. oc CLI 툴을 통해 액세스 토큰이 있는 사용자로 OpenShift Virtualization 클러스터에 로그인합니다.

    $ oc login -u <user> https://<cluster.example.com>:8443
  2. oc describe vmi를 사용하여 실행 중인 Windows 가상 머신의 구성을 표시합니다.

    $ oc describe vmi <windows-vmi-name>

    출력 예

    ...
    spec:
      networks:
      - name: default
        pod: {}
      - multus:
          networkName: cnv-bridge
        name: bridge-net
    ...
    status:
      interfaces:
      - interfaceName: eth0
        ipAddress: 198.51.100.0/24
        ipAddresses:
          198.51.100.0/24
        mac: a0:36:9f:0f:b1:70
        name: default
      - interfaceName: eth1
        ipAddress: 192.0.2.0/24
        ipAddresses:
          192.0.2.0/24
          2001:db8::/32
        mac: 00:17:a4:77:77:25
        name: bridge-net
    ...

  3. 계층 2 네트워크 인터페이스의 IP 주소를 확인하고 복사합니다. 위 예제에서는 192.0.2.0이며, IPv6를 선호하는 경우 2001:db8::입니다.
  4. RDP 클라이언트를 열고 이전 단계에서 복사한 IP 주소를 사용하여 연결합니다.
  5. 관리자 이름 및 암호를 입력하여 Windows 가상 머신에 연결합니다.