ROKS clusters use RHEL 7.x hosts instead of RHCOS in a standard OCP install. Also, ROKS uses Calico overlay network instead of default OpenShiftSDN. These two changes cause trouble for OpenShift Container Native Virtualization (CNV) on ROKS.
[1] RHEL 7.x doesn’t support q35 machine types. It is the supported machine type in CNV. For CNV to work in ROKS, we need to use legacy i440fx machine types. Support for legacy machine types are not enabled by default in CNV. We need to explicitly enable it in CNV.
oc -n openshift-cnv edit cm kubevirt-config
# Add the following under data
emulated-machines: pc-q35*,pc-i440fx-*
[2] ROKS cluster doesn’t support pod network masquerade for CNV as it is using Calico. So we need to use bridge interface for VM pods for inter-service communication.
[3] bridge interface is not supported for OpenShift Service Mesh (OSSM) in CNV. So we need to use yet another un-supported slirp interface to work with OSSM. slirp is not enabled by default in CNV.
oc -n openshift-cnv edit cm kubevirt-config
# Add the following under data
permitSlirpInterface: "true"
More details:
[1] kubevirt/kubevirt#2762 (comment) [2] kubevirt/kubevirt#2942 [3] https://kubevirt.io/user-guide/virtual_machines/istio_service_mesh/#limitations