【发布时间】:2021-08-14 22:02:49
【问题描述】:
我们最近设置了一个带有 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 秒(我假设这是 Invoke-WebRequest 方法的超时时间)然后写“无法连接到远程服务器”。
为了调试问题,我们启用了端口转发以绕过负载均衡器,从而直接寻址 pod(添加了主机标头):没问题; powershell 脚本在至少 10 分钟内始终显示 200 响应。
我们还启用了到 NGINX 控制器的端口转发并重复测试:再次,一致的200 响应。
但如果未启用端口转发,对 URL 的请求(现在通过负载平衡器)会显示间歇性连接问题。
奇怪的是,当我运行脚本时,这些连接问题每 200 或 201 个请求发生一次,但是当一位同事运行相同的脚本时,他对每个第二个或第三个请求都没有响应。我可以重复此操作,并以一致的时间间隔继续查看这些连接问题。
更新:
负载均衡器看起来像这样......
【问题讨论】:
-
您为集群设置了哪种负载均衡器?它的日志显示什么?
-
我添加了一个显示负载均衡器详细信息的屏幕截图。
-
你好@awj。你能提供你当前的 yaml 配置吗?
标签: kubernetes azure-aks azure-load-balancer