(二十二)、Calico 的默認連通性
前面我們完成了 Calico 網路的部署并[運行了容器,今天將討論 Calico 的連通性, 測驗一下 bbox1 與 bbox2 的連通性:
docker exec bbox1 ping -c bbox2
ping 成功,資料包流向如下圖所示,

① 根據 bbox1 的路由表,將資料包從 cal0 發出,
docker exec bbox1 ip route

② 資料經過 veth pair 到達 host1,查看路由表,資料由 enpOs8 發給 host2(192.168.56.105),
192.168.183.64/26 via 192.168.56.105 dev enpOs8 proto bird
③ host2 收到資料包,根據路由表發送給 calic8bf9e68397,進而通過 veth pair cali0 到達 bbox2,
192.168.183.65 dev calic8bf9e68397 scope link
接下來我們看看不同 calico 網路之間的連通性,
創建 cal_net2,
docker network create --driver calico --ipam-driver calico-ipam cal_net2
在 host1 中運行容器 bbox3,連接到 cal_net2:
docker container run --net cal_net2 --name bbox3 -tid busybox
calico 為 bbox3 分配了 IP 192.168.119.5,

驗證 bbox1 與 bbox3 的連通性,
docker exec bbox1 ping -c 192.168.119.5
雖然 bbox1 和 bbox3 都位于 host1,而且都在一個 subnet 192.168.119.0/26,但它們屬于不同的 calico 網路,默認不能通行,
calico 默認的 policy 規則是:容器只能與同一個 calico 網路中的容器通信,
calico 的每個網路都有一個同名的 profile,profile 中定義了該網路的 policy,我們具體看一下 cal_net1 的 profile:
calicoctl get profile cal_net1 -o yaml

① 命名為 cal_net1,這就是 calico 網路 cal_net1 的 profile,
② 為 profile 添加一個 tag cal_net1,注意,這個 tag 雖然也叫 cal_net1,其實可以隨便設定,這跟上面的 name: cal_net1 沒有任何關系,此 tag 后面會用到,
③ egress 對從容器發出的資料包進行控制,當前沒有任何限制,
④ ingress 對進入容器的資料包進行限制,當前設定是接收來自 tag cal_net1 的容器,根據第 ① 步設定我們知道,實際上就是只接收本網路的資料包,這也進一步解釋了前面的實驗結果,
既然這是默認 policy,那就有方法定制 policy,這也是 calico 較其他網路方案最大的特性,下一節就我們討論如何定制 calico policy,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/239479.html
標籤:其他
