Networking

使用 Docker Swarm 建構反向代理網路

  • January 10, 2019

我有幾台伺服器。他們每個人都有很多用於 HTTPS 項目的 docker-compose 項目,這些項目使用一個自動發現的 HTTPS 反向代理。

幾天前,我在 youtube 上發現,swarm 非常容易設置,並且可以讓我在這些機器之間移動容器而無需大量停機時間。

現在我的兩個問題:

1.) 同步配置和 letencrypt 證書

我創建了一個配置:

版本:'3.2'

服務:
nginx:
圖片:myFancyImage
網路:
- 網路
重啟:總是
部署:
模式:全球
埠:
- 目標:80
已發布:81 # 用於測試
協議:tcp
模式:入口
- 目標:443
已發布:444 # 用於測試
協議:tcp
模式:入口
卷:
--mainnginx-www:/var/www
- mainnginx-letsencrypt:/etc/letsencrypt
- mainnginx-sites-enabled:/etc/nginx/sites-enabled/

卷:
主nginx-www:
mainnginx-letsencrypt:
mainnginx-sites-enabled:

網路:
網路:
外部的:
名稱:web1

並通過以下方式部署服務:

docker stack deploy --compose-file docker-compose.yml mainnginx

現在在兩台機器上,我的反向代理的一個實例執行並安裝了三個卷,但它們只是本地而不是共享的。

當然我可以使用 NFS 來同步它們,但是這裡的最佳實踐是什麼?NFS 看起來不干淨。我在某處讀到,碼頭工人正在從經理那里安裝,但這不是發生的事情……

你是怎麼解決這個問題的?

2.) 使用 swarm 網路與本地容器一起工作

我為我的主代理創建了一個網路:

docker network create --opt encrypted --attachable --driver overlay web1

並將我的一個本地項目從 server1 添加到網路,如展示文稿中所示。

然後我嘗試從我的 server1 反向代理和我的 server2 反向代理連接以 ping 我的項目容器,並且只能從 server1 執行此操作。Server2 發現了正確的 IP,但既沒有 ping 也沒有 ping。它只是在等待。

我做錯什麼了?完全不是這個想法嗎?

與您的第一個問題有關。雖然 Swarm 確實很容易設置並允許您創建容器的副本和更多內容,但 Swarm 隨附的電池中不包含卷共享。你是對的,卷沒有安裝在管理器中。每個容器將在其執行的每個工作主機上掛載一個卷,並且這些卷在 Swarm 中不共享。

您應該查看有關卷外掛的 Docker 文件。從文件中,“卷外掛可能使 Docker 卷能夠跨多個 Docker 主機持久存在”。因此,如果在您的情況下,您想在 swarm 主機之間共享相同的捲,那麼您必須選擇一個最適合您的環境的捲外掛,從列表中選擇一個外掛。

您提到的捲外掛的替代方案當然可以與 NFS、GlusterFS 或 Ceph 共享數據,其中 Swarm 中的工作節點應該共享卷的掛載點。我建議你閱讀這篇關於卷持久性和卷共享的文章,雖然它已經過時並且與 swarm 沒有直接關係,但它提供了有價值的資訊並討論了提到的兩種策略:卷外掛和數據共享。請注意,在文章中提到了 Flocker,但 Flocker 已停產,儘管它是在這里分叉的https://github.com/ScatterHQ/flocker)。由於 ServerFault 不是基於意見的,因此我不包括我的偏好,我只提及針對您的問題的現有策略。

關於你的第二個問題。由於覆蓋網路,Swarm 確實允許您互連位於不同工作主機中的容器。我使用與其他容器完美連接的負載均衡器和反向代理。您在其中一個 Swarm 管理器中創建網路,並且您的工作主機將被修改,以便創建相同的網路並應用防火牆規則。如果您遇到問題,我建議您按照Swarm 教程進行操作,以便您可以看到它正在工作或檢測到您的設置中的問題。我用它來進行故障排除。

引用自:https://serverfault.com/questions/886360