繁体   English   中英

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

[英]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并使它在其中一个虚拟机上正确解析?

粗略汇总了情况的油漆图: 在此处输入图片说明

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM