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

Redis Sentinel无法解析Redis主机名问题求助

Redis Sentinel无法解析K8s集群内Redis主机名的解决方案

问题定位

从日志看,Sentinel服务和客户端都无法解析Redis的StatefulSet Pod域名redis-0.redis.xxxx-service-platform.svc.cluster.local,属于Kubernetes集群内DNS解析异常,即便同集群部署也可能因配置疏漏导致。

分步排查与修复

1. 手动测试Pod内DNS解析

进入Sentinel Pod执行解析测试,确认DNS服务是否正常:

# 进入目标Sentinel Pod
kubectl exec -it <your-sentinel-pod-name> -- /bin/sh
# 用nslookup测试域名解析
nslookup redis-0.redis.xxxx-service-platform.svc.cluster.local
# 或用dig工具(若Pod内已安装)
dig redis-0.redis.xxxx-service-platform.svc.cluster.local
  • 若解析失败,检查Pod内/etc/resolv.conf文件,确认DNS服务器指向K8s集群DNS(通常是coredns.kube-system.svc.cluster.local或kube-dns.kube-system.svc.cluster.local)
  • 若resolv.conf配置错误,检查Pod所属Namespace的dnsPolicy是否被手动修改(默认ClusterFirst即可)

2. 验证Redis Service与Pod关联

确保Redis的StatefulSet Podredis-0处于Running状态,且对应的Headless Service配置正确:

# 查看Redis Pod状态
kubectl get pods -n xxxx-service-platform
# 查看Redis Headless Service详情
kubectl get svc redis -n xxxx-service-platform -o yaml
  • 重点检查Service的spec.selector是否与Redis Pod的标签完全匹配,不匹配会导致Service无法关联Pod,进而域名无解析记录

3. 修正Sentinel监控配置

检查ConfigMap中的Sentinel配置,确保监控地址正确:

# 示例正确的Sentinel配置片段
sentinel monitor mymaster redis-0.redis.xxxx-service-platform.svc.cluster.local 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
  • 推荐直接使用Headless Service域名redis.xxxx-service-platform.svc.cluster.local,Sentinel会自动发现集群内所有Redis节点,避免单个Pod域名失效问题
  • 确保配置中未设置resolve-hostnames no(默认启用解析,无需手动修改)

4. 检查NetworkPolicy限制

确认Sentinel所在Namespace与Redis所在Namespace之间没有NetworkPolicy拦截DNS流量(UDP 53端口):

# 查看两个Namespace的NetworkPolicy
kubectl get networkpolicy -n xxxx-service-platform
kubectl get networkpolicy -n <sentinel-namespace>
  • 若存在限制规则,添加允许访问K8s DNS服务的策略,示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-dns
  namespace: <sentinel-namespace>
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: kube-system
      podSelector:
        matchLabels:
          k8s-app: kube-dns
    ports:
    - protocol: UDP
      port: 53

5. 重建Sentinel Pod

若以上配置均无问题,删除并重建Sentinel Pod,确保加载最新配置与DNS设置:

kubectl delete pod <your-sentinel-pod-name> -n <sentinel-namespace>

内容的提问来源于stack exchange,提问作者Aykut MÜNÜK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:57:02