代码之家  ›  专栏  ›  技术社区  ›  Necevil

什么Azure Kubernetes(AKS)“超时”会在我的集群中断开Pod内外的连接?

  •  9
  • Necevil  · 技术社区  · 8 年前

    这最终是特定于Azure的。

    我的问题是:

    这是为了得到最终答案,即到底是什么触发了导致本地“浏览”代理UI与我的集群断开连接的超时(更多关于我为什么要求遵循的背景信息)。

    从Az CLI使用Azure AKS时,您可以使用以下命令从终端启动本地浏览UI:

    az aks browse --resource-group <resource-group> --name <cluster-name>

    这很好用,打开一个类似这样的浏览器窗口(耶):

    Azure AKS Disconnects Connections entering pods

    在终端中,您将看到以下内容:

    1. http://127.0.0.1:8001/ 按CTRL+C关闭通道。。。
    2. [::1]:8001->9090处理连接8001处理连接8001处理连接8001处理连接

    E0605 13:39:51.940659 5704端口转发。go:178]与吊舱的连接中断

    那么问题是什么?

    nGinx错误503网关超时

    好的 我把Knex向后推,一切都很好。

    但为什么我的pod连接从数据库开始就被切断了呢?

    因此,这个问题有望节省一些未来的人日来尝试解决与Kubernetes(可能是特定于Azure的,可能不是)相关的幻影问题,在服务/pod闲置一段时间后切断连接。

    1 回复  |  直到 8 年前
        1
  •  5
  •   Necevil    8 年前

    简短回答:

    空闲超时既是标准的,也是必需的(尽管您可以修改它,请参见此处: https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-tcp-idle-timeout )。也就是说,对于从负载平衡器IP向外传输的任何流量,没有办法完全消除这种情况。当前支持的最长持续时间为30分钟。

    因此,根据最初的问题,处理这个问题的最佳方法(我觉得)是将超时时间保持在4分钟(因为它无论如何都必须存在),然后在达到负载平衡器超时之前,设置基础设施以优雅的方式断开连接(空闲时)。

    对于我们的Ghost博客(它访问了一个MySQL数据库),我能够像上面提到的那样回滚,这使得Ghost进程能够处理DB断开/重新连接的场景。

    是的。同样的问题。

    https://github.com/pgbouncer/pgbouncer )作为我们集群中的另一个容器,可以通过以下指南找到: https://github.com/edoburu/docker-pgbouncer/tree/master/examples/kubernetes/singleuser

    通常,任何试图从AKS访问远程数据库的人都可能需要实现一个中间连接池解决方案。池服务位于中间(PGBOUNCESS为我们),并跟踪多久连接一直闲置,使您的工人进程不需要关心这一点。

    如果您开始接近负载平衡器超时,连接池服务将抛出旧连接并创建新连接(重置计时器)。这样,当您的客户机通过管道发送数据时,它会像预期的那样到达数据库服务器。

    这是一个非常令人沮丧的错误/案例。我们花了至少两天的时间来找出第一个解决方案,但即使知道这可能是同一个问题,这次我们又花了两天时间。

    即使将计时器延长到超过4分钟的默认值,也不会有真正的帮助,因为这只会让问题更容易解决。我想我只是希望那些在从Azure AKS/Kubernetes连接到远程数据库时遇到困难的人比我更擅长谷歌搜索,并能为自己省去一些痛苦。

    推荐文章