我有一个工作集群,其中所有服务都响应在 Azure AKS 上运行的 helm 安装的 Ingress nGinx。这最终是特定于 Azure 的。
我的问题是:为什么我与此集群中的服务/pod 的连接会定期断开(显然是由于某种空闲超时),为什么连接断开似乎也与我的 Az AKS Browse UI 连接被切断一致?
这是为了获得关于究竟是什么触发了导致本地“浏览”代理 UI 与我的集群断开连接的超时的最终答案(关于我为什么要求关注的更多背景信息)。
从 Az CLI 使用 Azure AKS 时,您可以使用以下命令从终端启动本地浏览 UI:
az aks browse --resource-group <resource-group> --name <cluster-name>
这工作正常并弹出一个看起来像这样的浏览器窗口(耶):
在您的终端中,您将看到以下内容:
- 在http://127.0.0.1:8001/上运行的代理按 CTRL+C 关闭隧道...
- 从 127.0.0.1:8001 转发 -> 9090 转发自
- [::1]:8001 -> 9090 8001 处理连接 8001 处理连接 8001 处理连接
如果您让集群的连接闲置几分钟(即您不与 UI 交互),您应该看到以下打印,表明连接已超时:
E0605 13:39:51.940659 5704 portforward.go:178] 失去与 pod 的连接
我仍然不明白的一件事是集群内的其他活动是否可以延长此超时时间,但无论您看到上面的内容,您基本上都在同一个地方......这意味着我们可以谈论它看起来的事实就像我从该服务器中的 pod 发出的所有其他连接一样,也已通过负责切断与 AKS 浏览 UI 联系的任何超时过程关闭。
那么问题是什么?
这对我来说是个问题的原因是我有一个运行 Ghost 博客 pod 的服务,该 pod 使用名为“Knex”的 npm 包连接到远程 MySQL 数据库。碰巧的是,较新版本的 Knex 有一个错误(尚未解决),如果 Knex 客户端和远程数据库服务器之间的连接被切断并需要恢复 - 它不会重新连接,只是无限负载。
nGinx 错误 503 网关超时
在我的情况下,导致 nGinx Ingress 给我一个错误 503 网关超时。这是因为在空闲超时切断 Knex 连接后 Ghost 没有响应——因为 Knex 没有正常工作并且没有正确恢复与服务器断开的连接。
美好的。 我回滚了 Knex,一切都很好。
但是为什么我的 pod 连接从我的数据库开始就被切断了呢?
因此,这个问题有望节省未来一些人尝试解决与 Kubernetes 相关的幻象问题(可能是 Azure 特定的,也许不是)在服务/pod 空闲一段时间后切断连接。