一个计算机技术爱好者与学习者

0%

好好学OpenStack:Ubuntu16手动安装OpenStack——vxlan网络进阶

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
2
3
4
5
6
7
8
# line 130: add a value to tenant_network_types
tenant_network_types = vxlan
# line 181: add
[ml2_type_flat]
flat_networks = physnet1
# line 235: add
[ml2_type_vxlan]
vni_ranges = 1:1000

2、重启neutron-server
systemctl restart neutron-server

2.3. 网络节点

这里我们的网络节点和控制节点是同一个节点。

1、创建网桥br-eth2
ovs-vsctl add-br br-eth2

2、把br-eth2连接到eth2
ovs-vsctl add-port br-eth2 eth2

3、vi /etc/neutron/plugins/ml2/ml2_conf.ini,如下修改:

1
2
3
4
5
6
7
8
# line 130: add a value to tenant_network_types
tenant_network_types = vxlan
# line 181: add
[ml2_type_flat]
flat_networks = physnet1
# line 235: add
[ml2_type_vxlan]
vni_ranges = 1:1000

4、vi /etc/neutron/plugins/ml2/openvswitch_agent.ini,如下修改:

1
2
3
4
5
6
7
8
9
# line 117: add
[agent]
tunnel_types = vxlan
l2_population = True
prevent_arp_spoofing = True
# line 195: add (specify IP address of this host for local_ip)
[ovs]
local_ip = 172.16.0.105
bridge_mappings = physnet1:br-eth2

5、重启相关服务

1
2
3
for service in dhcp-agent l3-agent metadata-agent openvswitch-agent; do
systemctl restart neutron-$service
done

2.4. 计算节点

1、vi /etc/neutron/plugins/ml2/ml2_conf.ini,如下修改:

1
2
3
4
5
6
7
8
# line 130: add a value to tenant_network_types
tenant_network_types = vxlan
# line 181: add
[ml2_type_flat]
flat_networks = physnet1
# line 235: add
[ml2_type_vxlan]
vni_ranges = 1:1000

2、vi /etc/neutron/plugins/ml2/openvswitch_agent.ini,如下修改:

1
2
3
4
5
6
7
8
# line 117: add
[agent]
tunnel_types = vxlan
l2_population = True
prevent_arp_spoofing = True
# line 195: add (specify IP address of this host for local_ip)
[ovs]
local_ip = 172.16.0.106

3、重启openvswitch-agent
systemctl restart neutron-openvswitch-agent

3. 使用

在控制节点测试使用vxlan,实际上可以在任意节点使用。

3.1. 内核配置

1、vim /etc/sysctl.conf,如下修改:

1
2
3
4
5
6
7
8
# line 19, uncomment and change
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
# line 28, uncomment
net.ipv4.ip_forward=1
# end line, add
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

2、使内核配置生效
sysctl -p

3.2. 创建vxlan网络

1、使admin环境生效
. admin-openrc

2、创建路由router01
openstack router create router01

3、创建内部网络int_net
openstack network create int_net --provider-network-type vxlan

4、在内部网络中创建子网

1
2
3
openstack subnet create subnet1 --network int_net \
--subnet-range 192.168.100.0/24 --gateway 192.168.100.1 \
--dns-nameserver 10.0.0.10

5、把内部网络int_net连接到路由router01上
openstack router add subnet router01 subnet1

6、创建外部网络ext_net

1
2
3
openstack network create \
--provider-physical-network physnet1 \
--provider-network-type flat --external ext_net

7、在外部网络中创建子网subnet2

1
2
3
4
openstack subnet create subnet2 \
--network ext_net --subnet-range 10.0.0.0/24 \
--allocation-pool start=10.0.0.200,end=10.0.0.254 \
--gateway 10.0.0.1 --dns-nameserver 10.0.0.10 --no-dhcp

8、把ext_net的网关设置为router01
openstack 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
2
3
netID=$(openstack network list | grep int_net | awk '{ print $2 }') 
prjID=$(openstack project list | grep siat | awk '{ print $2 }')
openstack network rbac create --target-project $prjID --type network --action access_as_shared $netID

3.4. 使用vxlan网络

1、切换到siat项目的voidking用户环境
. voidkingrc

2、查看实例模板、镜像、网络

1
2
3
openstack flavor list
openstack image list
openstack network list

3、安全组和密钥使用《Ubuntu16手动安装OpenStack——创建实例》一文中创建的secgroup01和vkkey。

4、创建实例

1
2
netID=$(openstack network list | grep int_net | awk '{ print $2 }') 
openstack server create --flavor m1.tiny --image cirros --security-group secgroup01 --nic net-id=$netID --key-name vkkey cirros1

5、查看实例
openstack server list

6、给实例添加浮动IP

1
2
openstack floating ip create ext_net
openstack server add floating ip cirros1 10.0.0.206

7、查看浮动IP
openstack 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
2
ifconfig eth2 0.0.0.0 
ifconfig br-eth2 10.0.0.1/24

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
2
3
iptables -I INPUT -i br-eth2 -j ACCEPT
iptables -I INPUT -i eth2 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j SNAT --to 172.16.0.105

2、登录cirros1
ssh cirros@10.0.0.206

2、测试访问
ping 8.8.8.8 -c3

3、修改resolv.conf
sudo vi /etc/resolv.conf
添加:

1
nameserver 180.76.76.76

4、测试访问
ping www.baidu.com -c3