Kubevirt를 이용하여 VM을 생성할 경우, 별도의 Network Interface 설정을 하지 않을 경우, 기본적으로 Pod 네트워크를 사용한다. 즉, VM이 실행되는 Pod의 IP가 VM의 IP로 할당된다. 그래서 pod를 재시작할 때마다 ip가 변동되므로 고정 IP를 할당하려면 별도로 network를 설정해주고 interfaces: 내에 정의해주어야 한다.
KubeVirt에서 VM의 네트워크를 설정할 때 사용할 수 있는 주요 네트워크 모드에는 bridge, masquerade, macvtap 등이 있다.
VM이 Pod 네트워크가 아닌, Kubernetes 노드 네트워크에 직접 연결되는 방식. 이 방식을 사용하면 pod id가 VM의 node ip로 설정된다.
장점
단점
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: test-vm
spec:
running: true
template:
spec:
networks:
- name: default
pod: {}
domain:
devices:
interfaces:
- name: default
**bridge: {}**
...
masquerade는 VM이 직접 Pod 네트워크에 연결되는 것이 아니라, Pod 내부에서 NAT(Network Address Translation)으로 변환해준다. NAT 뒤에 POD IP를 숨긴다.
KubeVirt에서 masquerade 모드를 사용하면 VM 내부의 네트워크 인터페이스(enp1s0)에 할당되는 IP가 항상 10.0.2.2로 고정된다. 이는 KubeVirt가 내부적으로 QEMU의 User Mode Network(SLIRP)를 사용하기 때문이다.
KubeVirt masquerade 모드의 동작 방식
masquerade 네트워크 모드는 NAT 기반으로 작동하며, VM 내부에서는 QEMU의 SLIRP(User Mode Network) 방식으로 네트워크를 설정한다.