overlay網路和etcd實現多機的容器通信
前面的課程主要集中在同一個docker,同一個linux機器,不同的容器之前是如何通信。這次主要說的不同機器之前如何通信。這篇的源碼在:https://github.com/limingios/docker.git 中的docke/No.2/labs/flask-redis/
覆蓋網路(overlay network[1])簡單說來覆蓋網路就是應用層網路,它是面嚮應用層的,不考慮或很少考慮網路層,物理層的問題,說白了就是2個不在一起的網路組成對應的網路,方便通信的方式。
這次按照上次講解,做個多機器之前的通信 flask-redis 和redis 在不同的機器上
之前建立的docker-node1 和docker-node2 現在啟動他們 看看他們之前是否可以ping通
啟動2個窗口,查看各自的ip 信息
docker-node1
docker-node2
互相ping下
說明這2個機器是互通的。
現在我用docker內部的ip 互相ping
也就是docker1的172.17.0.2 ping一下docker2的172.17.0.3 其實是ping不通的,因為他們不在同一個網路,如果想通信有沒有方式,其實暴露埠的方式-p 也是可以的,還有一個更好的方式 就是通過vxlan的方式。
什麼是VXLAN? VXLAN-Virtual eXtensible Local Area Network(虛擬化可擴展區域網) VXLAN是NVO3(Network Virtualization over Layer3)中的一種網路虛擬化技術,通過將VM或物理伺服器發出的數據包封裝在UDP中,並使用物理網路的IP/MAC作為報文頭進行封裝,然後在IP網路上傳輸,到達目的地後由隧道終結點解封裝並將數據發送給目標虛擬機或物理伺服器。
這裡不講解VXLAN啦,我也不太熟悉,現在說的分散式存儲的方式來完成docker1內部的容器和docker2內部的容器之間的通信。通過的技術是:etcd的分散式存儲方式來完成。
etcd的2台機器安裝
隨著CoreOS和Kubernetes等項目在開源社區日益火熱,它們項目中都用到的etcd組件作為一個高可用、強一致性的服務發現存儲倉庫,漸漸為開發人員所關注。在雲計算時代,如何讓服務快速透明地接入到計算集群中,如何讓共享配置信息快速被集群中的所有機器發現,更為重要的是,如何構建這樣一套高可用、安全、易於部署以及響應快速的服務集群,已經成為了迫切需要解決的問題。etcd為解決這類問題帶來了福音。
分散式主要就是為了多台機器,每個機器裡面的容器分到的ip都不相同,這樣讓這些容器組織成一個網路的話,他們之前就可以進行通信了,因為ip和名稱都是唯一的。不會帶來衝突。
docker-node1上安裝etcd
docker-node2 上安裝etcd
docker-node1 和 docker-node2 共同操作查看狀態
docker-node1 和docker-node2 分別操作
docker-node1
docker-node2
docker-node1
docker-node2
docker-node1 查看網路信息
創建連接demo網路的容器
創建docker-node1內部的容器tes11t1
創建docker-node2內部的容器tes11t1
docker-node1中的容器,查看tes11t1的ip地址
docker-node2中的容器,查看tes11t1的ip地址
查看下demo的network
試試2個容器能否互相ping通 docker-node2
docker-node1
PS:本次通過第三方工具etcd分散式的方式完成2台機器,2個容器組件網路,實現相互的訪問,這裡只是通過ping的方式,如果按照上次說的 flask-redis,可以一台是redis 一台是flask 應該也是可以通信的。多機的方式基本就是這樣。
TAG:IT人講身邊的故事 |