1. 目标
《Ubuntu16手动安装OpenStack——openvswitch》一文中,配置好了openvswitch作为虚拟交换机。
《Ubuntu16手动安装OpenStack——vxlan网络》一文中,使用linuxbridge虚拟交换机配置过vxlan网络模式。
因为linuxbridge换成了openvswitch,所以,本文就再来研究一下vxlan网络模式的配置。主要参考OpenStack Pike : Neutron Network (VXLAN)和openstack使用openvswitch实现vxlan的方法。如果要配置flat网络模式,参考OpenStack Pike : Neutron Network (FLAT)。
2. 安装配置
2.1. root用户
为了避免权限问题,建议切换到root用户进行操作(否则要加很多sudo)。sudo -i
2.2. 控制节点
0、备份配置(可选操作):cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}
1、vi /etc/neutron/plugins/ml2/ml2_conf.ini
,如下修改:
1 | # line 130: add a value to tenant_network_types |
2、重启neutron-serversystemctl restart neutron-server
2.3. 网络节点
这里我们的网络节点和控制节点是同一个节点。
1、创建网桥br-eth2ovs-vsctl add-br br-eth2
2、把br-eth2连接到eth2ovs-vsctl add-port br-eth2 eth2
3、vi /etc/neutron/plugins/ml2/ml2_conf.ini
,如下修改:
1 | # line 130: add a value to tenant_network_types |
4、vi /etc/neutron/plugins/ml2/openvswitch_agent.ini
,如下修改:
1 | # line 117: add |
5、重启相关服务
1 | for service in dhcp-agent l3-agent metadata-agent openvswitch-agent; do |
2.4. 计算节点
1、vi /etc/neutron/plugins/ml2/ml2_conf.ini
,如下修改:
1 | # line 130: add a value to tenant_network_types |
2、vi /etc/neutron/plugins/ml2/openvswitch_agent.ini
,如下修改:
1 | # line 117: add |
3、重启openvswitch-agentsystemctl restart neutron-openvswitch-agent
3. 使用
在控制节点测试使用vxlan,实际上可以在任意节点使用。
3.1. 内核配置
1、vim /etc/sysctl.conf
,如下修改:
1 | # line 19, uncomment and change |
2、使内核配置生效sysctl -p
3.2. 创建vxlan网络
1、使admin环境生效. admin-openrc
2、创建路由router01openstack router create router01
3、创建内部网络int_netopenstack network create int_net --provider-network-type vxlan
4、在内部网络中创建子网
1 | openstack subnet create subnet1 --network int_net \ |
5、把内部网络int_net连接到路由router01上openstack router add subnet router01 subnet1
6、创建外部网络ext_net
1 | openstack network create \ |
7、在外部网络中创建子网subnet2
1 | openstack subnet create subnet2 \ |
8、把ext_net的网关设置为router01openstack router set router01 --external-gateway ext_net
此时,在horizon控制台看到的网络拓扑如下:
3.3. 授权网络
默认情况下,所有项目都可以访问到外部网络,但对于内部网络,只有管理项目可以访问它。因此需要对其他项目进行授权,使项目中的用户可以使用内部网络。
1、查看rbac网络openstack network rbac list
2、查看rbac网络细节openstack network rbac show [rbac-id]
3、查看网络openstack network list
4、查看项目openstack project list
5、授权int_net给siat项目,权限为access_as_shared
1 | netID=$(openstack network list | grep int_net | awk '{ print $2 }') |
3.4. 使用vxlan网络
1、切换到siat项目的voidking用户环境. voidkingrc
2、查看实例模板、镜像、网络
1 | openstack flavor list |
3、安全组和密钥使用《Ubuntu16手动安装OpenStack——创建实例》一文中创建的secgroup01和vkkey。
4、创建实例
1 | netID=$(openstack network list | grep int_net | awk '{ print $2 }') |
5、查看实例openstack server list
6、给实例添加浮动IP
1 | openstack floating ip create ext_net |
7、查看浮动IPopenstack floating ip show 10.0.0.206
8、再次查看实例openstack server list
可以发现,cirros1已经有了两个IP地址。
9、测试连通ping 10.0.0.206
,不通。
4. 网络调试
4.1. 连接实例
1、测试网关ping 10.0.0.1
,不通。
2、将br-eth2的ip设置为10.0.0.1
1 | ifconfig eth2 0.0.0.0 |
3、测试连通ping 10.0.0.206
,已经连通,nice。
4、ssh登录实例ssh cirros@10.0.0.206
,默认密码为gocubsgo。
或者vnc登录实例openstack console url show cirros1
查看到url后,在浏览器登录cirros1。
4.2. 连接外网
参考Ubuntu16手动安装OpenStack——实例访问外网,配置实例连接外网。
1、在控制节点执行
1 | iptables -I INPUT -i br-eth2 -j ACCEPT |
2、登录cirros1ssh cirros@10.0.0.206
2、测试访问ping 8.8.8.8 -c3
3、修改resolv.confsudo vi /etc/resolv.conf
添加:
1 | nameserver 180.76.76.76 |
4、测试访问ping www.baidu.com -c3