【问题标题】:kubectl command disconnects after few minutes of idle timekubectl 命令在几分钟的空闲时间后断开连接
【发布时间】:2018-11-14 09:50:38
【问题描述】:

我们注意到当我们exec -it 连接到一个 pod 时,在一定的空闲时间后连接被破坏了。是否有任何选项可以让连接保持更长时间?

我看到有一个开放的PR,但想知道是否有解决此问题的方法。

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    简短的回答是否定的。这就是为什么:

    Enabling TCP keepalive for console connections

    TCP keepalive 是一个 TCP 选项,它会导致数据包通过 即使没有要传输的流量也可以建立连接。它应该是 在连接的两端启用。必须启用 TCP keepalive 在操作系统级别由应用程序/程序 打开 TCP 连接。

    在 Linux 上,编辑“/etc/sysctl.conf”文件并添加以下行:

    net.ipv4.tcp_keepalive_time = 200
    net.ipv4.tcp_keepalive_probes = 9
    net.ipv4.tcp_keepalive_intvl = 50
    

    (随意调整您认为合适的值)。完成编辑后,您 必须让内核知道新值:

    # sysctl --load=/etc/sysctl.conf
    

    Custom Configuration of TCP Socket Keep-Alive Timeouts

    这些属性的默认值为:

    tcp_keepalive_time = 7200 seconds
    tcp_keepalive_probes = 9
    tcp_keepalive_intvl = 75 seconds
    

    另一种可能的方式是在客户端启动某种代理服务器,并通过它连接到 Kubernetes apiserver。 我自己没有测试过,这可能会很棘手,但here 是一个如何为 Nginx 启用 keepalives 后端的示例。

    【讨论】:

      【解决方案2】:

      我还没有找到更改超时的方法,但一种解决方法可能是重新附加:

      $ kubectl run psql --image postgres \
          --env PGHOST=<HOST> \
          --env PGUSER=<USER>  
          --env PGPASSWORD=<PWD> \
          --restart Never -- \
          bash -c 'while true; do echo -n "."; sleep 1; done'
      pod/psql created
      
      $ kubectl attach psql
      Defaulting container name to psql.
      Use 'kubectl describe pod/psql -n default' to see all of the containers in this pod.
      If you don't see a command prompt, try pressing enter.
      ............
      

      【讨论】:

        猜你喜欢
        • 2015-08-13
        • 2018-09-20
        • 1970-01-01
        • 2021-08-10
        • 2012-10-20
        • 2020-05-06
        • 1970-01-01
        • 2021-12-26
        • 2021-07-15
        相关资源
        最近更新 更多