目录

一、ML2配置文件

二、上传cirros镜像

三、创建vxlan10网络

四、创建实例/同vxlan通信测试

五、不同vxlan通信测试

5.1 新建vxlan11

5.2新建路由/添加路由接口

5.3不同vxlan通信测试

5.4 qemu-vnc报错

六、深度剖析vxlan

七、认识Bridge br-ex、Bridge br-int、Bridge br-tun


一、ML2配置文件

我使用的是packstack默认安装,不同安装方式配置文件会有所不同。

packstack安装:

[root@localhost ~(keystone_admin)]# cat /etc/neutron/plugins/ml2/ml2_conf.ini | grep -Ev '^$|#'[DEFAULT][l2pop][ml2]type_drivers=vxlan,flattenant_network_types=vxlanmechanism_drivers=openvswitchextension_drivers=port_security,qospath_mtu=0[ml2_type_flat]flat_networks=*[ml2_type_geneve][ml2_type_gre][ml2_type_vlan][ml2_type_vxlan]vni_ranges=10:100vxlan_group=224.0.0.1[securitygroup]firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriverenable_security_group=True

二、上传cirros镜像

source /root/keystonerc_adminmkdir /opt/imagescd /opt/imageswgethttps://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.imgglance image-create --name cirros-0.3.4-x86_64 --disk-format qcow2 --container-format bare --file /opt/images/cirros-0.3.4-x86_64-disk.img--visibility public --progressglance image-list

三、创建vxlan10网络

子网名称填subnet172_16_10_0,网络地址172.16.10.0/24,网关不填,默认是172.16.10.1。

四、创建实例/同vxlan通信测试

创建cirros-vm1和cirros-vm2

选择m1.tiny实例类型、网络选择vxlan10、选择admin的密钥对

获取秘钥对

[root@localhost images(keystone_admin)]# source /root/keystonerc_admin[root@localhost images(keystone_admin)]# nova keypair-add admin-key-----BEGIN RSA PRIVATE KEY-----MIIEogIBAAKCAQEAqc2lh8gIDfHxGm7nd6NG4eKCLtOtAC9aEfKCkeN4W0UegHoGN5thYnZJQhM7hKcwV/pME5e6NlvT/hj0vCVUutGmuSn8YSxD3Z3qyS+OArtichrkkzDanPy0CLri18HpjGaSmH8BdKrq0KK0JwkXgKXvLR2e30olyigb8fz/v+q1KC7fab+trF/TNZwWUauN6qUjItcRGfQB308b81acXEy9e3DI8aO9Jj7egfkv2DDv+5PZK62i+raXJewysNWRM0PgHNXty+FVnjOBeAOMmBIw+G4QGFpckHgF3e7oobHcH/OuNXc+EL/kLerhI+4OCQnJHQO/Bgd9JJU7Px9KCQIDAQABAoIBADv8Wi3NjIrgnbwo0byCAdhqnHLOdJ9MGxWcBmRjZ3FWyZ+5e9jJG24dO2QMR0plhb6OvbFuOGpbplhtmIee6H/W8H8ZRf9OE+uGjhrkodZ1PCHzPiyBZblvzGoJG3n9FvRyh/c3ZtxARRPPZrUjkRnxhLz7adSX7SGtabHjHrY9MJS//8Z9Lg0mQvnTDIAMyH9DPp9ZwwTlBsNzBNeY4QDk7HF88IkbfwN4+zMaPga68WXPfDoJ1aw8zkbwjTdHUuVtas4/kfbIhdKXM0+W3ImJm3KaLrpq7Pc9Ku3pkHoURHzonGb9LyJcQver70hPIagMwT29GQrdS4oCpQ5BacECgYEA3M+MGHLpdu59Bbh3O8tN9v2AheMr9SWZkMu9NXC2lcCNlhv9VNwhHsHpV2rRfcy21xHBAS0MfHvW0xw97YD+ehXADH9Ha1rywSAxkHxpxC8tIAU6BCsPfrXcBdKFVYzHQ2lH9MItH02hURRY7IhKYyZMPJM3cln0rs5lnIbLI+MCgYEAxN0kDdYkAefx1t1SExqyamMEcEhr7GDkTwO3ULhu7Kuaj6710ciYSjDDOzxsrlGdNs3cX/Bot4BDE8lLrl3J4siXSPW5Uj/PTZoroPDfiAHcV5UFU1nQLlPc568wRV/ghy+Jpzt0VfcvJV4MqNcZ6lHcwrxqNkrgIv/ex2aytiMCgYAF1sMonllIGNRbg147yYt9PYTZhYFTETR3XLvbHujlGttjncfcJ5oEmzIVarCxd+lZ1JFa+5r567hpirSkhCW2ir6yVedIknYa30QQQwn08x5pW1oGZDEbs6lmygNWmMtoH++ULFJPIplicHxNfOkiqA+aBnaP4osS2EhdlD7o6wKBgF4hw8Cd+V+z8a6k6z7ZUCCQsimiZ4CCoAisJTaCyf9+2owDw+UIvtES2fd0IB+GRN9UtiBlyxybRveqE/cPP56h/bzUSkXq3wwjQONW6fuVsC9swTwmwOW2EfXyjelOPAVIFNETG8CTTkbW3sTI/cpOVHoFL+BAE0aJBJRiJefzAoGASyHgMuTolmxLThCZCHNTXwp7oekmVKgTbAnfOFDbVjsGIVPb+7DnooAzYOouO4DpJcO0Z1cKe/bt6x7bojhzKLTsPN+oXoC7sda1cW0DMnAvq49xXNeRe7zaaBBse+WtBlQJ54k7WfEmXogvrkGfLibpX7KJwg6k6F6gvMmfXzo=-----END RSA PRIVATE KEY-----[root@localhost images(keystone_admin)]# openstack keypair list+-----------+-------------------------------------------------+| Name| Fingerprint |+-----------+-------------------------------------------------+| admin-key | fd:83:bb:58:f0:c5:3e:d6:c7:f1:d8:59:06:39:2c:d2 |+-----------+-------------------------------------------------+[root@localhost images(keystone_admin)]# 

