[英]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並使它在其中一個虛擬機上正確解析?
您需要將每個VM上的每個IIS設置為帶有ARR(應用程序請求路由)模塊的反向代理。 在此過程中,您將使用一些可能會出現的技巧(Microsoft,您好)。 我在負載均衡器上什么也沒說。 盡管如此,配置它以平均分配機器上的負載並不難。 您需要做的就是告訴LB以循環方式將對lb.domain.com:XXXX的任何呼叫定向到其中一個VM。 您-可能-也可以更改端口,這使您可以在3VM x3containers = 9個容器之間分配流量。
但是,建議不要在網絡上公開Kestrel服務器。 而是將其放在IIS或其他任何后面。 為了將IIS配置為充當反向代理,您可以構建3個站點並將它們以最少的配置綁定到相應的端口,也可以使用單個站點使用IIS並使用重寫規則解決傳入的請求。 老實說,IIS是與Docker一起使用的一種痛苦。
但是 ,我實際上建議您在操作系統支持的情況下使用swarm,並為每個VM公開一個端口。 這些是以下之一:
該群在Windows中仍然是有問題的:/此外,它還具有令人沮喪的看似隨機錯誤,涉及“ localhost:PORT”和其他內容。 例如,我無法使用localhost:PORT組合訪問服務器(WS2016,1709之前)上的容器。 我的開發機器(最新的Win10)也有同樣的問題,最近才成為問題。 在“某事”發生並且停止工作之前很好。
如果您對使用哪種代理很靈活,我建議您看一下nginx,Kubernetes,如果您處於實驗性traefik方面,那么可以不用使用容器編排工具(例如swarm)就可以逃脫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.