calico網路策略

2021-09-19 21:43:33 字數 1648 閱讀 7096

完全通過三層網路的路由**來實現

以calico 3.2版本為準,在calico 3.3中增加了blocksize可變更以及針對namespace單獨設定子網的功能

參考:

calico 不同於flannel不需要為每個node分配子網段,所以只需要考慮pod的數量;

例如配置172.0.0.0/16即總共可執行2^16=65536個pod。

預設情況下,當網路**現第乙個容器,calico會為容器分配一段子網(子網掩碼/26,例如:172.0.118.0/26),後續出現該節點上的pod都從這個子網中分配ip位址,這樣做的好處是能夠縮減節點上的路由表的規模,按照這種方式節點上2^6=64個ip位址只需要乙個路由表項就行了,而不是為每個ip單獨建立乙個路由表項。如下為etcd中看到的子網段的值:

注意:當64個主機位都用完之後,會從其他可用的的子網段中取值,所以並不是強制該節點只能執行64個pod ,只是增加了路由表項

容器 a1 的 ip 位址為 172.17.8.2/32,這裡注意,不是 /24,而是 /32,將容器 a1 作為乙個單點的區域網了。

容器 a1 裡面的預設路由,calico 配置得比較有技巧。

default via 169.254.1.1 dev eth0 

169.254.1.1 dev eth0 scope link

這個 ip 位址 169.254.1.1 是預設的閘道器,但是整個拓撲圖中沒有一張網絡卡是這個位址。那如何到達這個位址呢?

arp 本地有快取,通過 ip neigh 命令可以檢視。

169.254.1.1 dev eth0 lladdr ee:ee:ee:ee:ee:ee stale
172.17.8.2 dev veth1 scope link 

172.17.8.3 dev veth2 scope link

172.17.9.0/24 via 192.168.100.101 dev eth0 proto bird onlink

為了保證物理機a和物理機b能夠相互知道,路由資訊,calico使用了bgp協議進行路由發現。

如果是跨網段的訪問,網路之間存在路由器,比上面的架構更加複雜,如何進行路由發現? 需啟用ipip模式。

使用了 ipip 模式之後,在物理機 a 上,我們能看到這樣的路由表:

172.17.8.2 dev veth1 scope link 

172.17.8.3 dev veth2 scope link

172.17.9.0/24 via 192.168.200.101 dev tun0 proto bird onlink

這和原來模式的區別在於,下一跳不再是同乙個網段的物理機 b 了,ip 為 192.168.200.101,並且不是從 eth0 跳,而是建立乙個隧道的端點 tun0,從這裡才是下一跳。

將這個包從 eth0 發出去,在物理網路上會使用外層的 ip 進行路由,最終到達物理機 b。在物理機 b 上,tun0 會解封裝,將內層的源 ip 和目標 ip 拿出來,**給相應的容器。

容器網路 Calico容器網路方案

calico共有兩個容器網路方案 calico bgp和calico ipip。calico bgp資料面如下 容器a訪問容器b,資料面流程如下 容器a內的calic0裝置的掩碼長度為32,即與容器b屬於不同網路,需要通過閘道器進行通訊 容器a查詢路由表,存在default路由,下一跳為169.25...

容器網路Calico高階實踐 褚向陽

各位晚上好,我是數人雲的褚向陽,接下來要跟大家分享的主題是 容器網路calico高階實踐 距離上次聊 calico 已經過去快半年的時間了,數人雲也一直在努力將容器網路方案應用到企業客戶的環境中,calico v2.0 也馬上就要發布了,這次跟大家一起感受下新版.需要說明下,本人跟 calico 沒...

替換flanneld 安裝 Calico

替換flannel 需要確保當前無正在執行的container 關閉flanneld服務 iptables f t nat iptables f 修改docker.service檔案 修改原本的execstart 設定etcd的位址,線上應該是 181,182,183三颱 execstart usr...