我有一个工作集群,其中的服务全部响应在 Azure AKS 上运行的安装了 Ingress nGinx 的 helm 后面。这最终是 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 Blog pod 的服务,它使用名为“Knex”的 npm 包连接到远程 MySQL 数据库。碰巧,较新版本的 Knex 有一个错误(尚未解决),即如果 Knex 客户端和远程数据库服务器之间的连接被切断并且需要恢复,它不会重新连接,而是无限地连接负载。
nGinx 错误 503 网关超时
在我的情况下,导致 nGinx Ingress 给我错误 503 网关超时。这是因为在空闲超时切断 Knex 连接后 Ghost 没有响应,因为 Knex 无法正常工作并且无法正确恢复与服务器断开的连接。
Fine.我回滚了 Knex,一切都很好。
但到底为什么我的 pod 连接会从数据库断开呢?
因此,这个问题有望节省未来一些人尝试解决与 Kubernetes(可能是 Azure 特定的,也可能不是)相关的虚拟问题的时间,在服务/pod 空闲一段时间后切断连接。