码迷,mamicode.com
首页 > 其他好文 > 详细

几句话说清楚openstack的网络问题

时间:2018-06-26 17:14:32      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:instance   openstack   标签   etc   com   pen   比较   命令   dhcp   

openstack网络概念术语比较多,从网络所处的位置来讲可以分为两类: 一个是openstack各个物理节点(host)的物理网卡之间的互联网络。 一个是openstack 里面的虚拟网络世界(neutron),互联用户(tenant)的 虚机,这时候用到的术语一般是provider network(external network,public network), tenant network(private network,internal network)意思都差不多 。两者都是neutron create的网络,但是provider network创建的时候需要 指定provider physical network(关联到host上的物理网络),从而这部分网 络是直接可以和外界联系的。Private network则是虚机instance直接连接的 网络,这个网络保证虚机之间的通信,如果要和外部通信,通常经过一 个router连接到provider network segment上。 Provider physical network是事先在neutron plugin的配置文件里指定的: /etc/neutron/plugins/ml2/openvswitch_agent.ini: bridge_mappings=extnet:br-ex. 比如这里就指定一个可以在neutron create network时候使用的 provider phy network名叫extnet,它被mapping到host上的一个 br-ex open virtual switch. 这个br-ex需要自己手动创建, openstack不会帮助创建。创建的办法可以 是使用ovs-vsctl命令创建,这种是not persistent的,也可以直接写 ifcfg-br-ex文件来创建persistent的。这个br-ex需要手动添加host的物理网口 ,才能真正和外界的物理网络联系起来。方法也是用命令add port或者创建 ifcfg-eth*文件来实现。 一个instance通常挂在private network上,当然也可以增加一个网口直接 挂在provider network上,分配provider network的ip地址。 不管provider 还是internal network, 创建的时候都默认开启dhcp 功能, 创建instance的时候就可以自动获取该网段的ip. Instance创建的时候,在compute host上会对应每一个instance的网口创 建一个tap interface, 那么这个tap interface之间以及和外部provider network 之间是如何联系起来的?很关键的一个是openstack创建的br-int 这个integration bridge. 每个tap interface会被加到这个integration bridge, 所以tap interface之间的通信也就自然实现了。 而provider对应的br-ex又 会被patch port连接到这个br-int,所以虚机和外界通信的通道也建立起 来了(这个通道是为那些create了直接attach到provider network的port的 虚机准备的)。 因为 br-ex是直接连到物理网络的,所以对应不同节点上的instance如果要 使用到这个br-ex对应的provider网络,都需要手动建立br-ex ovs,并绑定物 理端口。 那不同节点上的instance之间如果都attach到同一个neutron create的internal network上,彼此之间又是如何通信的呢?显然需要各个节点上的br-int能 够互联。这个互联是通过vxlan对应的gre tunnel实现的。这个只需要 在neutron里面配置tunnel的end ip就行了: /etc/neutron/plugins/ml2/openvswitch_agent.ini: local_ip=10.10.10.4 (10.10.10.4是本节点的eth*的ip). 在创建了虚机之后就会发现ovs-vsctl show出来有一个bridge br-tun并且生 成了tunnel。这个br-tun把不同的compute host联系起来,而他自身又 被patch到br-int,自然就把不同host上的虚机给打通了。 另外provider network经常提到vlan 的概念,其实就是br-ex绑定的物理网 口上支持vlan, 从而也可以一个网口创建多个外部网络。 neutron配置文件 加上: /etc/neutron/plugins/ml2/ml2_conf.ini:network_vlan_ranges=extent 就可以。在neutron中创建provider网络的时候接可以指定vlan id了。上面 的extnet后面也可以跟一个vlan range,但是 不跟表示所有的。 在使用vlan的provider的时候,涉及到ovs 的openflow, 它的作用就是在 从internal network 的instance tap interface到外部网络的时候,给对应的 流打上正确的vlan标签。因为内部网络的vlan是自动划分的,和外部vlan 不能划等号但是有对应关系(就是create instance的时候哪个网口连到哪 个外部网络决定的对应关系),所以ovs上的openflow的规则就实现这个 内部vlan到外部vlan的转换。 在创建虚机的时候会指定security group,它最终体现为host上的一系 列iptables的rules. Iptables -L可以看到。如果你只是实验网络不关心安全 又担心这些规则有问题限制了一些通信,可以简单的iptables -F临时清空。

几句话说清楚openstack的网络问题

标签:instance   openstack   标签   etc   com   pen   比较   命令   dhcp   

原文地址:http://blog.51cto.com/11772130/2132883

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!