天天看點

十四,K8s叢集網絡flannel及canal政策

目錄

k8s網絡CNI之flannel

k8s網絡通信模型

常見CNI插件(Container,Network,Interface)

插件通信一般的解決方案

網絡插件的應用

Flannel插件

flannel原理說明

flannel配置參數

flannel初始配置

flannel後端實作原理flannel支援的後端

host-gw

VxLAN

k8s網絡政策之canal

canal安裝

NetworkPolicy相關術語kubectl explain networkpolicy.spec講解:

實驗

建立兩個namespace

建立pod并啟動pod

管理入站流量詳解

拒絕所有入站流量的規則:測試拒絕所有入站流量:

允許所有入站流量的規則及測試:

放入特定入站流量

管理出站流量

拒絕所有出站流量

放行特定的出站流量一般網絡政策:

隔離名稱空間

Container to Container:同一pod内的多容器通信,lo

Pod to Pod:Pod IP <--> Pod IP

Service to Pod: PodIP <--> ClusterIP,跨網段的,依靠iptables或ipvs實作的

叢集外部用戶端 與 Service:例如ingress

Flannel,提供疊加網絡,基于linux TUN/TAP,使用UDP封裝IP報

文來建立疊加網絡,并借助etcd維護網絡配置設定情況,要注意,flannel不支援網絡政策的制定,是以如需網絡政策制定需采用Calico插件

Calico,基于BGP的三層網絡,支援網絡政策實作網絡的通路控制。在每台機器上運作一個vRouter,利用核心轉發資料包,并借助iptables實作防火牆等功能

Canal,由Flannel和Calico聯合釋出的一個統一網絡插件,支援網絡政策

Weave Net,多主機容器的網絡方案,支援去中心化的控制平面,資料平面上,通過UDP封裝實作L2 Overlay

Contiv,思科方案,直接提供多租戶網絡,支援L2(VLAN)、L3(BGP)、Overlay(VXLAN)

OpenContrail,Juniper開源

kube-router,K8s網絡一體化解決方案,可取代kube-proxy實作基于ipvs的Service,支援網絡政策、完美相容BGP的進階特性

重點了解Flannel, Calico, Canal, kube-router

虛拟網橋:

多路複用:MacVLAN

硬體交換:SR-IOV ,在硬體上虛拟出多個網卡,供容器使用,性能最好

放至主控端/etc/cni/net.d/下,即可加載使用

十四,K8s叢集網絡flannel及canal政策

VxLAN:

host-gw:

UDP:

十四,K8s叢集網絡flannel及canal政策
十四,K8s叢集網絡flannel及canal政策

如上圖所示,當主機B加入flannel網絡時,和其他所有backend一樣,它會将自己的subnet 10.1.16.0/24和Public IP 192.168.0.101寫入etcd中,和其他backend不一樣的是,它還會将vtep裝置flannel.1的mac位址也寫入etcd中。

之後,主機A會得到EventAdded事件,并從中擷取上文中B添加至etcd的各種資訊。這個時候,它會在本機上添加三條資訊:

路由資訊:所有通往目的位址10.1.16.0/24的封包都通過vtep裝置flannel.1裝置發出,發往的網關位址為10.1.16.0,即主機B中的flannel.1裝置。

fdb資訊:MAC位址為MAC B的封包,都将通過vxlan首先發往目的位址192.168.0.101,即主機B

arp資訊:網關位址10.1.16.0的位址為MAC B

十四,K8s叢集網絡flannel及canal政策
虛拟網絡資料幀添加到VxLAN首部後,封裝在實體網絡UDP封包中,到達目地主機後,去掉實體網絡封包頭部及VxLAN首部,再将封包傳遞給目的終端
十四,K8s叢集網絡flannel及canal政策
VxLAN後端使用隧道網絡轉發會導緻一定和流量開銷,VxLAN DirectRouting模式,通過添加必要的路由資訊使用節點的二層網絡直接發送Pod通信封包,僅在跨IP網絡時,才啟用隧道方式。這樣,在不跨IP網絡時,性能基本接近二層實體網絡
十四,K8s叢集網絡flannel及canal政策

egress 出站流量規則 可以根據ports和to去定義規則。ports下可以指定目标端口和協定。to(目标位址):目标位址分為ip位址段、pod、namespace

ingress 入站流量規則 可以根據ports和from。ports下可以指定目标端口和協定。from(來自那個位址可以進來):位址分為ip位址段、pod、namespace

podSelector 定義NetworkPolicy的限制範圍。直白的說就是規則應用到那個pod上。podSelector: {},留白就是定義對目前namespace下的所有pod生效。沒有定義白名單的話 預設就是Deny ALL (拒絕所有)

policyTypes 指定那個規則 那個規則生效,不指定就是預設規則。

十四,K8s叢集網絡flannel及canal政策
十四,K8s叢集網絡flannel及canal政策

名稱空間:

拒絕所有出站,入站

放行所有出站目标為本名稱空間内的Pod

隔離名稱空間,應該放行與kube-system名稱空間中Pod的通信,以實作監控和名稱解析等各種管理功能