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

如何通过DNS实现Kubernetes中Spring Boot与Node.js服务通信?

Kubernetes内部服务DNS互访指南(针对你的Spring Boot + Node.js场景)

首先得明确:Kubernetes内部服务间通信是通过Service而非直接访问Pod,所以你需要先确认两个应用对应的ClusterIP Service的名称——这是DNS解析的核心依据。

第一步:获取你的Service名称

先执行命令查看default命名空间下的所有Service(你的Pod在default命名空间):

kubectl get services -n default

输出会类似这样:

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
java-spring-boot-svc  ClusterIP   10.96.123.45    <none>        8080/TCP         2d
nodejs-app-svc        ClusterIP   10.96.67.89     <none>        3000/TCP,8081/TCP 1d

这里的NAME列就是你需要的服务名称,比如上面的java-spring-boot-svc和nodejs-app-svc。

第二步:Kubernetes服务DNS的格式规则

K8s集群内部的DNS解析遵循固定格式,分两种场景:

1. 同命名空间下的服务(你的场景应该属于这种,因为Pod都在default)

最简写法:直接用Service名称,比如:

  • REST请求:http://nodejs-app-svc:3000(假设Node.js服务的REST端口是3000)
  • WebSocket连接:ws://nodejs-app-svc:8081(假设WebSocket端口是8081)

完整域名写法(可选,更严谨):

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

对应你的场景就是:
http://nodejs-app-svc.default.svc.cluster.local:3000

2. 跨命名空间的服务(如果后续拆分到不同命名空间)

必须使用完整域名,格式同上,比如Java服务在backend命名空间,Node.js在frontend:
http://java-spring-boot-svc.backend.svc.cluster.local:8080

第三步:代码里的实际用法示例

Node.js调用Spring Boot的REST接口

// 最简写法(同命名空间)
fetch('http://java-spring-boot-svc:8080/api/users')
  .then(res => res.json())
  .then(data => console.log(data));

Spring Boot连接Node.js的WebSocket

// 最简写法(同命名空间)
WebSocketClient client = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.connect("ws://nodejs-app-svc:8081/ws", new StompSessionHandlerAdapter() {
    // 处理会话逻辑
});

第四步:验证DNS是否正常解析

如果遇到连接问题,可以进入Pod内部验证DNS解析是否生效:

  1. 进入Java应用的Pod:
kubectl exec -it <java-pod-name> -n default -- /bin/bash
  1. 用nslookup解析Node.js服务:
nslookup nodejs-app-svc

如果能返回类似下面的结果,说明DNS正常:

Name:      nodejs-app-svc
Address 1: 10.96.67.89 nodejs-app-svc.default.svc.cluster.local

注意事项

  • 确保Service的port字段和你代码里用的端口一致(不是Pod的容器端口,是Service暴露的端口)
  • ClusterIP服务仅能在集群内部访问,所以你的应用Pod必须运行在K8s集群里
  • 如果是WebSocket通信,要确保Service的端口协议设置正确(默认是TCP,WebSocket基于TCP,所以没问题)

内容的提问来源于stack exchange,提问作者wild_nothing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:55:33