几句话说清楚openstack的网络问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几句话说清楚openstack的网络问题相关的知识,希望对你有一定的参考价值。
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的网络问题的主要内容,如果未能解决你的问题,请参考以下文章
关于取消/清空ECharts地图区域选中状态的问题 我有几句话说