使用 Docker Swarm 建構反向代理網路
我有幾台伺服器。他們每個人都有很多用於 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 教程進行操作,以便您可以看到它正在工作或檢測到您的設置中的問題。我用它來進行故障排除。