OpenStack網路指南(4)網路名稱空間(Network namespaces)
阿新 • • 發佈:2019-02-17
名稱空間是一種用於定義特定識別符號集合的方式。 使用名稱空間,可以在不同的名稱空間中多次使用相同的識別符號。 您還可以將識別符號集限制為對特定程序可見。
例如,Linux為網路和程序提供名稱空間等。 如果程序在程序名稱空間中執行,則它只能檢視同一名稱空間中的其他程序並與其通訊。 因此,如果特定程序名稱空間中的shell執行ps waux,它將只顯示同一名稱空間中的其他程序。
Linux網路名稱空間
在網路名稱空間中,作用域“識別符號”是網路裝置;因此給定的網路裝置(如eth0)存在於特定的名稱空間中。 Linux使用預設網路名稱空間啟動,因此如果您的作業系統沒有做任何特殊操作,那就是所有網路裝置所在的位置。但也可以建立更多的非預設名稱空間,並在這些名稱空間中建立新裝置,或者將現有裝置從一個名稱空間移動到另一個名稱空間。 每個網路名稱空間也有自己的路由表,事實上這是名稱空間存在的主要原因。路由表由目的地IP地址是關鍵所在,因此如果您希望相同的目標IP地址在不同時間表示不同的東西,那麼網路名稱空間是您需要的 - 這是OpenStack Networking需要的功能,它提供重疊的IP地址在不同的虛擬網路。 每個網路名稱空間也有自己的一套iptables(用於IPv4和IPv6)。因此,您可以對不同名稱空間中具有相同IP地址的流以及不同的路由應用不同的安全性。 任何給定的Linux程序在特定的網路名稱空間中執行。預設情況下,這是從其父程序繼承的,但具有正確功能的程序可以切換到不同的名稱空間;在實踐中,這主要是使用ip netns exec NETNS COMMAND ...呼叫完成的,它啟動COMMAND在名為NETNS的名稱空間中執行。假設這樣的程序向IP地址A.B.C.D傳送訊息,名稱空間的作用是在該名稱空間的路由表中查詢A.B.C.D,並且將確定訊息通過其傳輸的網路裝置。
虛擬路由和轉發(VRF)
虛擬路由和轉發是一種IP技術,允許路由表的多個例項在同一路由器上同時共存。 它是上述網路名稱空間功能的另一個名稱。