Docker容器虛擬化

2022-06-08 15:42:10 字數 1437 閱讀 9864

network namespace 是 linux 核心提供的功能,是實現網路虛擬化的重要功能,它能建立多個隔離的網路空間,它們有獨自網路棧資訊。不管是虛擬機器還是容器,執行的時候彷彿自己都在獨立的網路中。而且不同network namespace的資源相互不可見,彼此之間無法通訊。

假如我們的物理機有4塊物理網絡卡,我們要建立4個命名空間,而這些裝置是可以單獨關聯至某個單獨的命名空間使用的!

但如果我們所擁有的命名空間數量超過物理網絡卡數量呢?

如下圖所示:

那麼此時如果再有乙個命名空間,它有建立了一對虛擬網絡卡,一端連線命名空間,一端連線虛擬交換機,此時就相當於兩個命名空間連線到了同乙個交換機網路中,此時如果兩個命名空間的網絡卡位址配置在同一網段,那麼很顯然他們之間是可以互相通訊的。

如下圖所示:

如果在同乙個物理機上的兩個容器想通訊,我們的辦法就是在這台主機上建立乙個虛擬交換機,而後讓兩個容器各自用純軟體的方式建立一對虛擬網絡卡,一半在容器上,一半在虛擬交換機上,從而實現通訊。

如下圖所示:

這就是單節點上兩個容器間的通訊方式。

單節點上兩個容器之間的通訊也有一些複雜情況,比如我們期望構建的容器要跨交換機通訊呢?

我們做兩個虛擬交換機,兩個交換機上各自連線不同的容器,如上圖所示。

此時如果要c1和c3通訊又該如何實現呢?

如上圖所示,此時如果c1要與c5進行通訊又該如何實現呢?

如果一來,我們既不能橋接,又需要與外部來實現通訊,那就只能使用nat技術了。

這麼做要進行兩次nat轉換,所以效率會比較低。

此時我們可以採用一種叫做overlay network(疊加網路)的技術來實現不同節點間容器的相互通訊功能。

docker容器虛擬化

network namespace 是 linux 核心提供的功能,是實現網路虛擬化的重要功能,它能建立多個隔離的網路空間,它們有獨自網路棧資訊。不管是虛擬機器還是容器,執行的時候彷彿自己都在獨立的網路中。而且不同network namespace的資源相互不可見,彼此之間無法通訊。假如我們的物理機...

docker容器虛擬化

network namespace 是 linux 核心提供的功能,是實現網路虛擬化的重要功能,它能建立多個隔離的網路空間,它們有獨自網路棧資訊。不管是虛擬機器還是容器,執行的時候彷彿自己都在獨立的網路中。而且不同network namespace的資源相互不可見,彼此之間無法通訊。假如我們的物理機...

docker容器虛擬化

目錄network namespace 是 linux 核心提供的功能,是實現網路虛擬化的重要功能,它能建立多個隔離的網路空間,它們有獨自網路棧資訊。不管是虛擬機器還是容器,執行的時候彷彿自己都在獨立的網路中。而且不同network namespace的資源相互不可見,彼此之間無法通訊。假如我們的物...