NAMESPACE

NAMESPACE是Linux提供的一種虛擬化機制跟資源隔離特性。

虛擬化技術的出現,打破了原有的一台機器只能部署一個版本應用的限制。這樣使得原有的PID、NETWORK、IPC等進程只屬於各自的namespace而不是全局進程,同時也就打破了原有“一台機器上只能有一個PID=1的進程”這個固有思維。

在硬件輔助虛擬化的世界裏,每台虛擬機是一個namespace。在容器的世界裏,每個docker是一個namespace。在雲原生的世界裏每個pod是一個namespace。

在主機層面,可以看到若干個PID是1的進程,它們屬於各自的namespace,彼此之間相互獨立,互不影響。

從登錄用户層面,每個用户只能看到自己所在namespace的所有資源信息,這樣看起來像是每個用户都在使用一個獨立的Linux系統。

CGROUP

  1. cgroup全名control group,它是Linux內核提供的一項功能,運行方式是Linux系統裏運行的一些進程組。
  2. cgroup提供了以下功能:
  • 對進程進行資源限制;
  • 通過設置權重參數來讓某個進程多佔用系統資源;
  • 記錄和報告進程的資源限制情況;
  • 變更該cgroup裏所有進程的狀態。
  1. cgroup跟namespace的區別:namespace提供物理隔離,cgroup在namespace的基礎上提供細緻的限制。

ROOTFS

  1. rootfs在物理機裏可以理解為Linux操作系統裏的/,它只包含滿足系統正常運行所必需的文件和目錄。
  2. 在docker裏執行docker pull centos:7.9獲取到的鏡像就是CentOS7.9的rootfs
  3. 在現代Linux發行版裏,Linux內核通常加載的是initramfs,這是一個更加精簡的基於內存的臨時rootfs。在系統成功啓動後,將真正的rootfs掛載到/目錄,並丟棄initramfs。

UnionFS

  1. 中文名叫“聯合文件系統”。它的核心是想是“分層疊加”,用搭積木的方式構成一個鏡像。
  2. 當用户需要新增、修改鏡像時,文件系統會從鏡像第一層開始自上至下去尋找用户想要修改的內容在鏡像的哪一層。如果不在第一層,文件系統會先將那一層的內容複製到第一層,在第一層修改,保存。
  3. 當用户需要刪除鏡像時,文件系統只會刪除用户進行過增刪改的上層文件。

網橋

  1. 網橋是一種網絡設備,工作在 OSI 模型的數據鏈路層(第二層)。可以類比為二層交換機的初級版。
  2. 它的作用是連接多個網絡段,根據 MAC 地址轉發數據幀。
  3. 網橋分類:
物理網絡的網橋

網絡A (碰撞域1)        網絡B (碰撞域2)

        │                            │

        ├─計算機1              ├─計算機3

        ├─計算機2              ├─計算機4

        │                            │

└───────┐ ┌──────┘

                   │ │

       [ 網橋 ] (只有2個端口)

虛擬網絡的網橋

           [ 網橋 br0 ]

                  │

┌───────┼───────┐

 |                  |                 |

eth0     veth0    veth1 ← 連接的接口

(物理)    (容器1)  (容器2)

工作方式:

  • 兩個端口不能同時收發(半雙工)
  • 需要先把整個幀讀入內存,檢查CRC,再轉發(存儲轉發)
  • 有轉發延遲
Docker網橋

由docker網絡模型引出來的一些網絡名詞_rootfs

工作方式及特性:

[docker0 網橋: 172.17.0.1]

┌────────┴────────┐

                                  │                                       │

                          vethXXXXXX                       vethYYYYYY

                                 │                                        │

                ┌──────┴──────┐          ┌─────┴─────┐

                │                               │         │                           │

                  [容器A網絡命名空間]             [容器B網絡命名空間]

                │                               │         │                           │

                    eth0:172.17.0.2            │        eth0:172.17.0.3

                │                               │         │                           │

                      lo, route, ...                              lo, route, ...

                     iptables, etc.                           iptables, etc.

NAT 出網: 172.17.0.2 → 主機IP

端口映射: 主機:8080 → 172.17.0.2:80

  • Docker網橋連接的容器,提供網絡隔離
  • Docker網橋的IP一定是容器的默認網關
  • 因容器之間、容器跟宿主機通過namespace進行網絡隔離的,所以Docker網橋提供NAT轉發、端口映射、服務發現等功能。
  • Docker網橋的連接對象是固定的,網橋的兩個接口必須是一對veth pairs

veth-pair

  1. veth-pair 是 Linux 內核提供的一種虛擬網絡設備對,就像一根虛擬的"網線",兩端分別連接兩個Network Namespace。
  2. 核心特性:
  • 成對出現 - 總是創建一對接口(veth0 和 vethxxxxxx)
  • 全雙工通信 - 一端發送的數據會從另一端接收
  • 跨命名空間連接 - 通常用於連接容器、虛擬機或不同網絡命名空間
  1. 工作方式:

(1)沒有宿主機沒有新增容器的時候,宿主機的虛擬網卡只有docker0網橋、。

由docker網絡模型引出來的一些網絡名詞_cgroup_02

(2)啓動一個容器

由docker網絡模型引出來的一些網絡名詞_cgroup_03

(3)查看宿主機網卡狀態

由docker網絡模型引出來的一些網絡名詞_veth-pairs_04

(4)查看數據流量轉發情況---感謝deepseek解析---

