Minikube集群中Angular连接Spring Boot报错ERR_NAME_NOT_RESOLVED
问题原因
- 核心问题:Angular是前端单页应用,代码最终运行在访问者的本地浏览器中,不在minikube集群内部网络里,浏览器无法识别K8s集群内部的Service域名
issuerwebservices,直接访问该域名必然触发DNS解析失败,抛出ERR_NAME_NOT_RESOLVED错误。K8s集群内部域名仅能被集群内运行的Pod解析调用。 - 配置问题:你提供的Deployment、Service YAML都存在严重的缩进错误,直接执行apply无法正常创建资源,即使解决DNS问题服务也无法正常运行。
修复步骤
1. 修正YAML配置缩进
YAML对缩进层级要求严格,修正后的Deployment配置如下:
apiVersion: apps/v1 kind: Deployment metadata: name: issuerwebservices spec: selector: matchLabels: app: issuerwebservices replicas: 1 template: metadata: labels: app: issuerwebservices spec: containers: - name: issuerwebservices image: jadeite1000/issuerwebservices:latest ports: - containerPort: 30001
修正后的Service配置如下:
apiVersion: v1 kind: Service metadata: name: issuerwebservices spec: selector: app: issuerwebservices ports: - name: http port: 30001 targetPort: 30001 nodePort: 30001 protocol: TCP type: NodePort
执行以下命令重新应用配置,验证资源状态正常:
kubectl apply -f workloads.yaml kubectl apply -f services.yaml # 检查Pod是否正常Running kubectl get pods # 检查Service是否正常创建 kubectl get svc issuerwebservices
2. 修改前端访问地址
本地minikube测试场景下,直接用NodePort对外暴露的地址访问即可:
- 执行命令获取minikube节点IP:
minikube ip
- 修改Angular项目的
environment.prod.ts配置,把baseUrl替换为http://<上一步获取的minikube IP>:30001/,示例:
export const environment = { production: false, baseUrl: 'http://192.168.49.2:30001/' };
- 重新打包Angular应用、更新集群中的Angular部署后即可正常访问后端接口。
可选优化:Ingress统一入口
如果需要模拟生产环境、不想写死节点IP,可以启用minikube的Ingress插件,配置路由规则将API路径转发到后端服务,前端直接使用相对路径访问,避免跨域和DNS问题:
- 启用Ingress插件:
minikube addons enable ingress
- 创建Ingress资源,将匹配
/api前缀的请求转发到issuerwebservices服务的30001端口 - 将Angular配置中的baseUrl改为相对路径
/api/即可
注意事项
- 集群内部Service域名仅适用于集群内Pod之间的互相调用,外部访问(包括浏览器访问、集群外服务器调用)都不能直接使用该域名。
- 跨域访问需要确保Spring Boot服务配置了正确的CORS规则,允许前端来源的请求,否则会出现跨域拦截错误。
内容的提问来源于stack exchange,提问作者jadeite1000
相关产品推荐
相关产品推荐

