如何在负载均衡器后面配置Docker容器?

时间:2019-01-29 00:19:07

标签: docker load-balancing httpserver

我的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并在其中一个虚拟机上正确解析?

粗略地汇总了情况的油漆图: enter image description here

  • 是否将netscaler负载均衡器配置为反向代理,并将端口转发到虚拟机?
  • 我是否为每个应用程序(ap1.domain.com,ap2.domain.com,api3.domain.com)配置单独的DNS条目,并在每个虚拟机上配置IIS(或nginx或Apache)以解析为适当的端口?
  • 是否可以通过配置Docker来做到这一点?
  • 我做错了所有事情吗?
  • 我应该改用某种容器编排吗?
  • 在不打扰基础架构团队重新配置一切的情况下,是否有一种明智的方法?

1 个答案:

答案 0 :(得分:1)

您需要将每个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)而逃脱