跳转至

StatefulSet域名解析

用的是 StatefulSet + Headless Service,所以 Redis Pod 会有 固定的 DNS 域名,不用自己去记 IP。

1. 查看 Service

先看你定义的 Headless Service 名字(一般就是 redis):

kubectl get svc

你应该能看到类似:

NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
redis           ClusterIP   None         <none>        6379/TCP   10m

这里的 redis 就是你 StatefulSet 的 serviceName


2. Pod 的域名规则

StatefulSet Pod 的域名是:

<pod-name>.<service-name>.<namespace>.svc.cluster.local

比如你的 Pod:

  • redis-0 → 域名:

    redis-0.redis.default.svc.cluster.local

  • redis-1 → 域名:

    redis-1.redis.default.svc.cluster.local

  • redis-2 → 域名:

    redis-2.redis.default.svc.cluster.local

如果你就在 default namespace 下,可以直接用短域名:

redis-0.redis:6379
redis-1.redis:6379
redis-2.redis:6379

3. 验证解析

你可以在集群里起一个 busybox 容器测试:

kubectl run -it --rm dns-test --image=busybox:1.28 --restart=Never -- nslookup redis-0.redis

或者直接解析:

kubectl exec -it redis-0 -- nslookup redis-1.redis


✅ 总结:

  • 你的 Redis 主节点访问地址是:redis-0.redis.default.svc.cluster.local:6379

  • 从节点分别是:redis-1.redis.default.svc.cluster.local:6379redis-2.redis.default.svc.cluster.local:6379