在单个物理机上创建两个kvm虚拟机,在虚拟机里安装openstack。主要测试neutron平面网络和vlan的连通性。
物理机设置
brctl创建一个网桥br1。打开网桥br1的混杂模式。
vconfig在网桥br1上创建VLAN 20。为br1.20配置IP地址。
brctl在网桥上增加接口tap5,tap6。(TAP设备事先通过tunctl -b创建)。
物理机执行的命令
192.168.20.254 72:1D:C4:AA:05:98 br1
192.168.20.1 DA:0C:2F:0D:52:7E br1.20
在物理机上创建两个kvm虚拟机,虚拟机分别利用tap5,tap6作为自己的网卡。命令行如下。
kvm虚拟机安装CentOS 7,部署openstack kilo。部署过程略。
以两个CentOS 7虚拟机作为计算节点。即CentOS 7虚拟机是cirros虚拟机的宿主机。
创建一个neutron FLAT外部网络,与物理机br1接口位于同一个网段 192.168.20.0/24 ,网关为 192.168.20.254 。
创建一个neutron VLAN外部网络,地址 192.168.20.0/24,网关为 192168.20.1。VLAN ID 等于20与物理机br1 vlan保持一致。
openstack项目的安全组设置,打开icmp和ssh端口,以方便测试。
例如,两个centos 7上的VLAN 20 cirros可以互相ping通。vlan 20 cirros虚拟机ping通br1.20。从物理机可以ssh到vlan 20 cirros虚拟机。
tcpdump表明,vlan 20 cirros虚拟机的ping数据包都是802.1Q tagged。
所以,一般来说,neutron VLAN情况下,需要在交换机端口设置为trunk口。
从cirros上ping物理机,在CentOS 7上查看
CentOS 7无法ping通br1.20,也不能ping通vlan 20 cirros。
说明计算节点的网络与vlan 20租户网络不在一个VLAN,不能直接连通。
在CentOS7上执行ping,在物理机上 tcpdump -nni br1 得到 untagged 报文
3) flat cirros虚拟机和vlan20 cirros虚拟机之间不能互通。
物理机设置
brctl创建一个网桥br1。打开网桥br1的混杂模式。
vconfig在网桥br1上创建VLAN 20。为br1.20配置IP地址。
brctl在网桥上增加接口tap5,tap6。(TAP设备事先通过tunctl -b创建)。
物理机执行的命令
# brctl addbr br1
# vconfig add br1 20
# ifconfig br1.20 192.168.20.1 up
# ifconfig br1 192.168.20.254/24 up
# brctl addif br1 tap5
# brctl addif br1 tap6
# ip link set br1 promisc on
查看VLAN的情况。
# cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
br1.20 | 20 | br1
物理机的网桥
# brctl show
bridge name bridge id STP enabled interfaces
br1 8000.721dc4aa0598 no tap5
tap6
物理机的网络接口配置,ip地址,mac地址 ,接口名。
192.168.20.254 72:1D:C4:AA:05:98 br1
192.168.20.1 DA:0C:2F:0D:52:7E br1.20
在物理机上创建两个kvm虚拟机,虚拟机分别利用tap5,tap6作为自己的网卡。命令行如下。
# qemu-system-x86_64 -cpu kvm64,+nx,+vmx -enable-kvm \
-smp 2 -m 2560 -name test3 \
-drive file=/vms/testiso3,if=virtio,format=raw,cache=none \
-cdrom centos7.iso -boot d \
-vga qxl \
-usb -usbdevice tablet \
-netdev tap,id=hostnet1,vhost=on,ifname=tap5,script=no -device virtio-net-pci,netdev=hostnet1,id=net1 \
-spice port=5902,addr=0.0.0.0,disable-ticketing,agent-mouse=on \
-device virtio-serial-pci \
-device virtserialport,nr=2,chardev=spicechannel0,name=com.redhat.spice.0 \
-chardev spicevmc,id=spicechannel0,name=vdagent
kvm虚拟机安装CentOS 7,部署openstack kilo。部署过程略。
以两个CentOS 7虚拟机作为计算节点。即CentOS 7虚拟机是cirros虚拟机的宿主机。
创建一个neutron FLAT外部网络,与物理机br1接口位于同一个网段 192.168.20.0/24 ,网关为 192.168.20.254 。
创建一个neutron VLAN外部网络,地址 192.168.20.0/24,网关为 192168.20.1。VLAN ID 等于20与物理机br1 vlan保持一致。
openstack项目的安全组设置,打开icmp和ssh端口,以方便测试。
创建若干个cirros虚拟机,网络分别使用flat和vlan 20。测试结果如下。
1)br1.20与vlan 20 cirros虚拟机的网络接口处于同一个网段VLAN 20。例如,两个centos 7上的VLAN 20 cirros可以互相ping通。vlan 20 cirros虚拟机ping通br1.20。从物理机可以ssh到vlan 20 cirros虚拟机。
tcpdump表明,vlan 20 cirros虚拟机的ping数据包都是802.1Q tagged。
所以,一般来说,neutron VLAN情况下,需要在交换机端口设置为trunk口。
从cirros上ping物理机,在CentOS 7上查看
[root@vlanhost1 ~(keystone_admin)]# ovs-dpctl dump-flows|grep 192.168.20.1
recirc_id(0),skb_priority(0),in_port(2),eth(src=fa:16:3e:29:24:0f,dst=da:0c:2f:0d:52:7e),eth_type(0x8100),vlan(vid=20/0xfff,pcp=0/0x0,cfi=1/1),
encap(eth_type(0x0800),ipv4(src=192.168.20.57/0.0.0.0,dst=192.168.20.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff)),
packets:185, bytes:18130, used:0.780s, actions:drop
2)CentOS 7宿主机与flat cirros虚拟机,同处于flat网络。
CentOS 7无法ping通br1.20,也不能ping通vlan 20 cirros。
说明计算节点的网络与vlan 20租户网络不在一个VLAN,不能直接连通。
在CentOS7上执行ping,在物理机上 tcpdump -nni br1 得到 untagged 报文
ARP, Request who-has 192.168.20.1 tell 192.168.20.5, length 28
在vlan 20 cirros上执行ping,在物理机上 tcpdump -nni br1 -e vlan 得到 tagged 报文
fa:16:3e:29:24:0f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), \
length 46: vlan 20, p 0, ethertype ARP, Request who-has 192.168.20.1 tell 192.168.20.57, length 28
da:0c:2f:0d:52:7e > fa:16:3e:29:24:0f, ethertype 802.1Q (0x8100), \
length 46: vlan 20, p 0, ethertype ARP, Reply 192.168.20.1 is-at da:0c:2f:0d:52:7e, length 28
在实际环境中,计算节点对应的物理交换机端口需要设置为trunk口,并允许接收所需范围的VLAN id报文。
3) flat cirros虚拟机和vlan20 cirros虚拟机之间不能互通。
在物理机上查看网桥br1的接口情况。
# brctl showmacs br1
port no mac addr is local? 说明
3 62:5c:92:ad:a3:41 no centos 7 br-eth1 192.168.92.6
3 72:1d:c4:aa:05:98 yes tap6
2 9e:97:e4:a7:86:41 no centos 7 br-eth1 192.168.92.5
2 b2:f5:45:72:9d:a9 yes tap5
2 fa:16:3e:5a:ad:a3 no vlan20 cirros 192.168.20.52
2 fa:16:3e:ab:79:ee no flat cirros 192.168.20.101
centos 7 宿主机 与 物理机 br1 处于一个 LAN,无需配置路由也能互通。
vlan 20 cirros 虚拟机 192.168.20.52/24 运行arp命令输出192.168.20.1 DA:0C:2F:0D:52:7E
192.168.20.254 DA:0C:2F:0D:52:7E
192.168.20.5 (incomplete)
192.168.20.101 (incomplete)
centos 7 宿主机 192.168.20.5运行 arp命令输出
192.168.20.1 72:1D:C4:AA:05:98
192.168.20.254 72:1D:C4:AA:05:98
192.168.20.52 (incomplete)
192.168.20.101 FA:16:3E:AB:79:EE
需要物理机配路由
route add -host 192.168.20.5 dev br1.20
或者
route add -net 192.168.20.0 netmask 255.255.255.0 dev br1.20
flat cirros 虚拟机 192.168.20.101/24 运行arp命令输出
192.168.20.1 72:1D:C4:AA:05:98
192.168.20.254 72:1D:C4:AA:05:98
192.168.20.5 9E:97:E4:A7:86:41
192.168.20.52 (incomplete)
需要物理机配路由
route add -host 192.168.20.101 dev br1
或者
route add -net 192.168.20.0 netmask 255.255.255.0 dev br1
物理机运行 arp 输出
192.168.20.101 FA:16:3E:AB:79:EE
192.168.20.52 FA:16:3E:5A:AD:A3