一、前言

在文章《二:在Kubernetes使用kubevirt运行管理Ubuntu/Windows桌面操作系统》中,需要借助于virtctl才能连接到Windows的桌面,这样windows环境的使用者还需要额外具备kubernetes的权限,不是很合理。

这里介绍一种使用noVNC方案,通过web端口借助Kubernetes的Service来暴露服务,让windows使用者可以直接在浏览器访问windows桌面的方案。noVNC访问机器上vncserver提供的vnc服务,进行tcp到websocket的转化。noVNC 被普遍用在各大云计算、虚拟机控制面板中,比如 OpenStack的consol Dashboard。

二、在Windows安装noVNC

2.1 安装vncserver:ultravnc

reference:http://www.uvnc.com/downloads/ultravnc.html

2.2 安装运行环境

nodejs:https://nodejs.org/en/download/

Websockify:https://nodejs.org/en/download/

安装nodejs modules

npm install ws
npm install optimist
npm install mime-types

node_modules will be created at C:\Users\noVNC\

2.3 安装noVNC

下载:http://github.com/kanaka/noVNC/zipball/master

Install noVNC and websockify

Unzip noVNC.zip to node_modules
Unzip websockify-master.zip to novnc

2.4 启动noVNC服务

cd C:\Users\noVNC\node_modules\novnc\websockify-master\other\js
node websockify.js --web C:\Users\noVNC\node_modules\novnc 9000 0.0.0.0:5900

websocket在9000端口监听请求

 

2.5 连接noVNC

直接在web网页访问:http://192.168.56.102:9000/

 

三、使用noVNC暴露k8s上面的windows桌面

参考:https://kubevirt.io/user-guide/docs/latest/creating-virtual-machines/interfaces-and-networks.html

3.1 部署虚拟机:vm-windows-noVNC.yaml

metadata:
  name: windows
  namespace: vm
apiVersion: kubevirt.io/v1alpha2
kind: VirtualMachineInstance
spec:
  domain:
    resources:
      requests:
        memory: 8Gi
        cpu: 4
    devices:
      disks:
      - name: windowsdisk
        volumeName: windows
      interfaces:
      - name: default
        model: e1000 expose e1000 NIC to the guest
        bridge: {} connect through a bridge
        ports:
         - name: novnc
           port: 9000
  volumes:
    - name: windows
      persistentVolumeClaim:
        claimName: windows
  networks:
  - name: default
    pod: {}

3.2 定义服务

windows-novnc-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: windows
  namespace: vm
spec:
  type: NodePort
  ports:
    - port: 9000
      protocol: TCP
      nodePort: 19000
  selector:
    kubevirt.io: virt-launcher
  sessionAffinity: None

3.3 访问

可以通过nodeIP+nodePort进行访问

 

3.5 设置windows不休眠

电源

 

显示器

 

磁盘

 

显示