覆蓋網路驅動程式

overlay 網路驅動程式在多個 Docker 守護程序主機之間建立分散式網路。該網路位於(覆蓋)主機特定網路之上,允許連線到它的容器在啟用加密時安全地進行通訊。Docker 透明地處理每個資料包到來自正確 Docker 守護程序主機和正確目標容器的路由。

您可以使用 docker network create 建立使用者定義的 overlay 網路,與建立使用者定義的 bridge 網路的方式相同。服務或容器可以同時連線到多個網路。服務或容器只能透過它們各自連線的網路進行通訊。

覆蓋網路通常用於在 Swarm 服務之間建立連線,但您也可以使用它來連線在不同主機上執行的獨立容器。當使用獨立容器時,仍然需要使用 Swarm 模式在主機之間建立連線。

本頁面描述了覆蓋網路的一般情況,以及在與獨立容器一起使用時的情況。有關 Swarm 服務的覆蓋網路資訊,請參閱 管理 Swarm 服務網路

建立覆蓋網路

在開始之前,您必須確保參與節點能夠透過網路進行通訊。下表列出了參與覆蓋網路的每個主機需要開啟的埠。

描述
2377/tcp預設的 Swarm 控制平面埠,可以使用 docker swarm join --listen-addr 進行配置
4789/udp預設的覆蓋網路流量埠,可以使用 docker swarm init --data-path-addr 進行配置
7946/tcp, 7946/udp用於節點之間的通訊,不可配置

要建立一個其他 Docker 主機上的容器可以連線到的覆蓋網路,請執行以下命令

$ docker network create -d overlay --attachable my-attachable-overlay

--attachable 選項允許獨立容器和 Swarm 服務連線到覆蓋網路。如果沒有 --attachable,只有 Swarm 服務才能連線到網路。

您可以指定 IP 地址範圍、子網、閘道器和其他選項。有關詳細資訊,請參見 docker network create --help

在覆蓋網路上加密流量

使用 --opt encrypted 標誌加密透過覆蓋網路傳輸的應用程式資料

$ docker network create \
  --opt encrypted \
  --driver overlay \
  --attachable \
  my-attachable-multi-host-network

這會在虛擬可擴充套件區域網 (VXLAN) 級別啟用 IPsec 加密。此加密會造成不可忽略的效能損失,因此您應該在生產環境中使用此選項之前對其進行測試。

警告

不要將 Windows 容器附加到加密的覆蓋網路。

Windows 不支援覆蓋網路加密。當 Windows 主機嘗試連線到加密的覆蓋網路時,Swarm 不會報告錯誤,但 Windows 容器的網路會受到以下影響

  • Windows 容器無法與網路上的 Linux 容器通訊
  • 網路上 Windows 容器之間的資料流量不會被加密

將容器附加到覆蓋網路

將容器新增到覆蓋網路使它們能夠與其他容器通訊,而無需在各個 Docker 守護程序主機上設定路由。執行此操作的先決條件是主機已加入同一個 Swarm。

要使用 busybox 容器加入名為 multi-host-network 的覆蓋網路,請執行以下操作

$ docker run --network multi-host-network busybox sh

注意

這僅適用於可附加的覆蓋網路(使用 --attachable 標誌建立)。

容器發現

在覆蓋網路上釋出容器的埠會將這些埠開啟到同一網路上的其他容器。可以透過使用容器名稱執行 DNS 查詢來發現容器。

標誌值描述
-p 8080:80將容器中的 TCP 埠 80 對映到覆蓋網路上的埠 8080
-p 8080:80/udp將容器中的 UDP 埠 80 對映到覆蓋網路上的埠 8080
-p 8080:80/sctp將容器中的 SCTP 埠 80 對映到覆蓋網路上的埠 8080
-p 8080:80/tcp -p 8080:80/udp將容器中的 TCP 埠 80 對映到覆蓋網路上的 TCP 埠 8080,並將容器中的 UDP 埠 80 對映到覆蓋網路上的 UDP 埠 8080

覆蓋網路的連線限制

由於 Linux 核心設定的限制,當 1000 個容器位於同一主機上時,覆蓋網路會變得不穩定,並且容器之間的通訊可能會中斷。

有關此限制的更多資訊,請參閱 moby/moby#44973.

下一步