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

Kubernetes服务名解析失败:Angular模块联邦跨Pod通信问题

问题

在Minikube集群的default命名空间中有两个Angular应用,分别部署在不同Pod中,使用Module Federation实现应用间通信:

  1. 最初在主应用的webpack.config.js中配置远程应用地址为http://remote-app-srv/remoteEntry.js,尝试通过Kubernetes服务名访问,但浏览器控制台报错GET http://remote-app-srv/remoteEntry.js net::ERR_NAME_NOT_RESOLVED,无法解析服务名对应的IP;使用服务全限定名也出现同样问题。不过通过kubectl exec进入Pod执行nslookup remote-app-srv时,能成功解析到服务的IP地址。
  2. 后续修改Ingress规则,将/remoteEntry.js路径转发至远程应用服务,并将地址改为http://ms.test/remoteEntry.js,此时浏览器能获取到remoteEntry.js内容,但控制台出现GET http://ms.test/487.a4d1c1bd4d8ce404.js net::ERR_ABORTED 404 (Not Found)错误,导致ChunkLoadError,无法加载远程模块。进入Pod可确认该chunk文件存在。

请问这两个问题的原因是什么?

问题原因分析

第一个问题的原因

Kubernetes的服务名(包括全限定名)是集群内部DNS系统专属解析的,只有集群内的Pod、组件能识别这些域名。而浏览器运行在本地机器上,不在K8s集群的网络范围内,本地DNS无法解析remote-app-srv这类集群内部服务名,所以会出现域名解析失败的错误。
你用kubectl exec进入Pod后执行nslookup,是在集群内部的Pod环境中,自然能通过K8s的CoreDNS正常解析服务名。

第二个问题的原因

  1. Ingress规则覆盖不全:你只配置了/remoteEntry.js路径的转发规则,但远程应用的chunk文件(比如487.a4d1c1bd4d8ce404.js)的请求路径没有对应的Ingress转发规则,浏览器请求http://ms.test/xxx.js时,Ingress不知道要转发到远程应用的服务,直接返回404。
  2. 远程应用的Webpack配置问题:远程应用的webpack.config.js中publicPath参数可能没有设置为Ingress的外部访问地址(http://ms.test/)。Module Federation生成的remoteEntry.js里会记录chunk文件的加载路径,默认是基于远程应用的内部服务地址或相对路径,当浏览器拿到remoteEntry.js后,会按照这个路径去请求chunk,导致请求地址错误。即使Ingress配置了所有路径转发,如果publicPath不对,也可能出现路径不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:44:48