Kubernetes环境下Ingress无法访问Pod及前后端连接问题求助
解决方案
1. 修复前端API地址核心问题
前端容器配置的REACT_APP_API_URL使用了K8S集群内部的backend-service:5001域名,这个地址仅能在集群内部容器间访问,浏览器运行的前端属于集群外部环境,无法解析该域名。必须替换为外部可访问的后端地址:
修改frontend.yaml中的环境变量:
env: - name: REACT_APP_API_URL value: "http://finelist1.com/api" - name: PORT value: "3001"
2. 统一Ingress配置(推荐方案)
无需分开配置两个Ingress,通过单Ingress的路径规则区分前端和后端服务,简化配置逻辑:
创建app-ingress.yaml文件,内容如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress spec: rules: - host: finelist1.com http: paths: - path: / pathType: Prefix backend: service: name: frontend-service port: number: 3001 - path: /api pathType: Prefix backend: service: name: backend-service port: number: 5001
删除原有frontend-ingress和backend-ingress配置,应用这个统一Ingress。
3. 启用Minikube Ingress控制器
Minikube默认未启用Ingress控制器,需手动开启:
minikube addons enable ingress
等待控制器部署完成,可通过以下命令验证状态:
kubectl get pods -n ingress-nginx
确保所有Ingress相关Pod处于Running状态。
4. 验证Hosts配置正确性
Windows系统的hosts文件路径为C:\Windows\System32\drivers\etc\hosts,需添加:
<Minikube节点IP> finelist1.com
获取Minikube节点IP的命令:
minikube ip
替换为实际输出的IP(例如你配置过的192.168.49.2)。
5. 清理冗余配置
- 删除后端Service中的
externalIPs字段,Ingress已足够实现外部访问; - 前端Service的
nodePort字段可删除,让K8S自动分配端口(保留也不影响Ingress功能)。
6. 应用配置并验证
- 重新部署所有资源:
kubectl apply -f frontend.yaml kubectl apply -f backend.yaml kubectl apply -f app-ingress.yaml
- 等待Pod重启完成:
kubectl get pods
- 在浏览器访问
http://finelist1.com,前端应正常加载并通过/api路径连接后端。
排查步骤(若仍无法访问)
- 检查Ingress状态:
kubectl get ingress,确认ADDRESS字段有值,无值则说明Ingress控制器未正常工作; - 查看Ingress控制器日志:
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx,排查路由错误; - 测试后端接口:使用
curl http://finelist1.com/api/你的接口路径,验证后端是否可通过Ingress访问。
内容的提问来源于stack exchange,提问作者nicvampire
相关产品推荐
相关产品推荐

