【问题标题】:How Do I Configure Docker Containers Behind A Load Balancer?如何在负载均衡器后面配置 Docker 容器?
【发布时间】:2019-01-29 08:56:09
【问题描述】:

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

我已在所有三个虚拟机上安装了 Docker Engine,并在所有 3 个虚拟机上复制了相同的 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 并在其中一台虚拟机上正确解析?

一张粗略的画图:

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

【问题讨论】:

    标签: docker load-balancing httpserver


    【解决方案1】:

    您需要将每个虚拟机上的每个 IIS 设置为带有 ARR(应用程序请求路由)模块的反向代理。在此过程中,您可能会用到一些技巧(Hello 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 更新。

    swarm 在 Windows 中仍然存在问题 :/ 它还有非常令人沮丧的看似随机的错误,涉及“localhost:PORT”之类的东西。例如,我无法使用 localhost:PORT 组合访问我的服务器(WS2016,1709 之前)上的容器。我的开发机器(最新的 Win10)也是如此,它最近才成为一个问题。在“某事”发生并且它停止工作之前很好。

    如果你对使用哪个代理很灵活,我建议你看看 nginx、Kubernetes,如果你在实验方面 traefik,它可以让你在不使用容器编排工具(即 swarm)的情况下摆脱困境

    p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2016-04-17
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      相关资源
      最近更新 更多