获取实例控制url

[root@localhost /(keystone_admin)]# nova list+--------------------------------------+------------+--------+------------+-------------+-------------------------+| ID | Name | Status | Task State | Power State | Networks|+--------------------------------------+------------+--------+------------+-------------+-------------------------+| d91db9db-c7ee-4023-880d-d21ab224ec08 | cirros-vm1 | ACTIVE | -| Running | vxlan10_net=172.16.10.6 |+--------------------------------------+------------+--------+------------+-------------+-------------------------+[root@localhost /(keystone_admin)]# nova get-vnc-console cirros-vm1 novnc+-------+-------------------------------------------------------------------------------------+| Type| Url |+-------+-------------------------------------------------------------------------------------+| novnc | http://192.168.136.66:6080/vnc_auto.html" />

创建实例报错,查看日志,第二条报错直接说出原因,运行内存不足,使用free -g查看,确实不足,关闭宿主机,从原来的6G加到10G,问题解决。

[root@localhost /(keystone_admin)]# nova list+--------------------------------------+------------+--------+------------+-------------+-------------------------+| ID | Name | Status | Task State | Power State | Networks|+--------------------------------------+------------+--------+------------+-------------+-------------------------+| d91db9db-c7ee-4023-880d-d21ab224ec08 | cirros-vm1 | ACTIVE | -| Running | vxlan10_net=172.16.10.6 || b76eae8e-1bd1-4d77-9cb2-ea7d4ea96b29 | cirros-vm2 | ERROR| -| NOSTATE | |+--------------------------------------+------------+--------+------------+-------------+-------------------------+[root@localhost /(keystone_admin)]# tail -30 /var/log/nova/nova-compute.log | grep ERROR2023-06-18 16:39:26.704 2572 ERROR nova.compute.manager [instance: c28af1d5-9794-40d2-b886-07e1c3a02ec8] libvirtError: internal error: process exited while connecting to monitor: 2023-06-18T08:39:26.173407Z qemu-kvm: -drive file=/dev/sdc,format=raw,if=none,id=drive-virtio-disk0,serial=c27f61a5-dd02-4cf9-a491-991cbe70a72e,cache=none,aio=native: 'serial' is deprecated, please use the corresponding option of '-device' instead2023-06-18 16:39:26.704 2572 ERROR nova.compute.manager [instance: c28af1d5-9794-40d2-b886-07e1c3a02ec8] 2023-06-18T08:39:26.182871Z qemu-kvm: cannot set up guest memory 'pc.ram': Cannot allocate memory

