我的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 run -p 8091:80 .
运行,appcontainer2与docker run -p 8092:80 .
运行,appcontainer3与docker run -p 8093:80 .
运行。
我遇到的问题是如何从客户端计算机调用Web应用程序。例如,如果我想直接在 vm01 上调用 ap1 ,我会调用 vm01.domain.com:8091 ,但是我该怎么做调用lb.domain.com:8091并在其中一个虚拟机上正确解析?
答案 0 :(得分:1)
您需要将每个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)而逃脱>