Kubernetes網絡插件詳解 - Calico篇 - 網絡基礎
Container容器借助底層Linux操作系統的Namespace與Cgroup內核技術,實現在單一主機資源的輕量級虛擬化資源隔離,包含進程ID、主機名、用戶ID、文件名、網絡和進程間通信等。同時每個網絡空間Network Namesapce都有獨立的網絡棧,包括網絡接口(Network Interface)、回環設備(Lookback Device)、路由表(Routing Table)和iptables規則等,是容器網絡隔離與通信的基礎。
Kubernetes是以Container容器技術為核心的調度引擎,將傳統云計算對應的基礎資源,包含計算、存儲,網絡進行了徹底池化統一管理,同時將運行在技術架構之上的應用和服務也進行了抽象標準化,再通過調度快速實現應用與資源的匹配,即以應用為中心構建云原生操作系統能力。
在Kubernetes集群內,既要解決相同宿主機多個命名空間網絡棧共享底層硬件資源,同時還要解決集群內部跨宿主機網絡通信的問題,面向應用提供完成的網絡能力,所以容器網絡是Kubernetes最復雜部分,同時也是設計精華所在:對于相同宿主機共享底層硬件設備問題,通常是借助虛擬化技術來實現,通過虛擬設備來實現靈活的管理,再將虛擬化設備連接到真實的物理設備上實現網絡通信;對于跨宿主機網絡通信問題,采用SDN軟件定義網絡的思路,靈活使用底層網絡通信協議,同時結合各種虛擬化隧道通信技術,實現容器集群內外部通信。
所以要搞清楚復雜的容器網絡及各種各樣的網絡插件,首先需要了解網絡通信基礎,網絡設備虛擬化以及網絡隧道技術。網絡通信基礎?。
一、網絡模
OSI網絡模型將網絡數據發送和接收數據的過程分為7層,分別是物理層(Physical Layer),數據鏈路層(Data Link Layer),網絡層(Network Layer),傳輸層(Transport Layer),會話層(Session Layer),表示層(Presentation Layer),應用層(Application Layer)。TCP/IP協議定義了一個應用于不同網絡間信息傳輸的協議簇,對網絡中各層次的通信制定了標準和方法。TCP/IP包含了很多協議,常見的協議包括IP、FTP、TCP、UDP、SMTP等。TCP/IP協議定義4層或者5層,4層主要包含鏈路層,網絡層,傳輸層,應用層。OSI是開放系統的互連模型,相關的協議已經非常少使用,但是模型本身非常通用;只是由于OSI模型過于理想化,至今尚未有完整的實現。TCP/IP網絡結構體系實際上是由OSI七層模型演化而來,是一個工業標準,并不是只由TCP和IP協議組成,而是由支持能夠在多個不同的網絡間實現信息傳輸的協議簇,后續的網絡通信主要是基于TCP/IP協議講解。
二、網絡數據包
在TCP/IP通信中,網絡層的作用是實現終端的點對點通信。通過IP地址將數據包發送給目的主機,在發送數據時,網絡堆棧的每一層都會添加自己的報文頭,包含該層需要的控制/元數據,以便在數據包穿過網絡時對其進行處理,并將生成的數據包傳遞到堆棧的下一層。這樣就產生了完整的數據包。
三、IP路由
當網絡設備收到一個數據包時,它根據數據包的目的IP地址查詢路由表,如果有匹配的路由條目,就根據查詢結果將數據包轉發出去,如果沒有任何匹配的路由條目,則將數據包丟棄,這個過程就是IP路由。除了路由器,三層交換機、防火墻、負載均衡設備甚至主機等設備都可以進行路由操作。每一個路由條目包含目的網段地址/子網掩碼、路由協議、出接口、下一跳IP地址、路由優先級和度量值等信息。路由表直連路由、靜態路由和動態路由三種方式獲取,其中動態路由是通過動態路由協議從相鄰網絡設備動態學習到的路由條目。協議有OSPF,BGP ,RIP,RIPv2等。
其中BGP協議,即邊界網關協議,是一種運行于TCP上的一種能夠處理因特網大小的網絡協議,也是一種可以完善無關路由域間的多路連接協議。BGP主要用于與其他BGP線路建立網絡連接、相互交換包括AS在內的信息。Kubernetes容器網絡插件Calico,就基于此協議實現網絡數據轉發。
四、NAT(Network Address Translation)
網絡地址轉換是一種地址轉換技術,可以將IP數據報文頭中的IP地址轉換為另一個IP地址,并通過轉換端口號達到地址重用的目的。
網絡設備虛擬化
在沒有虛擬化技術之前,計算機網絡系統都只通過物理網卡,線纜介質,連接外部網絡,構成龐大的網絡。隨著虛擬化技術的出現,網絡也隨之被虛擬化,相較于單一的物理網絡,虛擬網絡變得非常復雜。Linux虛擬網絡的底層都是由一個個的虛擬設備構成的,以此來實現諸如交換、路由、隧道、隔離、聚合等多種網絡功能。常見的虛擬網絡設備有tap/tun、veth-pair和bridge。
1、Tap/Tun
Tap/Tun是Linux內核實現的一對虛擬網絡設備,TAP工作在二層,TUN工作在三層。Linux內核通過TAP/TUN設備向綁定該設備的用戶空間程序發送數據,反之用戶空間程序也可以像操作物理網絡設備那樣向 TAP/TUN 設備發送數據。
2、Veth-pair
Veth-pair是一端連著內核協議棧,另一端連著另一個設備,一個設備收到內核發送的數據后,會發送到另一個設備上去,這種設備通常用于容器中兩個namespace之間的通信。
3、Bridge
Bridge是Linux內核實現的一個工作在二層的虛擬網絡設備,但不同于TAP/TUN這種單端口的設備,Bridge實現為多端口,本質上是一個虛擬交換機,具備和物理交換機類似的功能。Bridge可以綁定其他Linux網絡設備作為從設備,并將這些從設備虛擬化為端口,當一個從設備被綁定到Bridge上時,就相當于真實網絡中的交換機端口上插入了一根連有終端的網線。
網絡隧道技術
隧道(Tunneling)是一種網絡數據通信技術,主要解決網絡協議不支持,數據傳輸不安全等網絡通信問題。將不支持的協議數據包打包成支持的協議數據包之后進行傳輸,或在不安全網絡上提供一個安全路徑。通過網絡隧道技術,可以使隧道兩端的網絡組成一個更大的內部網絡。
隧道協議有二層隧道協議與三層隧道協議兩類,二層隧道協議對應OSI模型中數據鏈路層,使用幀作為數據交換單位,將數據封裝在點對點協議的幀中通過互聯網絡發送,協議包含PPTP、L2TP、L2F等。三層隧道協議對應OSI模型中網絡層,使用包作為數據交換單位,將數據包封裝在附加的IP包頭中通過IP網絡傳送,協議包含GRE、IPSec、GRE等。Linux原生支持多種三層隧道,其底層實現原理都是基于tun設備:
- IPIP:普通的IPIP隧道,就是在報文的基礎上再封裝成一個IPv4報文
- GRE:通用路由封裝(Generic Routing Encapsulation),定義了在任意網絡層協議上封裝其他網絡層協議的機制,所以對于IPv4和IPv6都適用
- SIT:主要用于IPv4報文封裝IPv6報文,即IPv6 over IPv4
- ISATAP:站內自動隧道尋址協議,類似于sit也是用于IPv6的隧道封裝
- VTI:即虛擬隧道接口(Virtual Tunnel Interface),是一種IPsec隧道技術。
1、VXLAN隧道技術
Linux內核自3.7版本開始支持VXLAN隧道技術,是目前最流行的Overlay網絡隧道協議之一,將二層以太網幀封裝在四層UDP報文中,通過三層網絡傳輸,組成一個虛擬大二層網絡。VXLAN使用VTEP(VXLAN Tunnel Endpoint)來進行封包和解包:在發送端,源VTEP將原始報文封裝成VXLAN報文,通過UDP發送到對端VTEP;在接收端,VTEP將解開VXLAN報文,將原始的二層數據幀轉發給目的的接收方。VTEP可以是獨立的網絡設備,例如交換機,也可以是部署在服務器上的虛擬設備。例如使用置頂交換機(TOR)作為VTEP時,VXLAN的網絡模型如下圖:
- VTEP(VXLAN tunnel endpoints):VXLAN網絡的邊緣設備,用來進行VXLAN報文的封包與解包。VTEP可以是網絡設備(例如交換機),也可以是一臺機器(例如虛擬化集群中的宿主機)。
- VNI(VXLAN network identifier):VNI是VXLAN的標識,是個24位整數,因此最大值是2的24次方個。如果一個VNI對應一個租戶,那么理論上VXLAN可以支持千萬級別的租戶。
- VXLAN Tunnel:隧道是一個邏輯上的概念,在VXLAN模型中并沒有具體的物理實體相對應。隧道可以看作一個虛擬通道,VXLAN通信雙方都認為自己在直接通信,并不知道底層網絡的存在。從整體上看,每個VXLAN網絡像是為通信的設備搭建了一個單獨的通信通道,也就是隧道。
VXLAN的報文就是MAC in UDP,即在三層網絡的基礎上構建一個虛擬的二層網絡。VXLAN的封包格式顯示原來的二層以太網幀(包含MAC頭部、IP頭部和傳輸層頭部的報文),被放在VXLAN包頭里進行封裝,再套到標準的UDP頭部(UDP頭部、IP頭部和MAC頭部),用來在底層網絡上傳輸報文。VXLAN報文比原始報文多出50個字節,這降低了網絡鏈路傳輸的有效數據比例,尤其是小包。UDP目的端口是接收方VTEP設備使用的端口,IANA分配了4789作為VXLAN的目的UDP端口(flannel VXLAN模式是8472)。
總結
總的來說,云原生Kubernetes并且沒有創造新的網絡技術,而是根據各種場景靈活的聚合使用各種網絡技術。從底層通信技術來看,容器網絡有Overlay模式,路由模式,以及Underlay模式三種,其中Overlay模式主要是通過虛擬化與隧道技術,屏蔽底層網絡復雜路由轉發,面向應用提供簡單高效的通信能力。同時底層操作系統內核的網絡的技術也在發展演進,各種虛擬化技術及隧道技術極其相似,又各自有細微的差別,所以才有多種容器網絡插件及網絡模式,所以容器網絡規劃選擇一定要針對業務應用的場景,在靈活,高效,以及成本等多因素中權衡選擇合適的網絡方案。
本文轉載自微信公眾號「巨子嘉」,可以通過以下二維碼關注。轉載本文請聯系巨子嘉公眾號。