1. 程式人生 > >calico 架構及跨節點通訊原理介紹

calico 架構及跨節點通訊原理介紹

0、背景及calico簡介

為了搞定 AI on k8s的網路環境,即誇節點容器通訊的問題,在k8s多個網路解決方案中選擇了延遲表現最好的-calico方案,本文主要介紹calico 架構、元件及網路通訊原理,更多的細節在之後的文章中分享。 Calico是一個純3層的資料中心網路方案,而且無縫整合像OpenStack這種IaaS雲架構,能夠提供可控的VM、容器、裸機之間的IP通訊。 Calico的原理是通過修改每個主機節點上的iptables和路由表規則,實現容器間資料路由和訪問控制,並通過Etcd協調節點配置資訊的。因此Calico服務本身和許多分散式服務一樣,需要執行在叢集的每一個節點上。

一、calico on k8s 架構

calico on k8s 架構 主要元件:

  • Felix:Calico Agent,跑在每臺需要執行Workload的節點上,主要負責配置路由及ACLs等資訊來確保Endpoint的連通狀態;
  • etcd:分散式鍵值儲存,主要負責網路元資料一致性,確保Calico網路狀態的準確性;
  • BGP Client(BIRD):主要負責把Felix寫入Kernel的路由資訊分發到當前Calico網路,確保Workload間的通訊的有效性;
  • BGP Route Reflector(BIRD):大規模部署時使用,摒棄所有節點互聯的mesh模式,通過一個或者多個BGP Route Reflector來完成集中式的路由分發。

二、calico 誇節點容器通訊分析

calico 跨節點通訊的模式: IPIP模式(預設)和BGP模式(需要交換機支援BGP協議)。 其中IPIP模式分為兩種CrossSubnet (我們採用的模式)和 ALL; ALL:所有節點通訊都通過ip隧道,CrossSubnet: 跨網段的使用ip 隧道,走三層,通過tunl0網口轉發,同一網段的直接把宿主機作為路由,走二層,通過eth0網口轉發。

CrossSubnet同一網段例項 (10.10.102.67 和 10.10.102.68 主機上容器通訊)

在這裡插入圖片描述

CrossSubnet誇網段例項(10.39.14.92 和 10.39.66.182 主機上容器通訊),使用ip隧道

calico 誇網段通訊例項

在這裡插入圖片描述 從源容器經過源宿主機,經過資料中心的路由,然後到達目的宿主機最後分配到目的容器的過程,整個過程中始終都是根據iptables規則進行路由轉發,並沒有進行封包,解包的過程。

ip隧道協議棧

在這裡插入圖片描述

三、k8s 上部署 calico

在kube-system namespace上部署calico服務

kubectl create -f calico.yaml