You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible操作Azure虚拟机偶发HTTPSConnectionPool导致UNREACHABLE错误求助

报错日志:

fatal: [<< server_name>> ]: UNREACHABLE! => {"changed": false, "msg": "ntlm: HTTPSConnectionPool(host='<<host_name>>', port=5986): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f9e0b3f7790>: Failed to establish a new connection: [Errno -3] Try again'))", "unreachable": true}

所用Ansible环境信息:

ansible [core 2.11.1] 
  config file = /home/jenkins/agent/workspace/Sandboxes/VinSandbox/TST02-EscherCpxEcpDelivery (R8 AIO Manual)/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, May  6 2021, 00:05:59) [GCC 10.2.1 20201203]
  jinja version = 3.0.1
  libyaml = False
排查思路

该报错是Ansible通过WinRM HTTPS协议(端口5986)连接Windows目标机时,网络链路/服务配置异常导致的间歇性连通失败,Errno -3多对应DNS解析异常、临时网络丢包、SNAT端口耗尽三类场景,可按以下步骤排查:

  • 验证DNS解析稳定性:在Ansible控制节点持续执行nslookup <目标VM地址> 24小时以上,统计是否存在解析失败记录,Azure跨区域访问时公共DNS偶发秒级超时是高频诱因。
  • 检查WinRM服务配置:登录报错过的VM执行winrm get winrm/config,确认MaxConcurrentOperationsPerUser、MaxConnections参数值,默认值低于50时,并发连接请求过多会直接触发拒绝。
  • 排查Azure网络限制:查看VM所属子网NSG流日志,确认5986端口是否存在间歇性流量丢弃;同时检查Jenkins控制节点的公网出口SNAT端口使用情况,多台VM并行部署时容易触发SNAT端口耗尽,导致临时连接失败。
  • 核对Ansible连接参数:检查ansible.cfg中WinRM相关配置,默认超时时间短、重试次数少会将正常的网络波动直接判定为不可达。
解决方案

以下方案按落地优先级排序:

  • 调整Ansible WinRM连接参数,在ansible.cfg中新增如下配置,覆盖临时网络波动窗口:
[defaults]
winrm_connection_timeout = 30
winrm_retries = 5
winrm_retry_delay = 3
  • 升级WinRM依赖组件,旧版本urllib3存在连接池复用bug,执行如下命令升级即可:
pip install --upgrade pywinrm requests urllib3
  • 调整目标VM的WinRM并发配置,在所有目标Windows VM上执行以下PowerShell命令:
Set-Item WSMan:\localhost\MaxConcurrentOperationsPerUser 100
Set-Item WSMan:\localhost\Service\MaxConnections 100
Restart-Service WinRM -Force
  • 同区域部署场景下,将Ansible inventory中的主机地址替换为VM私有IP,绕开公网DNS解析和SNAT端口限制,可大幅降低网络波动概率。
  • 在Ansible控制节点部署dnsmasq或开启systemd-resolved DNS缓存,避免每次连接都请求公共DNS,减少解析失败概率。

内容的提问来源于stack exchange,提问作者user1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 17:45:05