OpenStack(3)--vxlan网络实战

目录

一、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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值