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

配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:45:56