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

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

참고

단일 가상 머신에 대한 동시 VNC 연결 실행은 현재 지원되지 않습니다.

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

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

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

10.8.1.1. 직렬 콘솔 연결

웹 콘솔의 VirtualMachine 세부 정보 페이지에 있는 콘솔 탭에서 실행 중인 가상 머신의 직렬 콘솔에 연결합니다.

절차

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

10.8.1.2. VNC 콘솔에 연결

웹 콘솔의 VirtualMachine 세부 정보 페이지에 있는 콘솔 탭에서 실행 중인 가상 머신의 VNC 콘솔에 연결합니다.

절차

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

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

RDP(Remote Desktop Protocol)를 사용하는 데스크탑 뷰어 콘솔은 Windows 가상 머신 연결을 위해 개선된 콘솔 환경을 제공합니다.

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

사전 요구 사항

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

절차

  1. OpenShift Container Platform 콘솔 의 사이드 메뉴에서 가상화 → VirtualMachine 를 클릭합니다.
  2. Windows 가상 머신을 클릭하여 VirtualMachine 세부 정보 페이지를 엽니다.
  3. 콘솔 탭을 클릭합니다.
  4. 콘솔 목록에서 데스크탑 뷰어를 선택합니다.
  5. 원격 데스크탑 시작을 클릭하여 console.rdp 파일을 다운로드합니다.
  6. 선호하는 RDP 클라이언트의 console.rdp 파일을 참조하여 Windows 가상 머신에 연결합니다.

10.8.1.4. 가상 머신 간 전환

Windows 가상 머신(VM)에 vGPU가 연결된 경우 웹 콘솔을 사용하여 기본 디스플레이와 vGPU 표시 간에 전환할 수 있습니다.

사전 요구 사항

  • 중재된 장치는 HyperConverged 사용자 정의 리소스에서 구성되며 VM에 할당됩니다.
  • VM이 실행 중입니다.

절차

  1. OpenShift Container Platform 콘솔에서 가상화VirtualMachine를클릭합니다.
  2. Windows 가상 머신을 선택하여 개요 화면을 엽니다.
  3. 콘솔 탭을 클릭합니다.
  4. 콘솔 목록에서 VNC 콘솔 을 선택합니다.
  5. Send Key 목록에서 적절한 키 조합을 선택합니다.

    1. 기본 VM 디스플레이에 액세스하려면 Ctl + Alt+ 1 을 선택합니다.
    2. vGPU 디스플레이에 액세스하려면 Ctl + Alt + 2 를 선택합니다.

추가 리소스

10.8.1.5. 웹 콘솔을 사용하여 SSH 명령 복사

SSH를 통해 VM(가상 머신) 터미널에 연결하도록 명령을 복사합니다.

절차

  1. OpenShift Container Platform 콘솔 의 사이드 메뉴에서 가상화 → VirtualMachine 를 클릭합니다.
  2. 가상 머신의 옵션 메뉴 kebab 를 클릭하고 SSH 복사 명령을 선택합니다.
  3. 터미널에 붙여넣어 VM에 액세스합니다.

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

10.8.2.1. virtctl을 사용하여 SSH를 통해 가상 머신에 액세스

virtctl ssh 명령을 사용하여 로컬 SSH 클라이언트를 사용하여 VM(가상 머신)으로 SSH 트래픽을 전달할 수 있습니다. VM을 사용하여 SSH 키 인증을 구성한 경우 1단계가 필요하지 않기 때문에 절차의 2단계로 건너뜁니다.

참고

컨트롤 플레인에서 SSH 트래픽이 많은 경우 API 서버의 속도가 느려질 수 있습니다. 많은 연결이 정기적으로 필요한 경우 전용 Kubernetes 서비스 오브젝트를 사용하여 가상 머신에 액세스합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • virtctl 클라이언트가 설치되어 있어야 합니다.
  • 액세스하려는 가상 머신이 실행 중입니다.
  • VM과 동일한 프로젝트에 있습니다.

절차

  1. SSH 키 인증을 구성합니다.

    1. ssh-keygen 명령을 사용하여 SSH 공개 키 쌍을 생성합니다.

      $ ssh-keygen -f <key_file> 1
      1
      키를 저장할 파일을 지정합니다.
    2. VM에 액세스하기 위한 SSH 공개 키가 포함된 SSH 인증 보안을 생성합니다.

      $ oc create secret generic my-pub-key --from-file=key1=<key_file>.pub
    3. VirtualMachine 매니페스트의 보안에 대한 참조를 추가합니다. 예를 들면 다음과 같습니다.

      apiVersion: kubevirt.io/v1
      kind: VirtualMachine
      metadata:
        name: testvm
      spec:
        running: true
        template:
          spec:
            accessCredentials:
            - sshPublicKey:
                source:
                  secret:
                    secretName: my-pub-key 1
                propagationMethod:
                  configDrive: {} 2
      # ...
      1
      SSH 인증 보안 오브젝트에 대한 참조 입니다.
      2
      SSH 공개 키는 VM에 configDrive 공급자를 사용하여 cloud-init 메타데이터로 삽입됩니다.
    4. VM을 다시 시작하여 변경 사항을 적용합니다.
  2. SSH를 통해 VM에 연결합니다.

    1. 다음 명령을 실행하여 SSH를 통해 VM에 액세스합니다.

      $ virtctl ssh -i <key_file> <vm_username>@<vm_name>
    2. 선택 사항: VM으로 파일을 안전하게 전송하거나 VM에서 전송하려면 다음 명령을 사용합니다.

      시스템에서 VM으로 파일을 복사

      $ virtctl scp -i <key_file> <filename> <vm_username>@<vm_name>:

      VM에서 시스템으로 파일을 복사

      $ virtctl scp -i <key_file> <vm_username@<vm_name>:<filename> .

