K8S 網絡 Flannel

k8s 網絡模型要求

每一個 Pod 都有一個在集羣當中獨一無二的 IP 並且在不經過 NAT 能互相通信

Flannel 原理

將 TCP 數據包裝在另一種網絡包裏面進行路由轉發和通信 (性能損耗, 高併發情況下會丟失部分數據)

目前支持: UDP、VxLAN、AWS VPC 和 GCE 路由

在每個主機上都會運行着 flannel 進程 (DaemonSet 方式的 Pod) 爲主機小網段, 並將分配信息 (子網網段 / 外部 ip/mac) 保存到 ApiServer.etcd 以及使用 Backends 轉發流量

Backends

VXLAN

本質就是封解包技術:

封裝 虛擬地址 發送的報文, 送出宿主網絡
解讀 宿主網絡 收到的報文, 發送給 虛擬網絡

在 Underlay(IP 層, 提供 IP 包的轉發) 網絡之上使用隧道技術依託 UDP 協議層構建的 Overlay(數據鏈路層) 的邏輯網絡,並能靈活穿透三層 Underlay 網絡,使邏輯網絡與物理網絡解耦

只要處於一個廣播域裏 (一個主機發 ARP 廣播, 可以到達所有的數據中心), 無論主機移動到什麼位置,只要它的 VLAN(虛擬局域網) 不變,就可以保持自己的 IP 不變

組網:

封包:

數據包從container的網絡協議棧出發
經由default路由進入eth0
數據包eth0進入container掛載的bridge
bridge看到基於IP路由到來的數據包跳轉進入flannel.1 vxlan設備

根據vxlan的協議標準進行二層封裝轉發
從ectd裏面獲取目的IP所在網段對應的vtep設備的mac地址進行封包

查詢得到本節點上的vxlan fdb和目的端vtep對應的IP地址
vxlan設備將數據包經由UDP協議發送至對端的vxlan設備flannel.1

解包:

接受到數據包(vxlan的封包),
將包交給對應的vtep設備flannel.1,
由bridge傳送給container

host-gw

本質就是路由技術

通過配置每 2 個主機的 Overlay 網絡的 subnet 對端 host 的路由信息實現, 數據包直接通過 eth0 進出

流量幾乎無損耗,

但是需要維護 n(n-1)/2 條路由,

維護成本越來越重

UDP

類似 vxlan, 代理模式, 數據需要封解包, 但是相比 vxlan 性能和穩定性要差

通過在主機兩端建立隧道 (tun), 連接 本機的 kernel 網絡協議棧 和 遠程的 flannel 進程

轉自:

zhuanlan.zhihu.com/p/99697440

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/BmZroRkoVtLSJfHcOfIgbw