如何配置负载平衡器后面的Docker容器?

如何配置负载平衡器后面的Docker容器?,docker,load-balancing,httpserver,Docker,Load Balancing,Httpserver,我的IT基础设施部门为我提供了以下设置:在3台虚拟机(vm01、vm02、vm03)前面安装netscaler负载平衡器(lb)。每个虚拟机都是使用IIS安装的 我在所有三个虚拟机上安装了Docker引擎,并在所有三个虚拟机上复制了相同的3个容器(appcontainer1、appcontainer2、appcontainer3)。每个容器都包含一个.NET核心Web API应用程序(api1、api2、api3) 每个容器都配置为公开其端口80以访问api,并映射到其运行的虚拟机上的一个端口。

我的IT基础设施部门为我提供了以下设置:在3台虚拟机(vm01、vm02、vm03)前面安装netscaler负载平衡器(lb)。每个虚拟机都是使用IIS安装的

我在所有三个虚拟机上安装了Docker引擎,并在所有三个虚拟机上复制了相同的3个容器(appcontainer1、appcontainer2、appcontainer3)。每个容器都包含一个.NET核心Web API应用程序(api1、api2、api3)

每个容器都配置为公开其端口80以访问api,并映射到其运行的虚拟机上的一个端口。换句话说,appcontainer1与
docker run-p8091:80一起运行。
,appcontainer2与
docker run-p8092:80一起运行。
,appcontainer3与
docker run-p8093: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来实现这一点
  • 我是不是做错了,想得太多了
  • 我应该使用某种容器编排吗
  • 有没有一种明智的方法可以做到这一点,而不必麻烦基础架构团队重新配置所有内容

您需要使用ARR(应用程序请求路由)模块将每个VM上的每个IIS设置为反向代理。在这个过程中,您可能会用到一些技巧(Hello Microsoft)。不过,我不能对负载平衡器说什么。不过,将其配置为在机器上均匀分配负载应该并不困难。您只需告诉LB以循环方式将对LB.domain.com:XXXX的任何调用定向到其中一个VM即可。您(可能)也可以改变端口,这允许您将流量分布在3VMs x3containers=9个容器中

但是,建议不要在网上公开Kestrel服务器。取而代之的是,把它放在IIS或其他任何东西后面。要将IIS配置为充当反向代理,您可以构建3个站点并以最低配置将它们绑定到相应的端口,或者使用使用IIS并使用重写规则解析传入请求的单个站点。老实说,与docker一起使用IIS是一件痛苦的事情

但是如果您的操作系统支持swarm,我实际上建议您使用swarm,并为每个VM公开一个端口。这些是其中之一:

  • WS2019
  • WS2016 1709更新或更高版本(这些没有GUI)
  • Windows101709更新
swarm在Windows中仍然存在问题,而且它有非常令人沮丧的看似随机的错误,包括“localhost:PORT”之类的错误。例如,我无法使用localhost:PORT组合访问服务器(WS2016,1709之前)上的容器。我的开发机器(Win10最新版本)也是如此,它最近刚刚成为一个问题。“有事”发生之前一切都很好,它停止了工作

如果您对使用哪种代理很灵活,我建议您看看nginx、Kubernetes,如果您是实验性的traefik,那么您可以不用容器编排工具(即swarm)就可以离开