[root@test-kylin ~]# iptables -t nat -L -n
# 1. 容器出網的 SNAT(MASQUERADE)規則
Chain POSTROUTING (policy ACCEPT)
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0
# ↑ 這條規則:所有來自 Docker 網段 (172.17.0.0/16) 的流量,出網時都會被 MASQUERADE
# 作用:將源地址 172.17.0.x 替換為主機 IP
# 2. 特定容器的額外規則(你映射了端口)
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:2000
# ↑ 這條:容器 172.17.0.2 訪問自己端口 2000 時的特殊處理
# 這是 Docker 的一個細節優化,確保容器內訪問自己映射端口也能正確 NAT
# 3. 入站的 DNAT 規則(端口映射)
Chain DOCKER
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:1000 to:172.17.0.2:2000
# ↑ 這條:將主機 1000 端口的流量轉發到容器 172.17.0.2 的 2000 端口

(5)這時候我再起一個容器,宿主機又會增加一個網卡,與容器的網卡成對

由docker網絡模型引出來的一些網絡名詞_unionFS_05

vlan vxlan tunnel 基本概念及區別

基本概念

VLAN(Virtual LAN),翻譯成中文是“虛擬局域網”。LAN可以是由少數幾台家用計算機構成的網絡,也可以是數以百計的計算機構成的企業網絡。VLAN所指的LAN特指使用路由器分割的網絡——也就是廣播域。本來,二層交換機只能構建單一的廣播域,不過使用VLAN功能後,它能夠將一個局域網網絡分割成多個廣播域。

由docker網絡模型引出來的一些網絡名詞_unionFS_06

VVXLAN(Virtual eXtensible Local Area Network,虛擬可擴展局域網),是一種虛擬化隧道通信技術。它是一種 Overlay(覆蓋網絡)技術,通過三層的網絡來搭建虛擬的二層網絡。VXLAN 是在底層物理網絡(underlay)之上使用隧道技術,藉助 UDP 層構建的 Overlay 的邏輯網絡,使邏輯網絡與物理網絡解耦,實現靈活的組網需求。它對原有的網絡架構幾乎沒有影響,不需要對原網絡做任何改動,即可架設一層新的網絡。VXLAN 不僅支持一對一,也支持一對多,一個 VXLAN 設備能通過像網橋一樣的學習方式學習到其他對端的 IP 地址,還可以直接配置靜態轉發表。

由docker網絡模型引出來的一些網絡名詞_unionFS_07

tunnel全稱隧道技術,它是一個通用的封裝技術,可跨網絡、跨協議進行數據傳輸。常見實現形式有VXLAN(二層網絡)、IPsec(三層網絡)、ssh、VPN(應用層)。

隧道(Tunnel) ← 通用技術概念

├── L2隧道

│    ├── VXLAN(使用UDP封裝)

│    ├── NVGRE(使用GRE封裝)

│    └── STT(使用TCP封裝)

│

└── L3隧道

     ├── IPsec

     ├── GRE(通用路由封裝)

     └── WireGuard

下圖是VXLAN隧道技術工作模型。

由docker網絡模型引出來的一些網絡名詞_veth-pairs_08

三者區別

VLAN - 傳統網絡分段技術,工作在單一物理網絡內。

VXLAN - 雲時代的覆蓋網絡技術,用於大規模多租户環境。

隧道 - 封裝技術的通稱,VXLAN是其中一種特定實現。

傳統網絡的實現方式是“打標籤”,隧道技術的實現方式是“封裝”。

overlay網絡跟underlay網絡的基本概念

Overlay 在網絡技術領域,指的是一種網絡架構上疊加的虛擬化技術模式,其大體框架是對基礎網絡不進行大規模修改的條件下,實現應用在網絡上的承載,並能與其它網絡業務分離,並且以基於 IP 的基礎網絡技術為主。

IETF 在 Overlay 技術領域提出 VXLAN、NVGRE、STT 三大技術方案。大體思路均是將以太網報文承載到某種隧道層面,差異性在於選擇和構造隧道的不同,而底層均是 IP 轉發。VXLAN 和 STT 對於現網設備而言對流量均衡要求較低,即負載鏈路負載分擔適應性好,一般的網絡設備都能對 L2-L4 的數據內容參數進行鏈路聚合或等價路由的流量均衡,而 NVGRE 則需要網絡設備對 GRE 擴展頭感知並對 flow ID 進行 HASH,需要硬件升級;STT 對於 TCP 有較大修改,隧道模式接近 UDP 性質,隧道構造技術屬於革新性,且複雜度較高,而 VXLAN 利用了現有通用的 UDP 傳輸,成熟性極高。

總體比較,VLXAN 技術具有更大優勢,而且當前 VLXAN 也得到了更多廠家和客户的支持,已經成為 Overlay 技術的主流標準。

Underlay網絡是由物理設備如交換機、路由器、負載均衡器和防火牆組成的網絡,它們通過路由協議確保IP的連通性。Underlay網絡可以是二層網絡,如以太網,也可以是三層網絡,如互聯網。在Underlay網絡中,數據包的轉發基於硬件,依賴於目的IP地址,這導致了路徑依賴性和配置複雜性。Underlay網絡的擴展性受限,且對於多路徑轉發的支持較為複雜。

參照理解。https://info.support.huawei.com/info-finder/encyclopedia/zh/Overlay%E7%BD%91%E7%BB%9C.html