diff --git a/2017/Kube-Virt-v004.html b/2017/Kube-Virt-v004.html
index 95c0148cb8..1212bae1a1 100644
--- a/2017/Kube-Virt-v004.html
+++ b/2017/Kube-Virt-v004.html
@@ -225,7 +225,7 @@
diff --git a/2017/Kube-Virt-v010.html b/2017/Kube-Virt-v010.html
index edaf7173f0..35e3932600 100644
--- a/2017/Kube-Virt-v010.html
+++ b/2017/Kube-Virt-v010.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-1.html b/2017/This-Week-in-Kube-Virt-1.html
index 758cc19a0f..c7c749a67b 100644
--- a/2017/This-Week-in-Kube-Virt-1.html
+++ b/2017/This-Week-in-Kube-Virt-1.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-10-base-10.html b/2017/This-Week-in-Kube-Virt-10-base-10.html
index 83411a1d27..f6ef20ce24 100644
--- a/2017/This-Week-in-Kube-Virt-10-base-10.html
+++ b/2017/This-Week-in-Kube-Virt-10-base-10.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-11.html b/2017/This-Week-in-Kube-Virt-11.html
index bbd10bde5d..3d4dc93bff 100644
--- a/2017/This-Week-in-Kube-Virt-11.html
+++ b/2017/This-Week-in-Kube-Virt-11.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-12.html b/2017/This-Week-in-Kube-Virt-12.html
index 8a61a6d040..11418efa77 100644
--- a/2017/This-Week-in-Kube-Virt-12.html
+++ b/2017/This-Week-in-Kube-Virt-12.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-13.html b/2017/This-Week-in-Kube-Virt-13.html
index dfc11f0701..e6daf42b82 100644
--- a/2017/This-Week-in-Kube-Virt-13.html
+++ b/2017/This-Week-in-Kube-Virt-13.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-14.html b/2017/This-Week-in-Kube-Virt-14.html
index 693eb6ef67..429ae05870 100644
--- a/2017/This-Week-in-Kube-Virt-14.html
+++ b/2017/This-Week-in-Kube-Virt-14.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-15.html b/2017/This-Week-in-Kube-Virt-15.html
index 77db785c75..ca6a9b1ae5 100644
--- a/2017/This-Week-in-Kube-Virt-15.html
+++ b/2017/This-Week-in-Kube-Virt-15.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-2.html b/2017/This-Week-in-Kube-Virt-2.html
index 0ef2ee25b9..28d1ce8271 100644
--- a/2017/This-Week-in-Kube-Virt-2.html
+++ b/2017/This-Week-in-Kube-Virt-2.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-3.html b/2017/This-Week-in-Kube-Virt-3.html
index 2b9faac40d..3f8b36dee5 100644
--- a/2017/This-Week-in-Kube-Virt-3.html
+++ b/2017/This-Week-in-Kube-Virt-3.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-4.html b/2017/This-Week-in-Kube-Virt-4.html
index c78de17a25..7ef4d2b939 100644
--- a/2017/This-Week-in-Kube-Virt-4.html
+++ b/2017/This-Week-in-Kube-Virt-4.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-5.html b/2017/This-Week-in-Kube-Virt-5.html
index b191cc6633..4ddc1f3791 100644
--- a/2017/This-Week-in-Kube-Virt-5.html
+++ b/2017/This-Week-in-Kube-Virt-5.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-6.html b/2017/This-Week-in-Kube-Virt-6.html
index 6f06cd9311..c46a35e993 100644
--- a/2017/This-Week-in-Kube-Virt-6.html
+++ b/2017/This-Week-in-Kube-Virt-6.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-7.html b/2017/This-Week-in-Kube-Virt-7.html
index bc2eadd607..a86cce6143 100644
--- a/2017/This-Week-in-Kube-Virt-7.html
+++ b/2017/This-Week-in-Kube-Virt-7.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-8.html b/2017/This-Week-in-Kube-Virt-8.html
index 991b43bae1..018d2324c7 100644
--- a/2017/This-Week-in-Kube-Virt-8.html
+++ b/2017/This-Week-in-Kube-Virt-8.html
@@ -225,7 +225,7 @@
diff --git a/2017/This-Week-in-Kube-Virt-9.html b/2017/This-Week-in-Kube-Virt-9.html
index 8ec59626b1..710a6ae2f0 100644
--- a/2017/This-Week-in-Kube-Virt-9.html
+++ b/2017/This-Week-in-Kube-Virt-9.html
@@ -225,7 +225,7 @@
diff --git a/2017/role-of-libvirt.html b/2017/role-of-libvirt.html
index 963dd37b45..00b4433be6 100644
--- a/2017/role-of-libvirt.html
+++ b/2017/role-of-libvirt.html
@@ -225,7 +225,7 @@
diff --git a/2017/technology-comparison.html b/2017/technology-comparison.html
index 8d50fa25f8..31156f2eb3 100644
--- a/2017/technology-comparison.html
+++ b/2017/technology-comparison.html
@@ -225,7 +225,7 @@
diff --git a/2018/CDI-DataVolumes.html b/2018/CDI-DataVolumes.html
index 88656c93db..d351a6d52e 100644
--- a/2018/CDI-DataVolumes.html
+++ b/2018/CDI-DataVolumes.html
@@ -225,7 +225,7 @@
diff --git a/2018/Deploying-KubeVirt-on-a-Single-oVirt-VM.html b/2018/Deploying-KubeVirt-on-a-Single-oVirt-VM.html
index aa764cce11..8f3f7fe2bb 100644
--- a/2018/Deploying-KubeVirt-on-a-Single-oVirt-VM.html
+++ b/2018/Deploying-KubeVirt-on-a-Single-oVirt-VM.html
@@ -225,7 +225,7 @@
diff --git a/2018/Deploying-VMs-on-Kubernetes-GlusterFS-KubeVirt.html b/2018/Deploying-VMs-on-Kubernetes-GlusterFS-KubeVirt.html
index 8afd1444e1..326629f2b0 100644
--- a/2018/Deploying-VMs-on-Kubernetes-GlusterFS-KubeVirt.html
+++ b/2018/Deploying-VMs-on-Kubernetes-GlusterFS-KubeVirt.html
@@ -225,7 +225,7 @@
diff --git a/2018/KVM-Using-Device-Plugins.html b/2018/KVM-Using-Device-Plugins.html
index 5d6b093966..d4b7f14478 100644
--- a/2018/KVM-Using-Device-Plugins.html
+++ b/2018/KVM-Using-Device-Plugins.html
@@ -225,7 +225,7 @@
diff --git a/2018/Kube-Virt-v020.html b/2018/Kube-Virt-v020.html
index ce12324e27..8987be166a 100644
--- a/2018/Kube-Virt-v020.html
+++ b/2018/Kube-Virt-v020.html
@@ -225,7 +225,7 @@
diff --git a/2018/KubeVirt-API-Access-Control.html b/2018/KubeVirt-API-Access-Control.html
index 5f604ef5ee..a6e2a77318 100644
--- a/2018/KubeVirt-API-Access-Control.html
+++ b/2018/KubeVirt-API-Access-Control.html
@@ -225,7 +225,7 @@
diff --git a/2018/KubeVirt-Memory-Overcommit.html b/2018/KubeVirt-Memory-Overcommit.html
index 8b1bc2b6be..100d2779a6 100644
--- a/2018/KubeVirt-Memory-Overcommit.html
+++ b/2018/KubeVirt-Memory-Overcommit.html
@@ -225,7 +225,7 @@
diff --git a/2018/KubeVirt-Network-Deep-Dive.html b/2018/KubeVirt-Network-Deep-Dive.html
index b20352c83f..c8329b1c91 100644
--- a/2018/KubeVirt-Network-Deep-Dive.html
+++ b/2018/KubeVirt-Network-Deep-Dive.html
@@ -225,7 +225,7 @@
diff --git a/2018/KubeVirt-Network-Rehash.html b/2018/KubeVirt-Network-Rehash.html
index 088a8b4820..8ec25299d8 100644
--- a/2018/KubeVirt-Network-Rehash.html
+++ b/2018/KubeVirt-Network-Rehash.html
@@ -225,7 +225,7 @@
diff --git a/2018/KubeVirt-objects.html b/2018/KubeVirt-objects.html
index 5d9117e89f..d3e0ecaa22 100644
--- a/2018/KubeVirt-objects.html
+++ b/2018/KubeVirt-objects.html
@@ -225,7 +225,7 @@
diff --git a/2018/Kubevirt-v0.7.0.html b/2018/Kubevirt-v0.7.0.html
index a24a8ebe47..09413ccb4d 100644
--- a/2018/Kubevirt-v0.7.0.html
+++ b/2018/Kubevirt-v0.7.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/Non-Dockerized-Build.html b/2018/Non-Dockerized-Build.html
index 5cff79e793..9abeef0f6b 100644
--- a/2018/Non-Dockerized-Build.html
+++ b/2018/Non-Dockerized-Build.html
@@ -225,7 +225,7 @@
diff --git a/2018/Proxy-vm-conclusion.html b/2018/Proxy-vm-conclusion.html
index 3bf95ee4ab..36e86bad68 100644
--- a/2018/Proxy-vm-conclusion.html
+++ b/2018/Proxy-vm-conclusion.html
@@ -225,7 +225,7 @@
diff --git a/2018/Research-run-VMs-with-istio-service-mesh.html b/2018/Research-run-VMs-with-istio-service-mesh.html
index c61fe805c7..8a733a50f3 100644
--- a/2018/Research-run-VMs-with-istio-service-mesh.html
+++ b/2018/Research-run-VMs-with-istio-service-mesh.html
@@ -225,7 +225,7 @@
diff --git a/2018/Run-Istio-with-kubevirt.html b/2018/Run-Istio-with-kubevirt.html
index f18169e158..4ef8c6f892 100644
--- a/2018/Run-Istio-with-kubevirt.html
+++ b/2018/Run-Istio-with-kubevirt.html
@@ -225,7 +225,7 @@
diff --git a/2018/Some-notes-on-some-highlights-of-v020.html b/2018/Some-notes-on-some-highlights-of-v020.html
index cf44694a04..0ceb4d0b1f 100644
--- a/2018/Some-notes-on-some-highlights-of-v020.html
+++ b/2018/Some-notes-on-some-highlights-of-v020.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-16-Holiday-Wrap-Up-Edition.html b/2018/This-Week-in-Kube-Virt-16-Holiday-Wrap-Up-Edition.html
index 9a8a44487c..954bdfc9a5 100644
--- a/2018/This-Week-in-Kube-Virt-16-Holiday-Wrap-Up-Edition.html
+++ b/2018/This-Week-in-Kube-Virt-16-Holiday-Wrap-Up-Edition.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-16-size-XL.html b/2018/This-Week-in-Kube-Virt-16-size-XL.html
index e8c4f9ef34..770130944b 100644
--- a/2018/This-Week-in-Kube-Virt-16-size-XL.html
+++ b/2018/This-Week-in-Kube-Virt-16-size-XL.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-17.html b/2018/This-Week-in-Kube-Virt-17.html
index 95876eb187..215f0b9dfb 100644
--- a/2018/This-Week-in-Kube-Virt-17.html
+++ b/2018/This-Week-in-Kube-Virt-17.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-18.html b/2018/This-Week-in-Kube-Virt-18.html
index 45aef9cc43..372aff3a8d 100644
--- a/2018/This-Week-in-Kube-Virt-18.html
+++ b/2018/This-Week-in-Kube-Virt-18.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-19.html b/2018/This-Week-in-Kube-Virt-19.html
index 13bea2675a..e3f10d415a 100644
--- a/2018/This-Week-in-Kube-Virt-19.html
+++ b/2018/This-Week-in-Kube-Virt-19.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-20.html b/2018/This-Week-in-Kube-Virt-20.html
index f007dc511d..935c17d6f2 100644
--- a/2018/This-Week-in-Kube-Virt-20.html
+++ b/2018/This-Week-in-Kube-Virt-20.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-21.html b/2018/This-Week-in-Kube-Virt-21.html
index e6fcf7fe17..122b173241 100644
--- a/2018/This-Week-in-Kube-Virt-21.html
+++ b/2018/This-Week-in-Kube-Virt-21.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-22.html b/2018/This-Week-in-Kube-Virt-22.html
index d963371229..f063d9a43b 100644
--- a/2018/This-Week-in-Kube-Virt-22.html
+++ b/2018/This-Week-in-Kube-Virt-22.html
@@ -225,7 +225,7 @@
diff --git a/2018/This-Week-in-Kube-Virt-23.html b/2018/This-Week-in-Kube-Virt-23.html
index 26d1a9a152..4fdb05952c 100644
--- a/2018/This-Week-in-Kube-Virt-23.html
+++ b/2018/This-Week-in-Kube-Virt-23.html
@@ -225,7 +225,7 @@
diff --git a/2018/Unit-Test-Howto.html b/2018/Unit-Test-Howto.html
index 462cc68788..da70e6e895 100644
--- a/2018/Unit-Test-Howto.html
+++ b/2018/Unit-Test-Howto.html
@@ -225,7 +225,7 @@
diff --git a/2018/Use-GlusterFS-Cloning-with-KubeVirt.html b/2018/Use-GlusterFS-Cloning-with-KubeVirt.html
index 5bc8a426a6..b8496ecd9a 100644
--- a/2018/Use-GlusterFS-Cloning-with-KubeVirt.html
+++ b/2018/Use-GlusterFS-Cloning-with-KubeVirt.html
@@ -225,7 +225,7 @@
diff --git a/2018/Use-VS-Code-for-Kube-Virt-Development.html b/2018/Use-VS-Code-for-Kube-Virt-Development.html
index 02c86738c0..f9586c635a 100644
--- a/2018/Use-VS-Code-for-Kube-Virt-Development.html
+++ b/2018/Use-VS-Code-for-Kube-Virt-Development.html
@@ -225,7 +225,7 @@
diff --git a/2018/attaching-to-multiple-networks.html b/2018/attaching-to-multiple-networks.html
index c8d89799a2..75fbe9e3fb 100644
--- a/2018/attaching-to-multiple-networks.html
+++ b/2018/attaching-to-multiple-networks.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.10.0.html b/2018/changelog-v0.10.0.html
index f3c76f4bb3..91eccfbad6 100644
--- a/2018/changelog-v0.10.0.html
+++ b/2018/changelog-v0.10.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.11.0.html b/2018/changelog-v0.11.0.html
index f9e350b383..3024810480 100644
--- a/2018/changelog-v0.11.0.html
+++ b/2018/changelog-v0.11.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.3.0.html b/2018/changelog-v0.3.0.html
index 57c7b0f732..1fa4e7d21a 100644
--- a/2018/changelog-v0.3.0.html
+++ b/2018/changelog-v0.3.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.4.0.html b/2018/changelog-v0.4.0.html
index 7ba788b0b2..c8628e92cd 100644
--- a/2018/changelog-v0.4.0.html
+++ b/2018/changelog-v0.4.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.5.0.html b/2018/changelog-v0.5.0.html
index 3124c918b7..021abb3bef 100644
--- a/2018/changelog-v0.5.0.html
+++ b/2018/changelog-v0.5.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.6.0.html b/2018/changelog-v0.6.0.html
index 36320ad23b..8bac252e13 100644
--- a/2018/changelog-v0.6.0.html
+++ b/2018/changelog-v0.6.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.7.0.html b/2018/changelog-v0.7.0.html
index 1c3172779e..8b6f9ff758 100644
--- a/2018/changelog-v0.7.0.html
+++ b/2018/changelog-v0.7.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.8.0.html b/2018/changelog-v0.8.0.html
index fa4e93438f..3e15dff24b 100644
--- a/2018/changelog-v0.8.0.html
+++ b/2018/changelog-v0.8.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/changelog-v0.9.0.html b/2018/changelog-v0.9.0.html
index 353c01c4cb..ea1de2832b 100644
--- a/2018/changelog-v0.9.0.html
+++ b/2018/changelog-v0.9.0.html
@@ -225,7 +225,7 @@
diff --git a/2018/containerized-data-importer.html b/2018/containerized-data-importer.html
index d186d2300e..781c4b1e97 100644
--- a/2018/containerized-data-importer.html
+++ b/2018/containerized-data-importer.html
@@ -225,7 +225,7 @@
diff --git a/2018/ignition-support.html b/2018/ignition-support.html
index 47dee3b388..33cd6e39d5 100644
--- a/2018/ignition-support.html
+++ b/2018/ignition-support.html
@@ -225,7 +225,7 @@
diff --git a/2018/kubevirt-at-kubecon-na.html b/2018/kubevirt-at-kubecon-na.html
index 685101966e..144801c676 100644
--- a/2018/kubevirt-at-kubecon-na.html
+++ b/2018/kubevirt-at-kubecon-na.html
@@ -225,7 +225,7 @@
diff --git a/2018/kubevirt-autolatest.html b/2018/kubevirt-autolatest.html
index c81850bd9e..b95bb351bd 100644
--- a/2018/kubevirt-autolatest.html
+++ b/2018/kubevirt-autolatest.html
@@ -225,7 +225,7 @@
diff --git a/2018/kubevirtci.html b/2018/kubevirtci.html
index 359e5b4409..7fe1273dde 100644
--- a/2018/kubevirtci.html
+++ b/2018/kubevirtci.html
@@ -225,7 +225,7 @@
diff --git a/2018/new-volume-types.html b/2018/new-volume-types.html
index 1191ccb838..f6ffe699b3 100644
--- a/2018/new-volume-types.html
+++ b/2018/new-volume-types.html
@@ -225,7 +225,7 @@
diff --git a/2018/ovn-multi-network-plugin-for-kubernetes-kubetron.html b/2018/ovn-multi-network-plugin-for-kubernetes-kubetron.html
index c09bcaaa8a..b618dc0979 100644
--- a/2018/ovn-multi-network-plugin-for-kubernetes-kubetron.html
+++ b/2018/ovn-multi-network-plugin-for-kubernetes-kubetron.html
@@ -225,7 +225,7 @@
diff --git a/2019/Access-Virtual-Machines-graphic-console-using-noVNC.html b/2019/Access-Virtual-Machines-graphic-console-using-noVNC.html
deleted file mode 100644
index 312d19419d..0000000000
--- a/2019/Access-Virtual-Machines-graphic-console-using-noVNC.html
+++ /dev/null
@@ -1,669 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Access Virtual Machines' graphic console using noVNC | KubeVirt.io
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Introduction
-
-NoVNC is a JavaScript VNC client using WebSockets and HTML5 Canvas. We provide websocket api for VNC access under
-
-APISERVER:/apis/subresources.kubevirt.io/v1alpha3/namespaces/NAMESPACE/virtualmachineinstances/VM/vnc
-
-
-but we can not access the VNC api directly since authorization is needed. In order to solve the problem, we provide a component using kubectl proxy
to provide a authorized vnc acess, we name this Component virtVNC
.
-
-In this post we are going to show how to do this in detail.
-
-The detailed method
-
-Prepare Docker Image
-
-First prepare docker build dicrectory.
-
-mkdir -p virtvnc/static
-
-
-Then clone noVNC files from github.
-
-git clone https://github.com/novnc/noVNC
-
-
-And then copy noVNC files to docker build directory.
-
-cp noVNC/app virtvnc/static/
-cp noVNC/core virtvnc/static/
-cp noVNC/vender virtvnc/static/
-cp noVNC/* .html virtvnc/static/
-
-
-Create a file index.html
to virtvnc/static/
with the following content. The page will display VMs and corresponding VNC links.
-
-<html>
- <meta charset= "utf-8" >
- <style>
- td {
- padding : 5px ;
- }
- .button {
- background-color : white ;
- border : 2px solid black ;
- color : black ;
- padding : 5px ;
- text-align : center ;
- text-decoration : none ;
- display : inline-block ;
- font-size : 16px ;
- -webkit-transition-duration : 0.4s ;
- transition-duration : 0.4s ;
- }
- .button :hover {
- background-color : black ;
- color : white ;
- cursor : pointer ;
- }
- button [ disabled ] {
- opacity : .65 ;
- }
- button [ disabled ] :hover {
- color : black ;
- background : white ;
- }
- </style>
- <!-- Promise polyfill for IE11 -->
- <script src= "vendor/promise.js" ></script>
-
- <!-- ES2015/ES6 modules polyfill -->
- <script nomodule src= "vendor/browser-es-module-loader/dist/browser-es-module-loader.js" ></script>
-
-
- <script type= "module" crossorigin= "anonymous" >
- import * as WebUtil from " ./app/webutil.js " ;
- const apiPrefix = ' k8s/apis '
- function loadVMI ( namespace ) {
- WebUtil . fetchJSON ( ' / ' + apiPrefix + ' /kubevirt.io/v1alpha3/namespaces/ ' + namespace + ' /virtualmachineinstances/ ' )
- . then (( resp ) => {
- let vmis = [];
- resp . items . forEach ( i => {
- let tr = document . createElement ( ' tr ' );
- tr . innerHTML = " <td> " + i . metadata . name + " </td><td> " + String ( i . status . phase ) + " </td><td> " + String ( i . status . interfaces !== undefined ? i . status . interfaces [ 0 ]. ipAddress : '' ) + " </td><td> " + String ( i . status . nodeName !== undefined ? i . status . nodeName : '' ) + " </td><td><button class='button' " + String ( i . status . phase == " Running " ? "" : " disabled " ) + " onclick= \" window.open('vnc_lite.html?path= " + apiPrefix + " /subresources.kubevirt.io/v1alpha3/namespaces/ " + namespace + " /virtualmachineinstances/ " + i . metadata . name + " /vnc', 'novnc_window', 'resizable=yes,toolbar=no,location=no,status=no,scrollbars=no,menubar=no,width=1030,height=800') \" >VNC</button></td> " ;
- document . getElementById ( " vmis " ). appendChild ( tr );
- });
- if ( resp . items . length === 0 ) {
- document . body . append ( " No virtual machines in the namespace. " );
- }
- })
- . catch ( err => console . log ( " Failed to get vmis: " + err ));
- }
- let namespace = WebUtil . getQueryVar ( ' namespace ' , ' default ' );
- loadVMI ( namespace );
- </script>
- </meta>
-
- <body>
- <table><tbody id= "vmis" >
- </tbody></table>
- </body>
-</html>
-
-
-Create dockerfile with following content to add static html files and set up kubectl proxy
command line args.
-
-FROM quay.io/bitnami/kubectl:1.15
-ADD static /static
-CMD ["proxy", "--www=/static", "--accept-hosts=^.*$", "--address=[::]", "--api-prefix=/k8s/", "--www-prefix="]
-
-
-Finally use docker build
to build docker image.
-
-cd virtvnc
-docker build -t quay.io/samblade/virtvnc:v0.1 .
-
-
-Setting Up RBAC
-
-Create a service account for virtvnc.
-
-apiVersion : v1
-kind : ServiceAccount
-metadata :
- name : virtvnc
- namespace : kubevirt
-
-
-Then define cluster role for kubevirt, setting up permissions needed.
-
-kind : ClusterRole
-apiVersion : rbac.authorization.k8s.io/v1
-metadata :
- name : virtvnc
-rules :
- - apiGroups :
- - subresources.kubevirt.io
- resources :
- - virtualmachineinstances/console
- - virtualmachineinstances/vnc
- verbs :
- - get
- - apiGroups :
- - kubevirt.io
- resources :
- - virtualmachines
- - virtualmachineinstances
- - virtualmachineinstancepresets
- - virtualmachineinstancereplicasets
- - virtualmachineinstancemigrations
- verbs :
- - get
- - list
- - watch
-
-
-And then binding cluster role to service accout.
-
-kind : ClusterRoleBinding
-apiVersion : rbac.authorization.k8s.io/v1
-metadata :
- name : virtvnc
-subjects :
- - kind : ServiceAccount
- name : virtvnc
- namespace : kubevirt
-roleRef :
- kind : ClusterRole
- name : virtvnc
- apiGroup : rbac.authorization.k8s.io
-
-
-Deploy to kubernetes
-
-Create following yaml, and then apply to kubernetes to setup virtvnc
deployment.
-
-apiVersion : extensions/v1beta1
-kind : Deployment
-metadata :
- name : virtvnc
- namespace : kubevirt
-spec :
- replicas : 1
- selector :
- matchLabels :
- app : virtvnc
- template :
- metadata :
- labels :
- app : virtvnc
- spec :
- serviceAccountName : virtvnc
- nodeSelector :
- node-role.kubernetes.io/master : " "
- tolerations :
- - key : " node-role.kubernetes.io/master"
- operator : " Equal"
- value : " "
- effect : " NoSchedule"
- containers :
- - name : virtvnc
- image : quay.io/samblade/virtvnc:v0.1
- livenessProbe :
- httpGet :
- port : 8001
- path : /
- scheme : HTTP
- failureThreshold : 30
- initialDelaySeconds : 30
- periodSeconds : 10
- successThreshold : 1
- timeoutSeconds : 5
-
-
-Expose a NodePort
service, then we can access the web page from node network.
-
-apiVersion : v1
-kind : Service
-metadata :
- labels :
- app : virtvnc
- name : virtvnc
- namespace : kubevirt
-spec :
- ports :
- - port : 8001
- protocol : TCP
- targetPort : 8001
- selector :
- app : virtvnc
- type : NodePort
-
-
-
This will make all your virtual machines vnc & console accessible to node network.**
-
-
-
-The Simple Way
-
-In this github repo and registry you’ll find a ready to use version of the above which you can deploy in a single command like this:
-
-kubectl apply -f https://github.com/wavezhang/virtVNC/raw/master/k8s/virtvnc.yaml
-
-
-Access VNC
-
-First get node port of virtvnc
service.
-
-kubectl get svc -n kubevirt virtvnc
-
-
-Then visit the following url in browser:
-
-http://NODEIP:NODEPORT/
-
-
-If you want manage virtual machines in other namespace, you can specify namespace using query param namespace
like following:
-
-http://NODEIP:NODEPORT/?namespace=test
-
-
-
-
-References
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-