10.8.2.2. OpenSSH 및 virtctl port-forward 사용

로컬 OpenSSH 클라이언트와 virtctl port-forward 명령을 사용하여 실행 중인 VM(가상 머신)에 연결할 수 있습니다. 이 방법을 Ansible과 함께 사용하여 VM 구성을 자동화할 수 있습니다.

이 방법은 컨트롤 플레인을 통해 포트 전달 트래픽이 전송되므로 트래픽이 적은 애플리케이션에 권장됩니다. 이 방법은 API 서버에 많은 부담을 주기 때문에 Rsync 또는 원격 데스크탑 프로토콜과 같은 트래픽이 많은 애플리케이션에 권장되지 않습니다.

사전 요구 사항

  • virtctl 클라이언트가 설치되어 있어야 합니다.
  • 액세스하려는 가상 머신이 실행 중입니다.
  • virtctl 툴을 설치한 환경에는 VM에 액세스하는 데 필요한 클러스터 권한이 있습니다. 예를 들어 oc login 을 실행하거나 KUBECONFIG 환경 변수를 설정합니다.

절차

  1. 클라이언트 머신의 ~/.ssh/config 파일에 다음 텍스트를 추가합니다.

    Host vm/*
      ProxyCommand virtctl port-forward --stdio=true %h %p
  2. 다음 명령을 실행하여 VM에 연결합니다.

    $ ssh <user>@vm/<vm_name>.<namespace>

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

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

사전 요구 사항

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

절차

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

    $ virtctl console <VMI>

10.8.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

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

로컬 RDP(Remote Desktop Protocol) 클라이언트를 사용하여 Windows VM(가상 머신)에 연결할 Kubernetes 서비스 오브젝트를 생성합니다.

사전 요구 사항

  • Windows 가상 머신이 실행 중이고 QEMU 게스트 에이전트가 설치되어 있습니다. qemu-guest-agent 오브젝트는 VirtIO 드라이버에 포함되어 있습니다.
  • 로컬 머신에 RDP 클라이언트가 설치되어 있어야 합니다.

절차

  1. VirtualMachine 매니페스트를 편집하여 서비스 생성을 위한 라벨을 추가합니다.

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-ephemeral
      namespace: example-namespace
    spec:
      running: false
      template:
        metadata:
          labels:
            special: key 1
    # ...
    1
    spec.template.metadata.labels 섹션에 special: key 라벨을 추가합니다.
    참고

    가상 머신의 라벨은 Pod로 전달됩니다. special: key 레이블은 서비스 매니페스트의 spec.selector 특성의 레이블과 일치해야 합니다.

  2. VirtualMachine 매니페스트 파일을 저장하여 변경 사항을 적용합니다.
  3. VM을 노출할 서비스 매니페스트를 생성합니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: rdpservice 1
      namespace: example-namespace 2
    spec:
      ports:
      - targetPort: 3389 3
        protocol: TCP
      selector:
        special: key 4
      type: NodePort 5
    # ...
    1
    Service 오브젝트의 이름입니다.
    2
    Service 오브젝트가 있는 네임스페이스입니다. 이는 VirtualMachine 매니페스트의 metadata.namespace 필드와 일치해야 합니다.
    3
    서비스에서 노출할 VM 포트입니다. 포트 목록이 VM 매니페스트에 정의된 경우 열려 있는 포트를 참조해야 합니다.
    4
    VirtualMachine 매니페스트의 spec.template.metadata.labels 스탠자에 추가한 라벨 참조입니다.
    5
    서비스 유형입니다.
  4. 서비스 매니페스트 파일을 저장합니다.
  5. 다음 명령을 실행하여 서비스를 생성합니다.

    $ oc create -f <service_name>.yaml
  6. VM을 시작합니다. VM이 이미 실행 중인 경우 다시 시작합니다.
  7. Service 오브젝트를 쿼리하여 사용할 수 있는지 확인합니다.

    $ oc get service -n example-namespace

    NodePort 서비스의 출력 예

    NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)            AGE
    rdpservice   NodePort    172.30.232.73   <none>       3389:30000/TCP    5m

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

    $ oc get node <node_name> -o wide

    출력 예

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

  9. 원하는 RDP 클라이언트에 노드 IP 주소와 할당된 포트를 지정합니다.
  10. 사용자 이름과 암호를 입력하여 Windows 가상 머신에 연결합니다.