同样的方法新建cirros-vm2,cirros-vm2分配到的ip地址是172.16.10.3

属于在同个vxlan的cirros-vm1和cirros-vm2成功通信。

那么不同vxlan下可以通信吗?如果不能该使用什么方法才是不同vxlan通信呢?

五、不同vxlan通信测试

5.1 新建vxlan11

新建vxlan11,与新建vxlan10步骤相同,子网为172.16.11.0/24,并创建cirros-vm3划入到vxlan11。

cirros-vm3分配到的ip为172.16.11.5,测试vm1和vm3通信,失败,原因是两实例处在不同的vxaln。

5.2新建路由/添加路由接口

新建路由router10_11,并将vxlan10、vxlan11加入到路由。

并将vxlan10、vxlan11加入接口

172.24.4.14是路由router_10_11对外通信的网关,新建每个路由默认自带一个对外网关。

cirros-vm1 172.106.10.6

cirros-vm3172.106.11.5

5.3不同vxlan通信测试

再次测试,cirros-vm1与cirros-vm3两个位于不同vxlan的主机成功通过路由进行通信

5.4 qemu-vnc报错

关机后VMware警告提示,虚拟磁盘的水平过错,影响罗虚拟机性能。请对虚拟磁盘进行新惠普整理。scsi0:0。关闭虚拟机。在“虚拟机设置”中选择虚拟磁盘,然后单击“碎片整理”。没有理会。

第二天虚拟机直接无法启动,VMware提示“客户机操作系统已禁用CPU。请关闭或处置虚拟机。”,其它虚拟机可正常开机。

尝试“碎片整理”,用时7分钟,无法解决仍然报错。

重启宿主机后,三个实例无法启动,无法新建实例,查看日志,Could not read keymap file: 'en-us',报错表示无法读取键盘信息,查了很多资料无法解决,但可以确定是qemu的VNC有问题。

[root@localhost ~(keystone_admin)]# tail -30 /var/log/nova/nova-compute.log | grep ERROR2023-06-18 22:31:36.527 2434 ERROR nova.compute.manager [instance: fe42fb2d-a995-4408-bcf5-5e1550b9f80e] libvirtError: internal error: process exited while connecting to monitor: 2023-06-18T14:31:36.049183Z qemu-kvm: -drive file=/dev/sdb,format=raw,if=none,id=drive-virtio-disk0,serial=2fe0fa25-5505-4707-981d-e32755524149,cache=none,aio=native: 'serial' is deprecated, please use the corresponding option of '-device' instead2023-06-18 22:31:36.527 2434 ERROR nova.compute.manager [instance: fe42fb2d-a995-4408-bcf5-5e1550b9f80e] Could not read keymap file: 'en-us'

解决方法:无法解决,只能恢复快照,用时8分钟。

原文解释:

-vnc :5,表示VNC的连接端口为5905,IP是主机的IP地址;
-k /opt/xuantie-qemu/share/qemu/keymaps/en-us这个不加的话会提示找不到键盘布局en-us,could not read keymap file: 'en-us'。
原文链接:https://blog.csdn.net/qq_37858281/article/details/123728267

Android emulator + QEMU VNC - Stack Overflow


六、深度剖析vxlan

把所有网络、实例、路由全部删除,重新剖析。

查看网络状态

[root@localhost ~(keystone_admin)]# brctl showbridge name bridge id STP enabled interfaces

添加vxlan10_net后 ,brctl show 仍然没有返回任何网络信息

新建cirros-vm1并加入vxlan10_net

[root@localhost images(keystone_admin)]# brctl showbridge name bridge id STP enabled interfacesqbr2c798bf4-8e8000.6a4a85d10584 noqvb2c798bf4-8etap2c798bf4-8e

使用virsh list查看实例的instanceID,使用virsh dumpxml instanceID或者virsh dumpxml 实例ID(不是实例名称),可查看详细信息,其中就包括网卡信息。

virsh dumpxml instanceIDvirsh dumpxml 实例ID
[root@localhost ~(keystone_admin)]# virsh list IdName State---------------------------------------------------- 1 instance-00000001running[root@localhost images(keystone_admin)]# virsh dumpxml instance-00000001 | grep bridge[root@localhost images(keystone_admin)]# virsh dumpxml instance-00000001 | grep inter[root@localhost images(keystone_admin)]# virsh dumpxml instance-00000001 | grep 8e

