共計 1255 個字符,預計需要花費 4 分鐘才能閱讀完成。
如何理解 Calico 的默認連通性,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
前面我們完成了 Calico 網(wǎng)絡(luò)的部署并運行了容器,今天將討論 Calico 的連通性。
測試一下 bbox1 與 bbox2 的連通性:
ping 成功,數(shù)據(jù)包流向如下圖所示。
① 根據(jù) bbox1 的路由表,將數(shù)據(jù)包從 cal0 發(fā)出。
② 數(shù)據(jù)經(jīng)過 veth pair 到達 host1,查看路由表,數(shù)據(jù)由 enp0s8 發(fā)給 host2(192.168.56.105)。
192.168.183.64/26 via 192.168.56.105 dev enp0s8 proto bird
③ host2 收到數(shù)據(jù)包,根據(jù)路由表發(fā)送給 calic8bf9e68397,進而通過 veth pair cali0 到達 bbox2。
192.168.183.65 dev calic8bf9e68397 scope link
接下來我們看看不同 calico 網(wǎng)絡(luò)之間的連通性。
創(chuàng)建 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 的連通性。
雖然 bbox1 和 bbox3 都位于 host1,而且都在一個 subnet 192.168.119.0/26,但它們屬于不同的 calico 網(wǎng)絡(luò),默認不能通行。
calico 默認的 policy 規(guī)則是:容器只能與同一個 calico 網(wǎng)絡(luò)中的容器通信。
calico 的每個網(wǎng)絡(luò)都有一個同名的 profile,profile 中定義了該網(wǎng)絡(luò)的 policy。我們具體看一下 cal_net1 的 profile:
calicoctl get profile cal_net1 -o yaml
① 命名為 cal_net1,這就是 calico 網(wǎng)絡(luò) cal_net1 的 profile。
② 為 profile 添加一個 tag cal_net1。注意,這個 tag 雖然也叫 cal_net1,其實可以隨便設(shè)置,這跟上面的 name: cal_net1 沒有任何關(guān)系。此 tag 后面會用到。
③ egress 對從容器發(fā)出的數(shù)據(jù)包進行控制,當前沒有任何限制。
④ ingress 對進入容器的數(shù)據(jù)包進行限制,當前設(shè)置是接收來自 tag cal_net1 的容器,根據(jù)第 ① 步設(shè)置我們知道,實際上就是只接收本網(wǎng)絡(luò)的數(shù)據(jù)包,這也進一步解釋了前面的實驗結(jié)果。
既然這是默認 policy,那就有方法定制 policy,這也是 calico 較其他網(wǎng)絡(luò)方案最大的特性。
關(guān)于如何理解 Calico 的默認連通性問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注丸趣 TV 行業(yè)資訊頻道了解更多相關(guān)知識。