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

文章目录
  1. 1. 目标
  2. 2. 安装配置
    1. 2.1. root用户
    2. 2.2. 控制节点
    3. 2.3. 网络节点
    4. 2.4. 计算节点
  3. 3. 使用
    1. 3.1. 内核配置
    2. 3.2. 创建vxlan网络
    3. 3.3. 授权网络
    4. 3.4. 使用vxlan网络
  4. 4. 网络调试
    1. 4.1. 连接实例
    2. 4.2. 连接外网

目标

《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)

安装配置

root用户

为了避免权限问题,建议切换到root用户进行操作(否则要加很多sudo)。
sudo -i

控制节点

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

网络节点

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

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

计算节点

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

使用

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

内核配置

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

创建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控制台看到的网络拓扑如下:

授权网络

默认情况下,所有项目都可以访问到外部网络,但对于内部网络,只有管理项目可以访问它。因此需要对其他项目进行授权,使项目中的用户可以使用内部网络。

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

使用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,不通。

网络调试

连接实例

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。

连接外网

参考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