配置NestJS TypeORM缓存连接K8s Redis服务遇连接拒绝问题排查
问题排查步骤
1. 检查NestJS代码是否正确读取环境变量
确认你的DatabaseModule配置没有硬编码127.0.0.1,而是正确读取REDIS_HOST环境变量。比如:
// 错误示例(硬编码本地地址) RedisModule.forRoot({ host: '127.0.0.1', port: 6379, }); // 正确示例(优先读取环境变量) RedisModule.forRoot({ host: process.env.REDIS_HOST || '127.0.0.1', port: parseInt(process.env.REDIS_PORT, 10) || 6379, });
如果代码里保留了127.0.0.1作为默认值,要确认环境变量是否真的覆盖了这个默认值——有可能环境变量未正确注入,导致代码使用了默认的本地地址。
2. 验证user service Pod中的环境变量是否生效
直接进入user service的Pod,查看环境变量是否正确设置:
kubectl exec -it <user-service-pod-name> -- env | grep REDIS_HOST
如果输出为空或不是10.100.77.0,说明Helm的Deployment配置存在问题。检查Deployment的env配置段:
# Deployment中正确的env配置示例 spec: containers: - name: user-service image: your-user-service-image env: - name: REDIS_HOST value: "10.100.77.0" # 若从ConfigMap读取,需确保配置正确 # - name: REDIS_HOST # valueFrom: # configMapKeyRef: # name: redis-config # key: redis-host
3. 确认Redis Service和Pod的状态
检查Redis Service的端口配置是否为6379,以及Redis Pod是否正常就绪:
# 查看Redis Service详情 kubectl describe service <redis-service-name> # 查看Redis Pod运行状态 kubectl get pods -l app=redis
如果Redis Pod未处于Running状态,或者Service的targetPort与Redis Pod暴露的端口不一致,都会导致连接失败。
4. 测试user service到Redis ClusterIP的连通性
在user service Pod内部直接测试与Redis ClusterIP的连通性:
# 进入user service Pod kubectl exec -it <user-service-pod-name> -- sh # 用telnet测试端口连通性 telnet 10.100.77.0 6379 # 或用nc工具 nc -zv 10.100.77.0 6379
如果连不通,排查K8s网络策略是否阻止了user service到Redis的流量,或者Redis Pod的容器内是否有防火墙规则限制了6379端口的访问。
5. 检查Helm模板的渲染结果
Helm模板变量替换可能出错,渲染Deployment模板确认最终生成的配置:
helm template <your-release-name> <chart-path> | grep -A5 -B5 REDIS_HOST
确保渲染后的env部分正确设置了REDIS_HOST的值。
内容的提问来源于stack exchange,提问作者Jun
相关产品推荐
相关产品推荐

