[英]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.