1. 程式人生 > >Kuryr kubernetes nested by vlan

Kuryr kubernetes nested by vlan

Kuryr kubernetes 除了支援bare-metal 部署,還支援nested 部署,也就是容器部署在VM內而不是在物理主機上。POD部署在VM內時就要考慮網路如何穿透VM。當前Kuryr支援vlan 和macvlan兩種方法。 vlan 方法主要依靠neutral 提供的vlan trunk port 功能,即VM接入的port是trunk 而不是常見的具體某個tag的vlan port。 這是OpenStack Kilo版本的特性,由 VLAN trunking networks for NFV 定義。這個特性為Neutron network增加一個屬性“vlan-transparent”,當vlan-transparent為True時,表明在這個Neutron network是一個Trunk network。在這個Neutron network中的虛機可以使用Linux VLAN Trunk功能。
具體見圖


左上角是正常的OpenVSwitch上連線的虛機。再看虛線框內,上半部分與原來虛機伸出的部分相同,下半部分就是之前展示的新增的網橋。網橋向上通過qvo連線虛機。向下通過patch port pair <tpt-tpi>連線parent port,從虛機出來的不帶VLAN Tag的幀,從這對patch port走到br-int。同時向下通過patch port pair <spt-spi>連線subport,一個subport對應一對spt-spi,注意的是每個spt都帶有相應的VLAN Tag,根據OVS的特性,所有從虛機出來的,帶上相應VLAN Tag的幀都會發送到相應的spt,再通過spi傳送到br-int。
所以,從虛機出來的Ethernet Frame,根據所攜帶的VLAN Tag(或者不帶VLAN Tag),在tbr網橋上,可以分配到不同的patch port,進而轉發到br-int上的不同埠。也就是說,在tbr上,從虛機裡一塊網絡卡發出來的Ethernet Frame被分流了。
當Kuryr 通過 vlan nested 部署時候,Kuryr 通過neutron 申請vlan 型別的網路,並申請相應的port,並掛載到POD 內,這樣帶有vlan tag的網路資料包就可以通過VM的vlan trunk 到達外部。 具體見圖