每新建一个实例,会相应生产对应的qbr(网桥)、qvb、tap、qvo(接口),图片中的具体信息对不上没关系,我们只关注拓扑关系。

[root@localhost images(keystone_admin)]# brctl showbridge name bridge id STP enabled interfacesqbr2c798bf4-8e8000.6a4a85d10584 noqvb2c798bf4-8etap2c798bf4-8e###ifconfig qbrID/qvbID/tapID/qvoID 可查询相应信息,都会以网卡的形式体现在宿主机上。###qbr[root@localhost ~(keystone_admin)]# ifconfig qbr2c798bf4-8eqbr2c798bf4-8e: flags=4163mtu 1450ether ca:a3:e7:b2:31:cdtxqueuelen 1000(Ethernet)RX packets 163bytes 6452 (6.3 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 0bytes 0 (0.0 B)TX errors 0dropped 0 overruns 0carrier 0collisions 0###qvb[root@localhost ~(keystone_admin)]# ifconfig qvb2c798bf4-8eqvb2c798bf4-8e: flags=4419mtu 1450inet6 fe80::c8a3:e7ff:feb2:31cdprefixlen 64scopeid 0x20ether ca:a3:e7:b2:31:cdtxqueuelen 1000(Ethernet)RX packets 95bytes 6041 (5.8 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 92bytes 5272 (5.1 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 0###tap[root@localhost ~(keystone_admin)]# ifconfig tap2c798bf4-8etap2c798bf4-8e: flags=4163mtu 1450inet6 fe80::fc16:3eff:feee:1305prefixlen 64scopeid 0x20ether fe:16:3e:ee:13:05txqueuelen 1000(Ethernet)RX packets 84bytes 4616 (4.5 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 88bytes 4975 (4.8 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 0###查看Bridge br-ex、Bridge br-int、Bridge br-tun的接口[root@localhost ~(keystone_admin)]# ovs-vsctl show | grep 8ePort "qvo2c798bf4-8e"Interface "qvo2c798bf4-8e"###qvo[root@localhost ~(keystone_admin)]# ifconfig qvo2c798bf4-8eqvo2c798bf4-8e: flags=4419mtu 1450inet6 fe80::2859:28ff:fe9f:2a11prefixlen 64scopeid 0x20ether 2a:59:28:9f:2a:11txqueuelen 1000(Ethernet)RX packets 92bytes 5272 (5.1 KiB)RX errors 0dropped 0overruns 0frame 0TX packets 95bytes 6041 (5.8 KiB)TX errors 0dropped 0 overruns 0carrier 0collisions 0

ovs-vsctl show 可以查看Bridge br-ex、Bridge br-int、Bridge br-tun上的接口,ovs_version版本号。

qvo接口信息,tag相当于VLAN号,tag为2

新建cirros-vm2,同样划入vxlan10_net网路,再次查看brctl show

[root@localhost ~(keystone_admin)]# brctl showbridge name bridge id STP enabled interfacesqbr2c798bf4-8e8000.caa3e7b231cd noqvb2c798bf4-8etap2c798bf4-8eqbr881bb899-a18000.42ff2956387e noqvb881bb899-a1tap881bb899-a1

跟cirros-vm1在同一个vxlan10,tag号同为2。

[root@localhost ~(keystone_admin)]# virsh list IdName State---------------------------------------------------- 1 instance-00000001running 2 instance-00000003running[root@localhost ~(keystone_admin)]# virsh dumpxml instance-00000003 | grep bridge[root@localhost ~(keystone_admin)]# virsh dumpxml instance-00000003 | grep inter[root@localhost ~(keystone_admin)]# virsh dumpxml instance-00000003 | grep a1admin

新建cirros-vm3划入vxlan11_net,新增网桥为bqr00515be6-9e,查询网桥位于br-int的接口和tag号。

[root@localhost ~(keystone_admin)]# nova list+--------------------------------------+------------+--------+------------+-------------+--------------------------+| ID | Name | Status | Task State | Power State | Networks |+--------------------------------------+------------+--------+------------+-------------+--------------------------+| 791556ab-6231-4370-8a81-972862da200f | cirros-vm1 | ACTIVE | -| Running | vxlan10_net=172.16.10.11 || 6173f9bf-bbed-4d71-96d3-f7ae660dc21c | cirros-vm2 | ACTIVE | -| Running | vxlan10_net=172.16.10.9|| ea42b670-c084-4e76-ae84-23d6617eb420 | cirros-vm3 | ACTIVE | -| Running | vxlan11_net=172.16.11.4|+--------------------------------------+------------+--------+------------+-------------+--------------------------+[root@localhost ~(keystone_admin)]# virsh dumpxml ea42b670-c084-4e76-ae84-23d6617eb420 | grep bridge

