srv记录是dns中用于服务发现的资源记录,不直接指向端口,而是声明某服务运行在指定主机和端口上;其标准格式为_服务名._协议.域名,记录值含优先级、权重、端口和可解析的目标主机名。

SRV记录本身不直接“指向端口”,而是告诉客户端:某个服务(比如你的微服务)运行在哪个主机、哪个端口上。它本质是服务发现机制,不是端口映射或反向代理。配置的关键在于填对四个核心字段,并确保目标主机能被正常解析。
明确服务标识和协议
SRV记录名称必须严格按 _服务名._协议.域名 格式构造。例如:
- 你的微服务叫 payment-api,用HTTP通信 → 记录名填 _payment-api._tcp.yourdomain.com
- 若用gRPC(基于HTTP/2)且走TCP → 同样用 _tcp,如 _grpc._tcp.yourdomain.com
- 不支持 _http 或 _https 协议前缀——DNS标准只认 _tcp 和 _udp
填写记录值的四个关键参数
记录值格式为:优先级 权重 端口 目标主机(中间用空格分隔):
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 优先级:数值越小越先尝试。单实例部署填 0 即可
- 权重:同优先级下流量分配比例。单实例填 100 或任意正整数(无实际负载均衡时可忽略)
- 端口:微服务实际监听的端口,比如 8080 或 9001
- 目标主机:必须是能被DNS解析出IP的域名(A或AAAA记录),不能是IP地址。例如 payment-svc.default.svc.cluster.local(K8s内网)或 payment-prod.yourdomain.com(公网CNAME/A记录已配好)
确保目标主机可达且端口开放
SRV只是“指路”,不解决连通性问题:
- 如果目标主机是Kubernetes Service,确认该Service有ClusterIP或NodePort,且后端Pod健康
- 如果指向公网域名,检查该域名的A记录是否指向正确的云服务器或LB IP,并确认安全组/防火墙放行对应端口
- 客户端需主动支持SRV查询(如curl不支持,但Prometheus、gRPC-go、etcd客户端等原生支持)
验证配置是否生效
用命令行快速确认:
- Linux/macOS:dig SRV _payment-api._tcp.yourdomain.com +short
- Windows:nslookup -type=SRV _payment-api._tcp.yourdomain.com
- 预期返回类似:0 100 8080 payment-svc.default.svc.cluster.local.(注意末尾的点)
- 再查目标主机是否能解析:dig A payment-svc.default.svc.cluster.local +short










