arr与nlb组合实现双层高可用:nlb在服务器层提供vip和故障转移,arr在应用层检测iis健康状态并分发流量,二者协同确保硬件与应用级双重保障。
windows 容器本身不内置负载均衡能力,高可用入口转发需依赖外部组件协同实现。核心思路是:用 windows 主机层的负载均衡器(如 nlb、arr 或第三方反向代理)接收外部流量,再按策略分发到后端容器服务(如 iis、nginx 或 asp.net core 容器实例)。容器仅专注业务逻辑,不直接暴露公网 ip。
使用 ARR + Windows 容器实现高可用入口
ARR(Application Request Routing)是 IIS 的官方反向代理模块,天然支持 Windows Server 环境,适合与 Windows 容器配合:
- 在宿主机安装 IIS 和 ARR 模块,启用“服务器场”功能
- 为每个 Windows 容器服务分配唯一内部 IP 或命名管道(如
http://172.20.128.5:8080),并在 ARR 中注册为服务器场成员 - 配置健康检查(HTTP GET /health),自动剔除无响应的容器实例
- 部署至少两台 ARR 主机,再用 NLB 组成前端集群——NLB 对外提供单一 VIP,ARR 负责转发到容器,形成双层高可用
用 Nginx 容器做轻量级入口网关
若希望入口组件也容器化,可运行 Nginx 容器作为反向代理,但需注意其自身高可用问题:
- 启动一个专用 Nginx 容器,挂载自定义
nginx.conf,将 upstream 指向其他业务容器(通过 Docker 网络别名或固定 IP) - Nginx 容器本身不能单点运行:需配合 Windows 主机上的进程守护(如 Windows Task Scheduler + PowerShell 检测重启)或外部 NLB 分流至多个 Nginx 容器实例
- 推荐将 Nginx 容器与业务容器置于同一 Docker 网络,利用 DNS 轮询或静态 IP 规避 NAT 复杂性
结合 Azure Load Balancer(云环境适用)
若运行在 Azure VM 上,可跳过 NLB/ARR,直接利用平台能力:
- 为每台运行 Windows 容器的 VM 配置相同后端端口(如 8080),加入 Azure 内部负载均衡器(ILB)后端池
- ILB 设置探测端口(如 TCP 8080 或 HTTP /health),自动隔离故障节点
- 客户端访问 ILB 的虚拟 IP,流量由 Azure 底层分发至健康容器宿主机,再由宿主机路由进容器
- 搭配 Azure 流量管理器可进一步实现跨区域容灾,但需应用层支持会话保持或无状态设计
关键注意事项
Windows 容器网络模式影响转发路径:
- 使用
nat网络时,容器端口需映射到宿主机(-p 8080:80),ARR/Nginx 必须指向宿主机 IP + 映射端口 - 使用
transparent网络时,容器拥有独立 IP,可被 NLB 或 ILB 直接探活,但需手动配置路由和防火墙 - 所有组件时间需同步(NTP),否则健康检查可能误判;容器镜像中避免硬编码 IP,改用服务名或环境变量注入











