You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes中Celery无法连接Redis的问题排查与解决

Celery在Kubernetes Pod中无法连接Redis:DNS解析异常问题的解决

我刚碰到了一模一样的坑,折腾了好一阵才找到根源,分享下我的排查过程和解决方案:

问题场景

在Kubernetes Pod中运行Celery时,反复出现Redis连接超时错误:

ERROR/MainProcess] consumer: Cannot connect to redis://:**@redis-master:6379/1: Error -3 connecting to redis-master:6379. Lookup timed out.. Trying again in 4.00 seconds... (1/100)

但奇怪的是,通过kubectl exec -it <你的Pod名称> -- /bin/bash进入同一Pod后,执行redis-cli -u redis://:@redis-master:6379/1 keys '*'能正常返回结果,说明Redis服务和Pod网络连通性没问题。

排查步骤

  1. 验证DNS解析:在Pod内执行dig redis-master.dev.svc.cluster.local,能正确解析到Redis服务的ClusterIP(比如10.0.13.13),排除K8s DNS服务故障的可能
  2. 切换连接方式测试:把Celery配置中的REDIS_HOST直接换成Redis的ClusterIP,Celery立刻就能正常连接Redis,确认问题出在Python客户端的DNS解析逻辑上

问题根源与解决方案

经过排查,问题出在Python依赖库dnspython的版本上:

  • dnspython 2.0.0版本存在DNS解析的bug,导致Celery依赖的Redis客户端无法正确处理Kubernetes内部域名解析
  • 回退到dnspython 1.16.0版本即可彻底解决这个问题

执行以下命令修复依赖:

pip install dnspython==1.16.0

如果是通过Docker镜像部署的Celery服务,记得把这个安装步骤添加到你的Dockerfile中,确保镜像构建时就安装正确版本的依赖:

RUN pip install dnspython==1.16.0

内容的提问来源于stack exchange,提问作者Michael A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:57:30