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

通过Terraform创建的自定义镜像RHEL8虚拟机在Ansible配置阶段出现SSH超时断连问题

通过Terraform创建的自定义镜像RHEL8虚拟机在Ansible配置阶段出现SSH超时断连问题

看起来你遇到了一个挺头疼的批量部署问题——用Terraform建好7台基于自定义RHEL8镜像的VM后,Jenkins调用Ansible做配置时,总会有1-3台在12-13分钟左右掉链子,要么SSH连接超时,要么直接报管道破裂。结合微软支持工程师提到的NIC未正常关联,咱们可以从几个核心方向一步步排查解决:

一、先搞定NIC关联的基础问题

既然官方工程师已经点出NIC的问题,这是最优先要确认的环节:

  • 验证Terraform中NIC与VM的绑定逻辑:检查你的Terraform代码,确保每台VM的NIC都正确关联到指定子网、NSG,且没有重复绑定的情况。可以在代码里加个输出,打印每台VM的NIC ID和状态;或者在Jenkins流水线里加一步,用az network nic show --ids <nic-id>命令批量验证所有NIC的状态,必须确认所有NIC都是「已关联」状态后,再触发Ansible配置。
  • 复查NSG规则:虽然你说NSG已经建好,但还是要再核对一遍:入站规则里有没有放开22端口给Jenkins/Ansible控制节点的IP?出站规则有没有允许VM访问必要的资源(比如yum源、Ansible控制节点的反向连接)?可以临时把SSH的入站源放宽到0.0.0.0/0测试,排除NSG拦截的可能性。

二、优化SSH连接与超时配置

SSH断连大概率和超时设置、服务稳定性有关:

  • 调整Ansible的超时参数:默认的SSH超时时间可能不够用,在ansible.cfg里把timeout改成120甚至更长;同时在playbook开头加一步等待SSH就绪的任务,避免VM还没完全初始化就发起连接:
    - name: 等待VM SSH服务稳定
      wait_for_connection:
        timeout: 300  # 最多等5分钟
    
  • 检查VM内部的SSH配置:如果能手动登录断连的VM,去看/var/log/secure日志,排查SSH服务有没有崩溃。另外,自定义镜像里的/etc/ssh/sshd_config可能有严格的超时设置,建议调整:
    ClientAliveInterval 60  # 每分钟发一次心跳
    ClientAliveCountMax 10  # 连续10次没响应才断开
    
    修改后重启sshd服务:systemctl restart sshd。

三、解决批量VM的初始化延迟问题

Terraform显示VM「运行中」不代表OS内部初始化完成,这也是常见的坑:

  • 在Terraform里加SSH就绪等待:用null_resource配合本地命令,循环检测每台VM的22端口是否开放,确认所有VM都能正常SSH后再往下走:
    resource "null_resource" "wait_for_all_ssh" {
      count = 7
      provisioner "local-exec" {
        command = "until nc -zv ${azurerm_linux_vm.vm[count.index].private_ip_address} 22; do sleep 10; done"
      }
      depends_on = [azurerm_linux_vm.vm]
    }
    
  • 排查自定义镜像的问题:换官方的RHEL8镜像创建一台VM测试,如果不会断连,那问题肯定出在你的自定义镜像上。检查镜像里的网络配置(比如NetworkManager状态)、是否安装了Azure代理(waagent),有没有残留的异常脚本导致网络不稳定。

四、优化Jenkins+Ansible的流水线逻辑

批量任务本身就容易出问题,拆分和重试能提升稳定性:

  • 分批次执行Ansible任务:不要一次性对7台VM跑所有配置,分成2-3批执行,降低单批次的连接压力。
  • 给关键任务加重试机制:在Ansible playbook里给容易失败的任务加上重试,比如:
    - name: 执行配置脚本
      shell: /path/to/your/script.sh
      retries: 3
      delay: 60
      register: task_result
      until: task_result is succeeded
    

备注:内容来源于stack exchange,提问作者devopsguy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:09:31