為支援容器跨主機通訊,Docker 提供了 overlay driver,使使用者可以建立基於 VxLAN 的 overlay 網路。VxLAN 可將二層資料封裝到 UDP 進行傳輸,VxLAN 提供與 VLAN 相同的乙太網路二層服務,但是擁有更強的擴充性和靈活性。有關 VxLAN 更詳細的內容可參考 CloudMan 在《每天5分鐘玩轉 OpenStack》中的相關章節。
Docerk overlay 網路需要一個 key-value 資料庫用於儲存網路狀態資訊,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支援的 key-vlaue 軟體,我們這裡使用 Consul。 實驗環境描述
我們會直接使用上一章 docker-machine 建立的實驗環境。在 docker 主機 host1(192.168.56.104)和 host2(192.168.56.105)上實踐各種跨主機網路方案,在 192.168.56.101 上部署支援的組件,比如 Consul。
最簡單的方式是以容器方式運行 Consul:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
容器啟動後,可以通過 http://192.168.56.101:8500 訪問 Consul。
接下來修改 host1 和 host2 的 docker daemon 的設定檔/etc/systemd/system/docker.service。
--cluster-store 指定 consul 的地址。
--cluster-advertise 告知 consul 自己的串連地址。
重啟 docker daemon。
systemctl daemon-reload
systemctl restart docker.service
host1 和 host2 將自動註冊到 Consul 資料庫中。
準備就緒,實驗環境如下:
下一節建立 overlay 網路。