總目錄索引:K8s網絡Calico 從入門到放棄系列
1、簡介
Calico是針對容器,虛擬機和基於主機的本機工作負載的開源網絡和網絡安全解決方案。Calico支持廣泛的平臺,包括Kubernetes,OpenShift,Docker EE,OpenStack和裸機服務。
Calico將靈活的網絡功能與無處不在的安全性實施相結合,以提供具有本地Linux內核性能和真正的雲原生可擴展性的解決方案。Calico爲開發人員和集羣運營商提供一致的體驗和功能集,無論是在公共雲中還是本地運行,在單個節點上還是在數千個節點集羣中運行。
2、關於Calico
Calico爲容器和虛擬機工作負載提供一個安全的網絡連接。
Calico可以創建並管理一個3層平面網絡,爲每個工作負載分配一個完全可路由的IP地址。 工作負載可以在沒有IP封裝或網絡地址轉換的情況下進行通信,以實現裸機性能,簡化故障排除和提供更好的互操作性。 在需要使用overlay網絡的環境中,Calico提供了IP-in-IP隧道技術,或者也可以與flannel等其他overlay網絡配合使用。
Calico還提供網絡安全規則的動態配置。 使用Calico的簡單策略語言,就可以實現對容器、虛擬機工作負載和裸機主機各節點之間通信的細粒度控制。
3、Calico 主要組件
Calico利用了Linux內核原生的路由和iptables防火牆功能。 進出各個容器、虛擬機和物理主機的所有流量都會在路由到目標之前遍歷這些內核規則。
calicoctl:允許從命令行界面配置實現高級策略和網絡。
orchestrator plugins:提供與各種流行的雲計算編排工具的緊密集成和同步支持。
key/value store:存儲Calico的策略配置和網絡狀態信息,目前主要使用etcdv3或k8s api。
calico/node:在每個主機上運行,從key/value存儲中讀取相關的策略和網絡配置信息,並在Linux內核中實現它。
Dikastes/Envoy:可選的Kubernetes sidecars,可以通過相互TLS身份驗證保護工作負載到工作負載的通信,並增加應用層控制策略。
3.1 Felix
Felix是一個守護程序,它在每個提供endpoints資源的計算機上運行。在大多數情況下,這意味着它需要在託管容器或VM的宿主機節點上運行。 Felix 負責編制路由和ACL規則以及在該主機上所需的任何其他內容,以便爲該主機上的endpoints資源正常運行提供所需的網絡連接。
根據特定的編排環境,Felix負責以下任務:
管理網絡接口,Felix將有關接口的一些信息編程到內核中,以使內核能夠正確處理該endpoint發出的流量。 特別是,它將確保主機正確響應來自每個工作負載的ARP請求,並將爲其管理的接口啓用IP轉發支持。它還監視網絡接口的出現和消失,以便確保針對這些接口的編程得到了正確的應用。
編寫路由,Felix負責將到其主機上endpoints的路由編寫到Linux內核FIB(轉發信息庫)中。 這可以確保那些發往目標主機的endpoints的數據包被正確地轉發。
編寫ACLs,Felix還負責將ACLs編程到Linux內核中。 這些ACLs用於確保只能在endpoints之間發送有效的網絡流量,並確保endpoints無法繞過Calico的安全措施。
報告狀態,Felix負責提供有關網絡健康狀況的數據。 特別是,它將報告配置其主機時發生的錯誤和問題。 該數據會被寫入etcd,以使其對網絡中的其他組件和操作纔可見。
3.2 Orchestrator Plugin
每個主要的雲編排平臺都有單獨的Calico網絡插件(例如OpenStack,Kubernetes)。 這些插件的目的是將Calico更緊密地綁定到編排工具中,允許用戶管理Calico網絡,就像他們管理編排工具中內置的網絡工具一樣。
一個好的Orchestrator插件示例是Calico Neutron ML2 驅動程序。 該插件與Neutron的ML2插件集成,允許用戶通過Neutron API調用來配置Calico網絡,實現了與Neutron的無縫集成。
Orchestrator插件負責以下任務:
API Translation,每個雲編排工具都不可避免地擁有自己的一套用於管理網絡的API接口規範, Orchestrator插件的主要工作就是將這些API轉換爲Calico的數據模型,然後將其存儲在Calico的數據存儲區中。這種轉換中的一些工作將非常簡單,其他一部分可能更復雜,以便將單個複雜操作(例如,實時遷移)轉換爲Calico網絡期望的一系列更簡單的操作。
Feedback,如有需要,orchestrator插件將從Calico網絡向編排器提供管理命令的反饋信息。 包括提供有關Felix存活的信息,以及如果網絡配置失敗則將某些endpoints標記爲失敗。
3.3 etcd
etcd是一個分佈式鍵值存儲數據庫,專注於實現數據存儲一致性。 Calico使用etcd提供組件之間的數據通信,並作爲可以保證一致性的數據存儲,以確保Calico始終可以構建出一個準確的網絡。
根據orchestrator插件的不同,etcd既可以是作爲主數據存儲使用,也可以是一個單獨數據存儲的輕量級鏡像。例如,在OpenStack部署中,OpenStack數據庫被認爲是“真實配置信息的來源”,而etcd用於鏡像其中有關網絡配置的信息,並用於服務其他Calico組件。
etcd組件穿插在整個部署中。它可以被分爲兩組主機節點:核心集羣和代理。
對於小型部署,核心集羣可以是一個節點的etcd集羣(通常與orchestrator插件組件位於同一節點上)。這種部署模型很簡單但沒有爲etcd提供冗餘。在etcd失敗的情況下,orchstrator插件必須重建數據庫,例如OpenStack,它需要插件從OpenStack數據庫重新同步狀態到etcd。
在較大的部署中,核心羣集可以根據etcd管理指南進行擴展。
此外,在運行Felix或orchstrator插件的每臺計算機上,會運行一個etcd代理服務。這減少了etcd核心集羣上的負載,併爲主機節點屏蔽了etcd服務集羣的細節。在etcd集羣與orchstrator插件在同一臺機器上都有成員的情況下,可以放棄在該機器上使用etcd代理。
etcd負責執行以下任務:
Data Storage,etcd以分佈式、一致和容錯的方式存儲Calico網絡的數據(對於至少三個etcd節點的cluster大小)。 這確保Calico網絡始終處於已知良好狀態,同時允許運行etcd的個別機器節點失敗或無法訪問。Calico網絡數據的這種分佈式存儲提高了Calico組件從數據庫讀取的能力。
Communication,etcd也用作組件之間的通信服務。 我們通過讓非etcd組件監視鍵值空間中的某些點來確保他們看到已經做出的任何更改,從而允許他們及時響應這些更改。 該功能允許將狀態信息提交到數據庫,然後觸發基於該狀態數據的進一步網絡配置管理。
4、Calico的IPIP與BGP模式
IPIP是一種將各Node的路由之間做一個tunnel,再把兩個網絡連接起來的模式。啓用IPIP模式時,Calico將在各Node上創建一個名爲”tunl0″的虛擬網絡接口。如下圖所示。
BGP模式則直接使用物理機作爲虛擬路由路(vRouter),不再創建額外的tunnel。
5、Calico的部署規模
5.1 BGP Client (BIRD)
BGP客戶端負責執行以下任務:
路由信息分發,當Felix將路由插入Linux內核FIB時,BGP客戶端將接收它們並將它們分發到集羣中的其他工作節點。
5.2 BGP Route Reflector (BIRD)
對於較大規模的部署,簡單的BGP可能成爲限制因素,因爲它要求每個BGP客戶端連接到網狀拓撲中的每一個其他BGP客戶端。這需要越來越多的連接,迅速變得難以維護,甚至會讓一些設備的路由表撐滿。
因此,在較大規模的部署中,Calico建議部署BGP Route Reflector。通常是在Internet中使用這樣的組件充當BGP客戶端連接的中心點,從而防止它們需要與羣集中的每個BGP客戶端進行通信。爲了實現冗餘,也可以同時部署多個BGP Route Reflector服務。Route Reflector僅僅是協助管理BGP網絡,並沒有endpoint數據會通過它們。
在Calico中,此BGP組件也是使用的最常見的BIRD,配置爲Route Reflector運行,而不是標準BGP客戶端。
BGP Route Reflector負責以下任務:
集中式的路由信息分發,當Calico BGP客戶端將路由從其FIB通告到Route Reflector時,Route Reflector會將這些路由通告給部署集羣中的其他節點。
5.3 BIRD是什麼
BIRD是布拉格查理大學數學與物理學院的一個學校項目,項目名是BIRD Internet Routing Daemon的縮寫。 目前,它由CZ.NIC實驗室開發和支持。
BIRD項目旨在開發一個功能齊全的動態IP路由守護進程,主要針對(但不限於)Linux,FreeBSD和其他類UNIX系統,並在GNU通用公共許可證下分發。詳細信息參照官網https://bird.network.cz/。
作爲一個開源的網絡路由守護進程項目,BRID設計並支持了以下功能:
both IPv4 and IPv6 protocols
multiple routing tables
the Border Gateway Protocol (BGPv4)
the Routing Information Protocol (RIPv2, RIPng)
the Open Shortest Path First protocol (OSPFv2, OSPFv3)
the Babel Routing Protocol
the Router Advertisements for IPv6 hosts
a virtual protocol for exchange of routes between different routing tables on a single host
a command-line interface allowing on-line control and inspection of status of the daemon
soft reconfiguration (no need to use complex online commands to change the configuration, just edit the configuration file and notify BIRD to re-read it and it will smoothly switch itself to the new configuration, not disturbing routing protocols unless they are affected by the configuration changes)
a powerful language for route filtering