簡體   English   中英

如何在負載均衡器后面配置Docker容器?

[英]How Do I Configure Docker Containers Behind A Load Balancer?

我的IT基礎架構部門為我提供了以下設置:在3個虛擬機(vm01,vm02,vm03)前面的netscaler負載平衡器(lb)。 每個虛擬機都使用IIS設置。

我已經在所有三個虛擬機上安裝了Docker Engine,並在所有三個虛擬機上復制了相同的3個容器(appcontainer1,appcontainer2,appcontainer3)。 每個容器都包含一個.NET Core Web API應用程序(api1,api2,api3)。

每個容器都配置為公開其端口80以訪問api,並映射到運行該容器的虛擬機上的端口。 換句話說,appcontainer1與docker docker run -p 8091:80 .一起docker run -p 8091:80 . ,appcontainer2與docker docker run -p 8092:80 .一起docker run -p 8092:80 . ,並且appcontainer3與docker docker run -p 8093:80 .一起docker run -p 8093:80 .

我遇到的問題是如何從客戶端計算機調用Web應用程序。 例如,如果我想直接在vm01上調用ap1 ,我會調用vm01.domain.com:8091 ,但是如何調用lb.domain.com:8091並使它在其中一個虛擬機上正確解析?

粗略匯總了情況的油漆圖: 在此處輸入圖片說明

  • 是否將netscaler負載均衡器配置為反向代理,並將端口轉發到虛擬機?
  • 是否在每個應用程序(ap1.domain.com,ap2.domain.com,api3.domain.com)上配置單獨的DNS條目,並在每個虛擬機上配置IIS(或nginx或Apache)以解析為適當的端口?
  • 有沒有一種方法可以配置Docker來做到這一點?
  • 我是在做錯所有事情,還是在思考整個事情嗎?
  • 我應該改用某種容器編排嗎?
  • 是否有一種明智的方式來做到這一點,而又不會打擾基礎架構團隊重新配置一切?

您需要將每個VM上的每個IIS設置為帶有ARR(應用程序請求路由)模塊的反向代理。 在此過程中,您將使用一些可能會出現的技巧(Microsoft,您好)。 我在負載均衡器上什么也沒說。 盡管如此,配置它以平均分配機器上的負載並不難。 您需要做的就是告訴LB以循環方式將對lb.domain.com:XXXX的任何呼叫定向到其中一個VM。 您-可能-也可以更改端口,這使您可以在3VM x3containers = 9個容器之間分配流量。

但是,建議不要在網絡上公開Kestrel服務器。 而是將其放在IIS或其他任何后面。 為了將IIS配置為充當反向代理,您可以構建3個站點並將它們以最少的配置綁定到相應的端口,也可以使用單個站點使用IIS並使用重寫規則解決傳入的請求。 老實說,IIS是與Docker一起使用的一種痛苦。

但是 ,我實際上建議您在操作系統支持的情況下使用swarm,並為每個VM公開一個端口。 這些是以下之一:

  • WS2019,
  • WS2016 1709更新或更高版本(這些沒有GUI)
  • Windows 10 1709更新。

該群在Windows中仍然是有問題的:/此外,它還具有令人沮喪的看似隨機錯誤,涉及“ localhost:PORT”和其他內容。 例如,我無法使用localhost:PORT組合訪問服務器(WS2016,1709之前)上的容器。 我的開發機器(最新的Win10)也有同樣的問題,最近才成為問題。 在“某事”發生並且停止工作之前很好。

如果您對使用哪種代理很靈活,我建議您看一下nginx,Kubernetes,如果您處於實驗性traefik方面,那么可以不用使用容器編排工具(例如swarm)就可以逃脫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM