1. 程式人生 > >幾句話說清楚openstack的網絡問題

幾句話說清楚openstack的網絡問題

互聯網絡 成了 vsc 限制 table 聯系 就會 需要 手動

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的網絡問題