目录
一、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,flat
tenant_network_types=vxlan
mechanism_drivers=openvswitch
extension_drivers=port_security,qos
path_mtu=0
[ml2_type_flat]
flat_networks=*
[ml2_type_geneve]
[ml2_type_gre]
[ml2_type_vlan]
[ml2_type_vxlan]
vni_ranges=10:100
vxlan_group=224.0.0.1
[securitygroup]
firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group=True
二、上传cirros镜像
source /root/keystonerc_admin
mkdir /opt/images
cd /opt/images
wget https://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
glance 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 --progress
glance 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-----
MIIEogIBAAKCAQEAqc2lh8gIDfHxGm7nd6NG4eKCLtOtAC9aEfKCkeN4W0UegHoG
N5thYnZJQhM7hKcwV/pME5e6NlvT/hj0vCVUutGmuSn8YSxD3Z3qyS+OArtichrk
kzDanPy0CLri18HpjGaSmH8BdKrq0KK0JwkXgKXvLR2e30olyigb8fz/v+q1KC7f
ab+trF/TNZwWUauN6qUjItcRGfQB308b81acXEy9e3DI8aO9Jj7egfkv2DDv+5PZ
K62i+raXJewysNWRM0PgHNXty+FVnjOBeAOMmBIw+G4QGFpckHgF3e7oobHcH/Ou
NXc+EL/kLerhI+4OCQnJHQO/Bgd9JJU7Px9KCQIDAQABAoIBADv8Wi3NjIrgnbwo
0byCAdhqnHLOdJ9MGxWcBmRjZ3FWyZ+5e9jJG24dO2QMR0plhb6OvbFuOGpbplht
mIee6H/W8H8ZRf9OE+uGjhrkodZ1PCHzPiyBZblvzGoJG3n9FvRyh/c3ZtxARRPP
ZrUjkRnxhLz7adSX7SGtabHjHrY9MJS//8Z9Lg0mQvnTDIAMyH9DPp9ZwwTlBsNz
BNeY4QDk7HF88IkbfwN4+zMaPga68WXPfDoJ1aw8zkbwjTdHUuVtas4/kfbIhdKX
M0+W3ImJm3KaLrpq7Pc9Ku3pkHoURHzonGb9LyJcQver70hPIagMwT29GQrdS4oC
pQ5BacECgYEA3M+MGHLpdu59Bbh3O8tN9v2AheMr9SWZkMu9NXC2lcCNlhv9VNwh
HsHpV2rRfcy21xHBAS0MfHvW0xw97YD+ehXADH9Ha1rywSAxkHxpxC8tIAU6BCsP
frXcBdKFVYzHQ2lH9MItH02hURRY7IhKYyZMPJM3cln0rs5lnIbLI+MCgYEAxN0k
DdYkAefx1t1SExqyamMEcEhr7GDkTwO3ULhu7Kuaj6710ciYSjDDOzxsrlGdNs3c
X/Bot4BDE8lLrl3J4siXSPW5Uj/PTZoroPDfiAHcV5UFU1nQLlPc568wRV/ghy+J
pzt0VfcvJV4MqNcZ6lHcwrxqNkrgIv/ex2aytiMCgYAF1sMonllIGNRbg147yYt9
PYTZhYFTETR3XLvbHujlGttjncfcJ5oEmzIVarCxd+lZ1JFa+5r567hpirSkhCW2
ir6yVedIknYa30QQQwn08x5pW1oGZDEbs6lmygNWmMtoH++ULFJPIplicHxNfOki
qA+aBnaP4osS2EhdlD7o6wKBgF4hw8Cd+V+z8a6k6z7ZUCCQsimiZ4CCoAisJTaC
yf9+2owDw+UIvtES2fd0IB+GRN9UtiBlyxybRveqE/cPP56h/bzUSkXq3wwjQONW
6fuVsC9swTwmwOW2EfXyjelOPAVIFNETG8CTTkbW3sTI/cpOVHoFL+BAE0aJBJRi
JefzAoGASyHgMuTolmxLThCZCHNTXwp7oekmVKgTbAnfOFDbVjsGIVPb+7DnooAz
YOouO4DpJcO0Z1cKe/bt6x7bojhzKLTsPN+oXoC7sda1cW0DMnAvq49xXNeRe7za
aBBse+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?token=947808c4-4c69-4ac0-9da2-e88712e99fed |
+-------+-------------------------------------------------------------------------------------+
进入控制台查看IP,cirros-vm1分配到的ip为172.16.10.6
创建实例报错,查看日志,第二条报错直接说出原因,运行内存不足,使用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 ERROR
2023-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' instead
2023-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-vm3 172.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 ERROR
2023-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' instead
2023-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 show
bridge name bridge id STP enabled interfaces
添加vxlan10_net后 ,brctl show 仍然没有返回任何网络信息
新建cirros-vm1并加入vxlan10_net
[root@localhost images(keystone_admin)]# brctl show
bridge name bridge id STP enabled interfaces
qbr2c798bf4-8e 8000.6a4a85d10584 no qvb2c798bf4-8e
tap2c798bf4-8e
使用virsh list查看实例的instanceID,使用virsh dumpxml instanceID或者virsh dumpxml 实例ID(不是实例名称),可查看详细信息,其中就包括网卡信息。
virsh dumpxml instanceID
virsh dumpxml 实例ID
[root@localhost ~(keystone_admin)]# virsh list
Id Name State
----------------------------------------------------
1 instance-00000001 running
[root@localhost images(keystone_admin)]# virsh dumpxml instance-00000001 | grep bridge
<interface type='bridge'>
<source bridge='qbr2c798bf4-8e'/>
[root@localhost images(keystone_admin)]# virsh dumpxml instance-00000001 | grep inter
<interface type='bridge'>
</interface>
[root@localhost images(keystone_admin)]# virsh dumpxml instance-00000001 | grep 8e
<source bridge='qbr2c798bf4-8e'/>
<target dev='tap2c798bf4-8e'/>
每新建一个实例,会相应生产对应的qbr(网桥)、qvb、tap、qvo(接口),图片中的具体信息对不上没关系,我们只关注拓扑关系。
[root@localhost images(keystone_admin)]# brctl show
bridge name bridge id STP enabled interfaces
qbr2c798bf4-8e 8000.6a4a85d10584 no qvb2c798bf4-8e
tap2c798bf4-8e
###ifconfig qbrID/qvbID/tapID/qvoID 可查询相应信息,都会以网卡的形式体现在宿主机上。
###qbr
[root@localhost ~(keystone_admin)]# ifconfig qbr2c798bf4-8e
qbr2c798bf4-8e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
ether ca:a3:e7:b2:31:cd txqueuelen 1000 (Ethernet)
RX packets 163 bytes 6452 (6.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
###qvb
[root@localhost ~(keystone_admin)]# ifconfig qvb2c798bf4-8e
qvb2c798bf4-8e: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1450
inet6 fe80::c8a3:e7ff:feb2:31cd prefixlen 64 scopeid 0x20<link>
ether ca:a3:e7:b2:31:cd txqueuelen 1000 (Ethernet)
RX packets 95 bytes 6041 (5.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 92 bytes 5272 (5.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
###tap
[root@localhost ~(keystone_admin)]# ifconfig tap2c798bf4-8e
tap2c798bf4-8e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet6 fe80::fc16:3eff:feee:1305 prefixlen 64 scopeid 0x20<link>
ether fe:16:3e:ee:13:05 txqueuelen 1000 (Ethernet)
RX packets 84 bytes 4616 (4.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 88 bytes 4975 (4.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
###查看Bridge br-ex、Bridge br-int、Bridge br-tun的接口
[root@localhost ~(keystone_admin)]# ovs-vsctl show | grep 8e
Port "qvo2c798bf4-8e"
Interface "qvo2c798bf4-8e"
###qvo
[root@localhost ~(keystone_admin)]# ifconfig qvo2c798bf4-8e
qvo2c798bf4-8e: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1450
inet6 fe80::2859:28ff:fe9f:2a11 prefixlen 64 scopeid 0x20<link>
ether 2a:59:28:9f:2a:11 txqueuelen 1000 (Ethernet)
RX packets 92 bytes 5272 (5.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 95 bytes 6041 (5.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 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 show
bridge name bridge id STP enabled interfaces
qbr2c798bf4-8e 8000.caa3e7b231cd no qvb2c798bf4-8e
tap2c798bf4-8e
qbr881bb899-a1 8000.42ff2956387e no qvb881bb899-a1
tap881bb899-a1
跟cirros-vm1在同一个vxlan10,tag号同为2。
[root@localhost ~(keystone_admin)]# virsh list
Id Name State
----------------------------------------------------
1 instance-00000001 running
2 instance-00000003 running
[root@localhost ~(keystone_admin)]# virsh dumpxml instance-00000003 | grep bridge
<interface type='bridge'>
<source bridge='qbr881bb899-a1'/>
[root@localhost ~(keystone_admin)]# virsh dumpxml instance-00000003 | grep inter
<interface type='bridge'>
</interface>
[root@localhost ~(keystone_admin)]# virsh dumpxml instance-00000003 | grep a1
<nova:project uuid="26f0265d7ca347239ea13ed32279ff7a">admin</nova:project>
<source bridge='qbr881bb899-a1'/>
<target dev='tap881bb899-a1'/>
新建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
<interface type='bridge'>
<source bridge='qbr00515be6-9e'/>
位于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