K8部署应用连接Docker中Memcached超时问题求助
Memcached: Timeout waiting for value: waited 10,000 ms. Node status: Connection Status ip:port active: true, authed: true, last read: 7,060,231ms ago
结合你描述的环境变化(应用迁K8、Memcached留Docker)以及telnet连通但应用超时的现象,可能的原因如下:
K8网络策略限制出站流量:K8节点telnet能通不代表Pod可以访问。检查Pod所属命名空间的
NetworkPolicy规则,确认是否允许Pod向Memcached的IP/端口发起出站请求——默认拒绝策略会直接阻断Pod内应用的通信。Memcached绑定地址限制:如果Memcached启动时绑定的是
127.0.0.1,即使Docker做了端口映射到主机,K8 Pod的请求会被Memcached拒绝(只接受本地连接)。修改Memcached启动参数为绑定0.0.0.0,允许外部(包括K8 Pod)连接。应用配置的Memcached地址错误:若应用仍配置Docker内部的hostname(如容器名)或
localhost,K8 Pod无法解析Docker内部域名,localhost也指向Pod自身,自然无法正常通信。需将配置改为Memcached所在主机的集群可访问IP。客户端连接池配置失效:报错显示连接"active"但超过7000秒未读取数据,说明应用连接池的空闲连接未被及时回收,Memcached端已释放连接但应用仍认为可用,导致请求超时。调整客户端连接池的
idleTimeout、maxIdle参数,缩短空闲连接回收周期。Pod内部网络限制:K8 Pod内可能存在防火墙规则,或节点SELinux策略限制了Pod进程的对外网络请求。可在Pod内执行
nc -zv <memcached-ip> <port>测试连通性,或临时关闭SELinux验证是否恢复。Memcached连接数耗尽:应用迁K8后并发量上升,或旧连接未释放导致Memcached达到
max_connections上限。通过telnet <memcached-ip> <port>后执行stats connections查看当前连接数,若达到上限则调整Memcached的max_connections参数,或优化应用连接池的复用策略。
内容的提问来源于stack exchange,提问作者786543214

