您好,登錄后才能下訂單哦!
這篇文章主要講解了“docker bridge到k8s pod跨節(jié)點網絡通信機制怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“docker bridge到k8s pod跨節(jié)點網絡通信機制怎么實現”吧!
[root@localhost ~]# docker network lsNETWORK ID NAME DRIVER SCOPEc250329fad3c bridge bridge localc7c3d1f77969 compose_extnetwork bridge local199b85fbf2fa host host localb488be9da3d6 none null local
共享主機網絡模式 - host
host指的是共享主機的網絡和端口,但是破壞了 container 的隔離性;
無網絡模式 - none
其中無網絡模式是指加入此模式下的容器都不能通信,比較雞肋;
自定義
自定義主要用于實現DNS解析和服務發(fā)現,特殊場景下定制使用;
默認網絡模式 - bridge
網橋是 docker 默認網絡模式,也是平時用的最多的一種,這里主要對 docker 的 bridge 模式做詳細講解。
[root@localhost ~]# brctl showbridge name bridge id STP enabled interfacesbr-c7c3d1f77969 8000.02429160f0dd no docker0 8000.02420a13dd3a no veth52f3f11 vethe8589bd
(b)
bash-4.4# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 172.17.0.1 0.0.0.0 UG 0 0 0 eth0172.17.0.0 * 255.255.0.0 U 0 0 0 eth0bash-4.4#
如果訪問外部網絡,也非常簡單,數據包先經過docker0網卡,根據宿主機路由規(guī)則連接到eth0網卡,轉發(fā)到外部網絡。見(c)圖所示。
(c)
docker 在默認網絡設置情況下,節(jié)點A 的docker0 跟節(jié)點B 的docker0 沒有任何關聯,網絡也是不通的,這就導致不能滿足我們跨節(jié)點通信要求。Kubernetes 的 Pod 又是通過何種方式實現的呢?
3、pod 通信機制
如果要說明 pod 的通信機制,要從一個鏡像說起,在 kubectl 安裝kubernetes 的時候一定會看到 k8s.gcr.io/pause 這個鏡像,不知道有沒有疑問,這個到底是干嘛的?其它幾個鏡像顧名思義,但是這個【暫停】是什么?沒錯,他就是用來 hold 一個 Pod 內部多個 Container 網絡通信。
[root@k8s-client1 ~]# docker ps |grep sp-nginxe34adacf9be1 0a81924719d1 "/usr/local/nginx/b…" 3 seconds ago Up 2 seconds k8s_sp_nginx-deployment-84b5d9cb66-hkfp6_default_5c27af26-6b7e-11ea-8d03-70fd45ac3f1f_0f245174b9a51 0a81924719d1 "/usr/local/nginx/b…" 5 seconds ago Up 4 seconds k8s_sp_nginx-deployment-84b5d9cb66-zfbhr_default_5c281ef0-6b7e-11ea-8d03-70fd45ac3f1f_0
如上所示,你可以看到在創(chuàng)建 nginx pod 過程中,不僅創(chuàng)建了一個nginx 容器,并附帶了一個 pause 容器,而且 pause 容器是在 nginx容器之前創(chuàng)建的,這個被暫停的容器把所有的容器收納到一起,一個基礎容器,唯一目的就是保存所有的命名空間。容器中 pod 共享同一個 IP 地址。故同一個 Pod 中 Container 可以做到直接通過 localhost 直接通信,那么同一個節(jié)點多個 Pod 之間如何通信的呢?
(d)
pause 容器啟動之前,會為容器創(chuàng)建虛擬一對 ethernet 接口,一個保留在宿主機 vethxxx(插在網橋上),一個保留在容器網絡命名空間內,并重命名為eth0。兩個虛擬接口的兩端,從一端進入,另一端出來。任何 Pod 連接到該網橋的 Pod 都可以收發(fā)數據。如(d)圖所示。
跨節(jié)點 Pod 通信,相當于創(chuàng)建一個整個集群公用的【 網橋 】然后把集群中所有的 Pod 連接起來,就可以通信了。
(e)
(f)
感謝各位的閱讀,以上就是“docker bridge到k8s pod跨節(jié)點網絡通信機制怎么實現”的內容了,經過本文的學習后,相信大家對docker bridge到k8s pod跨節(jié)點網絡通信機制怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。