Calico 的默認連通性 - 天天5分鐘玩轉 Docker 容器技術(69)

前面咱們完成了 Calico 網絡的部署並運行了容器,今天將討論 Calico 的連通性。

測試一下 bbox1 與 bbox2 的連通性:docker

ping 成功,數據包流向以下圖所示。網絡

① 根據 bbox1 的路由表,將數據包從 cal0 發出。測試

② 數據通過 veth pair 到達 host1,查看路由表,數據由 enp0s8 發給 host2(192.168.56.105)。spa

192.168.183.64/26 via 192.168.56.105 dev enp0s8  proto birdcode

③ host2 收到數據包,根據路由表發送給 calic8bf9e68397,進而經過 veth pair cali0 到達 bbox2。ip

192.168.183.65 dev calic8bf9e68397  scope link路由

接下來咱們看看不一樣 calico 網絡之間的連通性。部署

建立 cal_net2。get

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 網絡,默認不能通行。

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。

二維碼+指紋.png

相關文章
相關標籤/搜索