close

承接上文容器網絡四-k8s flannel vxlan

calico使用純的三層路由去實現容器互聯,對比flannel的vxlan模式而言的話,這種形式沒有一個封包、解包的操作,更加高效。

這兩台主機,一台是192.168.64.5,網絡段是192.168.64,另一台是192.168.64.6,這兩台屬於同一個局域網之內。

192.168.64.5這台主機裡面有一個叫red的網絡命名空間,把前32位作為一個網絡段,本身作為一個單獨的局域網。

192.168.64這台主機也是一樣的,有一個blue的網絡命名空間。

192.168.64.5上有一對veth網絡設備,一頭連接red網絡命名空間,一頭連接主機。

看下包的流轉過程

比如在red網絡命名里,ping 172.17.9.2,red的網絡命名空間裡有一個路由:default via 169.254.1.1 dev veth-red onlink,從red網絡命名空間的veth-red網絡設備出來,下一跳地址是169.254.1.1,即到達主機的veth網卡上,然後看下主機的路由規則,看下轉發到哪個網卡上,

172.17.8.2 dev veth-red-br scope link 172.17.9.0/24 via 192.168.64.6 dev enp0s1

目的ip是172.17.9.2,網絡段是172.17.9,根據目的ip匹配路由規則,

172.17.9.0/24 via 192.168.64.6 dev enp0s1

它的下一跳地址是192.168.64.6,並且從本地主機的enp0s1網卡上出去,192.168.64.6這個ip是另外一台主機的ip地址。

也就是說這個IP網絡包,到了veth設備之後,會轉發到enp0s1網卡上,然後由enp0s1網卡去尋找192.168.64.6這個ip的mac地址,得到mac地址後,將ip網絡包轉發到這台主機上,轉發到這台主機上之後,可以看到這台主機有一個路由規則,

172.17.8.0/24 via 192.168.64.5 dev enp0s1172.17.9.2 dev veth-blue-br scope link

如果是172.17.9.2這個ip的話,就會從veth-blue-br網絡設備進去,即當ip網絡包到達這台主機之後,他會轉發到veth-blue-br這個網絡設備上,然後又會到達另外一端網絡設備即blue網絡命名空間裡的veth-blue設備,這個veth設備的ip剛好是172.17.9.2,到達之後,它發現目的ip就是它自己,然後按相似的路程,把ip網絡響應包按這個規則也返回給red網絡命名空間,那這個過程就ping通了,這也是在局域網內實現不同網絡命名空間,不同網絡段實現互聯的一個方式。

比較巧妙的一點就是將到達主機上的這個veth設備的下一跳地址設置成了目的主機的ip地址。

因為是同一個局域網內,所以它能夠帶來到目的主機的一個網卡上面去,在到達目的主機的網卡上之後,通過ip forward的功能,能夠實現不同網卡之間去轉發協議包。

但如果這兩台主機不是同一個局域網的話,那怎麼實現不同局域網之間容器互聯呢?

在calico里,同一個局域網之內下一跳地址設的是目的ip地址並且是從enp0s1這個和外界鏈接的網卡出去的,而在不同局域網,它會在兩台主機上面都創建一個隧道的網絡設備。隧道的網絡設備其實類似vxlan,它能夠對原始的協議包去進行封裝包裹一層,包裹上主機上面的和外界相連的那個ip,用這個ip去承載協議包。也就是說,在這台主機上會有一個隧道的設備,比如一個tun的設備,然後在另一台主機上又有一個隧道的設備。將到達主機上veth設備(veth-red-br)的網絡包,下一跳地址將會到達這台主機上面的一個隧道設備A上,通過這個隧道的設備去發往目的主機的隧道設備B上,隧道設備B對協議包去進行解包。不同局域網內之間,calico是通過隧道的設備,在不同局域網之間,在不同網卡之間實現網絡協議包的流轉。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()