位于vxlan11_net的cirros-vm3实例的tag号为5,由此可见tag号与vxlan网络绑定。

七、认识Bridge br-ex、Bridge br-int、Bridge br-tun

这里以双节点(非单节点packstack部署)的部署方式讲解三个网卡

br-int 负责节点内的网络通信

数据网络,虚拟机之间的数据传输通过这个网络来进行,比如一个虚拟机要连接到另一个虚拟机,虚拟机要连接虚拟路由都是通过这个网络来进行。

br-tun 负责节点之间的网络通信

OpenStack各个模块(节点)之间的交互,连接数据库,连接Message Queue都是通过这个网络来进行。

br-ex 负责外网通信

场景:户调用OpenStack的API,还是创建出来的虚拟机要访问外网,或者外网要ssh到虚拟机

计算节点:集成网桥(br-int)的网络
刚才说到D(这也是一个TAP设备)在br-int上面,现在轮到br-int出场了,br-int是由OpenvSwitch虚拟化出来的网桥,但事实上它已经充当了一个虚拟交换机的功能了。br-int的主要职责就是把它所在的计算节点上的VM都连接到它这个虚拟交换机上面,然后利用下面要介绍的br-tun的穿透功能,实现了不同计算节点上的VM连接在同一个逻辑上的虚拟交换机上面的功能。这个似乎有点拗口,其实就是在管理员看来,所有的VM都是连接在一个虚拟交换机上面的,但事实上这些VM又都是分布在不同的物理主机上面。OK,回到D上面,D通常以qvo开头。在上面还有另一个端口E,它总是以patch-tun的形式出现,从字面就可以看出它是用来连接br-tun的。

计算节点:通道网桥(br-tun)的网络
br-tun在上面已经提及了,这同样是OpenvSwitch虚拟化出来的网桥,但是它不是用来充当虚拟交换机的,它的存在只是用来充当一个通道层,通过它上面的设备G与其他物理机上的br-tun通信,构成一个统一的通信层。这样的话,网络节点和计算节点、计算节点和计算节点这样就会点对点的形成一个以GRE为基础的通信网络,互相之间通过这个网络进行大量的数据交换。这样,网络节点和计算节点之间的通信就此打通了。而图中的G、H正是描画这一通信。

网络节点:通道网桥(br-tun)的网络
正如前面所说,网络节点上也是存在一个br-tun,它的作用同计算节点上的br-tun如出一辙,都是为了在整个系统中构建一个统一的通信层而存在的。所以,这一部分的网络同计算节点上的网络的功能是一致的,因此,也就没有必要多说了。

网络节点:集成网桥(br-int)的网络
网络节点上的br-int也是起了交换机的作用,它通过I、J与br-tun连接在一起。最终的要的是,在这个虚拟交换机上,还有其他两个重要的tap设备M、O,它们分别同N、P相连,而N、P作为tap设备则是分别归属两个namespacerouter和dhcp,没错,正如这两个namespace的名称所示,它们承担的就是router和dhcp的功能。这个router是由l3-agent根据网络管理的需要而创建的,然后,该router就与特定一个子网绑定到一起,管理这个子网的路由功能。router实现路由功能,则是依靠在该namespace中的iptables实现的。dhcp则也是l3-agent根据需要针对特定的子网创建的,在这个namespace中,l3-agent会启动一个dnsmasq的进程,由它来实际掌管该子网的dhcp功能。由于这个两个namespace都是针对特定的子网创建的,因而在现有的OpenStack系统中,它们常常是成对出现的。

网络节点:外部网桥(br-ex)的网络
当数据从router中路由出来后,就会通过L、K传送到br-ex这个虚拟网桥上,而br-ex实际上是混杂模式加载在物理网卡上,实时接收着网络上的数据包。至此,我们的计算节点上的VM就可以与外部的网络进行自由的通信了。当然,前提是我们要给这个VM已经分配了float-ip。


原文链接:https://blog.csdn.net/tantexian/article/details/45395075