当前位置:网站首页>KubeVirt网络源码分析
KubeVirt网络源码分析
2022-06-09 20:35:00 【后端云】
virt-launcher virtwrap 准备虚拟机的网络
virt-launcher pod 和 虚拟机一一对应,在pod中运行一台虚拟机, virt-launcher pod负责提供运行虚拟机必要的组件。本篇文章是介绍网络相关的组件。下图是KubeVirt的网络。图中的Kubetnets的CNI网络插件部分不是本篇涉及内容。
三个包含关系的实线框,从外到里分别是:Kubernetes工作节点、工作节点上的POD、POD里运行的VM虚拟机 三个并列的虚线框,从下到上分别是:Kubernetes网络(Kubernetes CNI负责配置),libvirt网络,虚拟机网络 本篇不涉及Kubernetes网络,只涉及libvirt网络,虚拟机网络
\kubevirt\pkg\virt-launcher\virtwrap\manager.go 中的 func (l *LibvirtDomainManager) preStartHook(vm *v1.VirtualMachine, domain *api.Domain) (*api.Domain, error) 调用 SetupPodNetwork 方法给虚拟机准备网络。
\kubevirt\pkg\virt-launcher\virtwrap\network\network.goSetupPodNetwork → SetupDefaultPodNetwork 该方法做了三件事,对应下面三个方法
- - discoverPodNetworkInterface
- - preparePodNetworkInterface
- - StartDHCP
discoverPodNetworkInterface
该方法收集pod interface如下信息:
- IP地址
- 路由
- 网关地址
- MAC地址 这些信息会传递给DHCP服务,DHCP服务会将这些信息传递给(在虚拟机启动后,现在是网络准备阶段)虚拟机(虚拟机作为DHCP客户端)。
preparePodNetworkInterfaces
因容器的IP和MAC地址都将来会通过DHCP传给容器里的虚拟机,所以要用preparePodNetworkInterfaces方法对原容器的网路做如下操作:
- 删除POD的的interface的IP地址
- 将POD的interface down
- 修改POD的interface mac地址,换一个MAC任意的MAC地址,只要和原来的MAC不一样,因为原来的MAC地址要给虚拟机,同一个网桥的不同端口的MAC地址不能一样
- 将POD的interface up
- 创建网桥,名称代码里固定死了,为br1
- 将POD的interface绑到br1上,将来虚拟机创建出来后也会绑到br1网桥上
StartDHCP → DHCPServer → SingleClientDHCPServer
DHCP服务只能给DHCP客户端(将来创建的虚拟机)提供1个IP地址,除了IP,网关信息,路由信息都会提供。SingleClientDHCPServer该方法启动一个只提供一个DHCP Client的DHCP服务端。
func (h *NetworkUtilsHandler) StartDHCP(nic *VIF, serverAddr *netlink.Addr) {
nameservers, searchDomains, err := getResolvConfDetailsFromPod()
if err != nil {
log.Log.Errorf("Failed to get DNS servers from resolv.conf: %v", err)
panic(err)
}
// panic in case the DHCP server failed during the vm creation
// but ignore dhcp errors when the vm is destroyed or shutting down
if err = DHCPServer(
nic.MAC,
nic.IP.IP,
nic.IP.Mask,
api.DefaultBridgeName,
serverAddr.IP,
nic.Gateway,
nameservers,
nic.Routes,
searchDomains,
); err != nil {
log.Log.Errorf("failed to run DHCP: %v", err)
panic(err)
}
}language-go复制代码上面的源码是KubeVirt 0.4.1版本的,以后再对最新的代码的 KubeVirt virt-lancher 网络部分做一次分析。
参考 - qemu 创建传统虚拟机以及虚拟机网络流程
# 创建一个虚拟机镜像,大小为 8G,其中 qcow2 格式为动态分配,raw 格式为固定大小
qemu-img create -f qcow2 ubuntutest.img 8G# 创建虚拟机(可能与下面的启动虚拟机操作重复)
qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntutest.img -cdrom ubuntu-14.04-server-amd64.iso -boot d -vnc :19# 在 Host 机器上创建 bridge br0
brctl addbr br0
# 将 br0 设为 up
ip link set br0 up
# 创建 tap device
tunctl -b# 将 tap0 设为 up
ip link set tap0 up
# 将 tap0 加入到 br0 上
brctl addif br0 tap0
# 启动虚拟机, 虚拟机连接 tap0、tap0 连接 br0
qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntutest.qcow2 -vnc :19 -net nic,model=virtio -nettap,ifname=tap0,script=no,downscript=no# ifconfig br0 192.168.57.1/24
ifconfig br0 192.168.57.1/24# VNC 连上虚拟机,给网卡设置地址,重启虚拟机,可 ping 通 br0# 要想访问外网,在 Host 上设置 NAT,并且 enable ip forwarding,可以 ping 通外网网关。# sysctl -p
net.ipv4.ip_forward = 1sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 如果 DNS 没配错,可以进行 apt-get updatelanguage-bash复制代码边栏推荐
- C language implementation of simple calculator
- [opencvsharpdnn] implementation example of yolov3 and Caffe in opencvsharp
- 将excel中的合并单元格拆分并填充数据
- 刚学嵌入式,想问问什么是中断,中断的概念是什么
- The role of partial in C #
- C#中委托的应用
- Ceisum三维场景demo
- Unity UI scrollbar component
- Export CSV file from neo4j diagram database
- 华为云Stack首席架构师:打造“称手”的数字化工具,答好政企IT数字化转型这道必选题
猜你喜欢

Apply for software code signing certificate

Potential functions commonly used in lammps and collection of crystal library resources

Kalman filter (KF) unscented Kalman filter (UKF)

Neo4j桌面版数据库备份

Figure guessing game in C language

SSL(Secure socket Layer)数字证书

SSL (secure socket layer) digital certificate

Problems and solutions of HMI online download failure

Just learning embedded, I want to ask what is interrupt and what is the concept of interrupt

Clickhouse data insert, update and delete SQL
随机推荐
杰理之有关摄像头帧数,以及图层【篇】
Falling ant
Redis知识点
Xcode 14 brings new improvements, and Xcode cloud is officially launched!
Integer ordered array lookup -- traversal and half / bisection
2022 Shandong Health Expo, dietotherapy and nourishing health exhibition, health management and precision medicine Exhibition
卡尔曼滤波(KF)无迹卡尔曼滤波(UKF)
neo4j图数据库导出csv文件
Application of commission in C #
HMI 联机下载失败的问题及解决方案
压缩文件报错 tar: Exiting with failure status due to previous errors
Examples of operator overloading in C #
FPGA introduction experiment - multi key control of variable speed running light and jump light based on state machine
HMI 串口屏 SD卡/TF卡升级的 bug
NoSQL redis configuration and optimization (I blew the night breeze of Qinhuai River for you when you were not in Nanjing)
Role of C random
目标分割之--Unet对多类别数据集的语义分割
UTM to latitude and longitude
95 ans plus tard, le programmeur de Big Factory a été condamné à neuf mois de prison pour avoir supprimé la bibliothèque.
Unity UI scrollbar component