分享

配置Openstack 中最复杂灵活的网络模型:每个租户都拥有自己的路由及内部网络

问题导读
1、你如何理解Openstack 的网络模型?
2、如何通过iptables 设置让虚拟机nat上网?
3、Controller Node需要配置哪些?





首先,我们看一下此模型的图例:
1.png

从图中我们可以看出,TenantA与TenantC分别有自己的私网和路由,通过自己的路由最终连接到外部网络。

下图展示了这个网络模型的逻辑配置环境:
2.png

注意区别Openstack网络模型中的几个概念网络:
  1. Management Network: 管理网络,连接所有节点。
  2. External Network: 外部网络,虚拟机通过此接口连通外部网络
  3. Data Network: 虚拟机网络,提供之间内部数据线通讯的网络.
复制代码


而在我的实际部署环境中,我将Controller Node 与 Network Node 合并,同时增加一个Compute Node ,即一个Ctroller Node + 2个ComputerNode

图中还有一个router负责与外网通讯的,则由我自己的pc担当。
如下图所示:
3.png

本文的前提假设是读者对Openstack 各组件功能已经比较熟悉,并能熟练安装配置。
以上图例所示各组件已经安装完成并配置正确。

Controller Node配置:
1.  安装apt-get install quantum* .
2. 配置/etc/quantum/quantum.conf
  1. [DEFAULT]
  2. core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2
  3. control_exchange = quantum
  4. rabbit_host = controlnode
  5. notification_driver = quantum.openstack.common.notifier.rabbit_notifier
  6. [keystone_authtoken]
  7. admin_tenant_name=servicetenant
  8. admin_user=quantum
  9. admin_password=servicepassword
复制代码

3. 配置 /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini
  1. [DATABASE]
  2. sql_connection = mysql://root:root@controlnode:3306/ovs_quantum?charset=utf8
  3. [OVS]
  4. tenant_network_type = gre
  5. tunnel_id_ranges = 1:1000
  6. enable_tunneling = True
  7. local_ip = 100.10.10.52
复制代码

4. 重启服务
service quantum-* restart
可以用过以下脚本重启所有网络组件
  1. #!/bin/sh
  2. cd /etc/init.d/; for i in $( ls quantum-* ); do sudo service $i restart; done
  3. echo "===============Quantum Service Status================="
  4. cd /etc/init.d/; for i in $( ls quantum-* ); do sudo service $i status; done
复制代码

保存为文件x.sh
使用 bash x.sh即可

5. 添加External Network bridge
  1. ovs-vsctl add-br br-ex
  2. ovs-vsctl add-port br-ex eth2
复制代码

6.配置/etc/quantum/l3_agent.ini
  1. [DEFAULT]
  2. interface_driver=quantum.agent.linux.interface.OVSInterfaceDriver
  3. use_namespaces=True
复制代码

7.配置 /etc/quantum/quantum.conf

  1. [DEFAULT]
  2. core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2
  3. control_exchange = quantum
  4. rabbit_host = controlnode
  5. notification_driver = quantum.openstack.common.notifier.rabbit_notifier
  6. allow_overlapping_ips = True
复制代码

8.重启所有网络服务
  1. service quantum-* restart
复制代码


Compute Node 1配置:
1.  安装l2 agent:
  1. apt-get install quantum-plugin-openvswitch-agent
  2. ovs-vsctl --may-exist add-br br-int
复制代码


2. 配置 /etc/quantum/quantum.conf
  1. [DEFAULT]
  2. core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2
  3. control_exchange = quantum
  4. rabbit_host = controlnode
  5. notification_driver = quantum.openstack.common.notifier.rabbit_notifier
复制代码

3. 配置 /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini

  1. [DATABASE]
  2. sql_connection = mysql://root:root@controlnode:3306/ovs_quantum?charset=utf8
  3. [OVS]
  4. tenant_network_type = gre
  5. tunnel_id_ranges = 1:1000
  6. enable_tunneling = True
  7. local_ip = 100.10.10.51
复制代码

4. 重启服务
  1. service quantum-plugin-openvswitch-agent restart
复制代码

Compute Node2 配置参考Compute Node1 .
至此,所有配置基本完成,下面可以通过Openstack Horizon Dashboard来操作各个租户的网络路由了.

首先,创建External Network
1.png

这里我使用Admin 和Dev两个租户分别代表逻辑图中的TenantA,TenantC
其后,创建租户Admin的私网Admin-Net
2.png

创建Admin的Router Admin-R1
3.png


切换到租户Dev 再创建Dev的私网和路由,参考逻辑图.
最终的网络图如下:
当然这些步骤也可以在Controller Node上通过quantum 命令行实现。
1.png


最后提示:别忘了设置路由的网关为Ext-Net

下面就可以创建虚拟机来测试了。同样可以在Dashboard上完成.
下面是我的创建的虚拟机在Dashboard上的网络拓扑图:
2.png



这样的配置基本模拟了现实IDC网络环境中的主要设备,通过其扩展可以实现企业私有云的所有网络模型部署.

如果在单机的情况下. 可以在br-ex上面设置ext-net的网关
Ext-net的网关
  1. sudo ip addr add 30.0.0.100/24 dev br-ex
  2. sudo ip link set br-ex up
复制代码

然后通过iptables 可以设置虚拟机nat上网
  1. iptables -t nat -I POSTROUTING -o eth1 -s 30.0.0.0/24 -j SNAT --to 10.51.166.17
复制代码





已有(1)人评论

跳转到指定楼层
skywell 发表于 2014-12-1 21:45:42
您好,小弟今日对openstack的网络也有个疑难解决不了,请问能帮着看下么
非常感谢

这是小弟发的问题:
http://www.aboutyun.com/forum.ph ... amp;extra=#pid54642

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条