Docker網絡模式

Docker網絡模式

實現原理

Docker使用Linux橋接,在宿主機虛擬一個Docker容器網橋(docker0),Docker啓動一個容器時會根據Docker網橋的網段分配給容器一個IP地址,稱爲Container-IP,同時Docker網橋是每個容器的默認網關。因爲在同一宿主機內的容器都接入同一個網橋,這樣容器之間就能夠通過容器的Container-IP直接通信

Docker網橋是宿主機虛擬出來的,並不是真實存在的網絡設備,外部網絡是無法尋址到的,這也意味着外部網絡無法通過直接Container-IP訪問到容器。如果容器希望外部訪問能夠訪問到,可以通過映射容器端口到宿主主機(端口映射),即docker run創建容器時候通過-p或-P參數來啓用,訪問容器的時候就通過【宿主機IP】:【容器端口】訪問容器

四類網絡模式

Docker網絡模式/配置 /說明

  • host模式/-net=host/容器和宿主共享Network namespace
  • conatiner模式/-net=container:NAME_or_ID/容器和另外一個容器共享Network namespace。kubernets中的pod就是多個容器共享一個Network namespace
  • none模式/-net=none/容器有獨立的Network Namespace,但並沒有對齊進行任何網絡設置,如分配veth pair和網橋連接,配置IP等
  • bridge模式/-net=bridge/默認爲該模式

*bridge模式

通過bridge模式實現一個docker部署遠程的rocketmq集羣
參考:部署遠程的rocketmq集羣
tips:
- 在修改rocketmq的配置文件,或者docker-compose.yml後需要重新部署應用使其變更生效 意思就是docker-compose restart的作用 != reload ; restart命令會重啓已停止的Compose應用

*多機覆蓋網絡

覆蓋忘了適用於多機環境.它允許單個網絡包含多個主機,這樣不同主機上的容器間就可以在鏈路層實現通信,覆蓋忘了視理想的容器間通信方式,支持完全容器話的應用,並且具備良好的伸縮性
docker network create -d overlay

*Ingress 網絡

通過Ingress模式發佈的服務,可以保證從Swarm集羣內任意一節點(即使沒有運行服務的副本)都能訪問該服務;以host模式發佈的服務只能通過允許服務副本的節點來訪問

*覆蓋網絡

docker覆蓋網絡: docker network create -d overlay uber-net <創建一個覆蓋網絡>
工作原理:VXLAN,docker使用VXLAN隧道技術創建了虛擬二層覆蓋網絡。因此兩臺不同物理IP的主機上的容器,通過這個VXLAN隧道能夠連接在一起
不同物理主機之間的網絡連接
通信示例
在本例中,將node1上的容器稱爲C1,node2上的容器稱爲C2

  1. C1發起ping請求,目標IP爲C2的地址10.0.0.4。
  2. 該請求流量通過連接到Br0虛擬交換機的veth接口發出
  3. 虛擬交換機並不知道將包發送到哪裏,因爲在虛擬交換機的MAC地址映射表(ARP映射表)中並沒有與當前目的IP對應的MAC地址。所以虛擬交換機會將該包發送到其上的全部端口
  4. 連接到Br0的VTEP接口知道如何轉發這個數據幀,所以將自己的MAC地址返回
  5. 這就是一個代理的ARP響應
  6. 接下來虛擬交換機更新自己的ARP映射表,將10.0.0.4映射到本地的VTEP的MAC地址上
  7. 交換機將包轉發到VTEP接口,VTEP完成數據幀的封裝,這樣就能在底層網絡中進行傳輸了
  8. 數據包根據端口號進行轉發,到達C2容器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章