我们最近建立了一个带有 NGINX 控制器的 AKS 集群。
访问看起来没问题,但后来我们发现偶尔请求无法连接。
为了演示这个问题,我们使用了一个简短的 powershell 脚本,它向 URL 发出重复请求,写出响应的状态代码,等待 0.5 秒,然后重复。
$url = "https://staging.[...].[...]"
$i = 0
while($true)
{
$statusCode = "ERROR"
try{
$statusCode = (invoke-webrequest $url).statuscode
}
catch{
$statusCode = $_
}
$i = $i + 1
write-host "$i Checking $url --> $statusCode"
start-sleep -seconds 0.5
}
当我运行这个脚本时,它可以运行大约 200 个请求,每次返回一个 200 (OK)
响应,然后它会暂停大约 30 秒(我假设这是 {{1} } 方法)然后写“无法连接到远程服务器”。
为了调试问题,我们启用了端口转发来绕过负载均衡器,从而直接寻址 pod(添加主机头):没问题; powershell 脚本在至少 10 分钟内始终显示 Invoke-WebRequest
响应。
我们还启用了到 NGINX 控制器的端口转发并重复了测试:同样,一致的 200
响应。
但没有启用端口转发,对 URL 的请求 - 现在通过负载平衡器 - 显示间歇性连接问题。
奇怪的是,当我运行脚本时,这些连接问题每 200 或 201 次请求就会发生一次,但是当同事运行相同的脚本时,他对每第二次或第三次请求都没有响应。我可以重复此操作,并以一致的时间间隔继续看到这些连接问题。
更新:
负载均衡器看起来像这样...
答案 0 :(得分:2)
我无法解释为什么,但我们发现如果我们将节点池中的虚拟机从可突发的虚拟机更改为非突发的(从“B”类到“D”类)然后问题就解决了。