Minikube环境下Ingress无法路由前端服务的排查求助
问题描述
我用Minikube搭建了Kubernetes集群,想通过Ingress访问前端服务。已经配置了Ingress并修改了/etc/hosts文件,但无法通过浏览器访问barakatouna.ma域名。Ingress控制器运行正常,所有Pod状态都正确,但应用就是访问不了。
配置文件
frontend-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: frontend-deployment namespace: project-management spec: replicas: 1 selector: matchLabels: app: frontend template: metadata: labels: app: frontend spec: containers: - name: frontend image: yazid0hakimi/companymanagement-frontend:latest ports: - containerPort: 80 env: - name: REACT_APP_API_URL valueFrom: configMapKeyRef: name: frontend-config key: API_URL resources: limits: memory: "256Mi" cpu: "200m" requests: memory: "128Mi" cpu: "100m"
frontend-service.yaml
apiVersion: v1 kind: Service metadata: name: frontend-service namespace: project-management spec: selector: app: frontend ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort
frontend-ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: frontend-ingress namespace: project-management annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: barakatouna.ma http: paths: - path: / pathType: Prefix backend: service: name: frontend-service port: number: 80
frontend-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: frontend-config namespace: project-management data: API_URL: "http://backend-service.project-management:8088" REACT_APP_ENV: "production" REACT_APP_VERSION: "1.0.0"
/etc/hosts 文件
127.0.0.1 localhost ::1 localhost # Added by Docker Desktop 100.79.128.254 host.docker.internal 100.79.128.254 gateway.docker.internal # To allow the same kube context to work on the host and the container: 127.0.0.1 kubernetes.docker.internal 192.168.49.2 barakatouna.ma # End of section
已执行操作
- 使用
kubectl apply -f应用所有YAML配置。 - 在Minikube中启用Ingress插件:
minikube addons enable ingress。 - 启动Minikube隧道:
minikube tunnel。 - 将Minikube IP添加到/etc/hosts文件中。
集群状态检查
所有资源状态(project-management命名空间)
kubectl get all -n project-management NAME READY STATUS RESTARTS AGE pod/backend-deployment-6c6b5997b7-kvxln 1/1 Running 10 (4d1h ago) 6d pod/debug 0/1 Error 0 5d23h pod/frontend-deployment-86f6fdd77-mtvzw 1/1 Running 2 4d23h pod/mysql-deployment-79d6c9555b-2k4lx 1/1 Running 6 (4d1h ago) 6d NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/backend-service NodePort 10.105.228.71 <none> 8088:31733/TCP 6d service/frontend-deployment NodePort 10.101.226.161 <none> 8080:30949/TCP 4d23h service/frontend-service NodePort 10.111.235.165 <none> 80:30080/TCP 6d service/mysql-service ClusterIP 10.98.97.34 <none> 3306/TCP 6d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/backend-deployment 1/1 1 1 6d deployment.apps/frontend-deployment 1/1 1 1 5d deployment.apps/mysql-deployment 1/1 1 1 6d NAME DESIRED CURRENT READY AGE replicaset.apps/backend-deployment-6c6b5997b7 1 1 1 6d replicaset.apps/frontend-deployment-7466c844dd 0 0 0 5d replicaset.apps/frontend-deployment-86f6fdd77 1 1 1 4d23h replicaset.apps/mysql-deployment-5d97cd759c 0 0 0 6d replicaset.apps/mysql-deployment-79d6c9555b 1 1 1 6d
Ingress配置详情
kubectl get ingress -n project-management -o yaml apiVersion: v1 items: - apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"networking.k8s.io/v1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"frontend-ingress","namespace":"project-management"},"spec":{"rules":[{"host":"barakatouna.ma","http":{"paths":[{"backend":{"service":{"name":"frontend-service","port":{"number":80}}},,"path":"/","pathType":"Prefix"}]}}]}} nginx.ingress.kubernetes.io/rewrite-target: / creationTimestamp: "2024-08-28T19:48:55Z" generation: 1 name: frontend-ingress namespace: project-management resourceVersion: "20606" uid: 61159641-0439-4549-b0f9-3032ba32e682 spec: ingressClassName: nginx rules: - host: barakatouna.ma http: paths: - backend: service: name: frontend-service port: number: 80 path: / pathType: Prefix status: loadBalancer: ingress: - ip: 192.168.49.2 kind: List metadata: resourceVersion: ""
Ingress控制器状态
kubectl get pods -n ingress-nginx NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-h5flq 0/1 Completed 0 5d ingress-nginx-admission-patch-c2jsz 0/1 Completed 0 5d ingress-nginx-controller-7bf9bf9df7-hd4zv 1/1 Running 0 70m
Minikube IP
minikube ip 192.168.49.2
访问测试结果
- 浏览器访问
http://barakatouna.ma页面无法加载 - 执行
nslookup barakatouna.ma返回:
Server: 192.168.0.1 Address: 192.168.0.1 192.168.0.1 can't find barakatouna.ma: Non-existent domain
疑问
- 哪些因素可能阻碍Ingress将流量路由到我的前端服务?
- 我的Ingress或Service配置是否存在错误?
- 如何排查域名
barakatouna.ma解析失败的问题? - 在Minikube环境中,我还缺少哪些额外的步骤或配置?
解答
1. 阻碍Ingress路由的可能因素
- 域名解析失败:主机未正确读取/etc/hosts配置,导致请求未发送到Minikube IP
- Ingress控制器规则未生效:控制器可能未重载最新的Ingress配置
- 防火墙或网络策略:主机防火墙阻挡80端口流量,或Kubernetes网络策略限制Ingress到Service的访问
- Service到Pod的连通性:虽然标签匹配,但Pod内部服务可能未正常监听端口
- Minikube隧道未持续运行:
minikube tunnel是前台进程,关闭终端会导致LoadBalancer IP失效
2. Ingress与Service配置检查
你的配置无明显错误:
- Service标签选择器
app: frontend与Pod标签完全匹配,端口映射(80->80)正确 - Ingress规则指向正确的Service和端口,
rewrite-target注解对于根路径访问合理(单页应用可额外添加nginx.ingress.kubernetes.io/use-regex: "true",但非必须) - 注意:Service类型为NodePort不是Ingress访问的必要条件,ClusterIP类型即可,此配置不影响访问
3. 域名解析失败排查步骤
- 验证hosts配置生效:执行
ping barakatouna.ma,若返回IP不是192.168.49.2,说明hosts未被读取:- 检查hosts文件语法:确保IP与域名之间用空格/制表符分隔,无多余空格
- 刷新DNS缓存:
- Linux:
sudo systemctl restart systemd-resolved - macOS:
sudo killall -HUP mDNSResponder - Windows:
ipconfig /flushdns
- Linux:
- 检查DNS优先级:执行
getent hosts barakatouna.ma(Linux/macOS),确认是否返回正确IP,避免系统优先使用公共DNS - 确认修改权限:确保是以管理员/sudo身份编辑的/etc/hosts,普通用户修改的文件可能不生效
4. Minikube环境补充步骤
- 保持minikube tunnel运行:使用
nohup minikube tunnel &让隧道后台运行,避免终端关闭后失效 - 验证Ingress服务端口:执行
kubectl get svc -n ingress-nginx,确认ingress-nginx-controller的EXTERNAL-IP为192.168.49.2 - 跳过Ingress直接测试:通过NodePort访问前端服务
http://192.168.49.2:30080,确认Pod本身能正常响应 - 查看Ingress控制器日志:执行
kubectl logs -n ingress-nginx ingress-nginx-controller-7bf9bf9df7-hd4zv,排查请求转发错误 - 检查Pod内部服务:进入前端Pod执行
curl localhost,确认容器内Web服务正常:kubectl exec -n project-management frontend-deployment-86f6fdd77-mtvzw -- curl localhost
内容的提问来源于stack exchange,提问作者internet user
相关产品推荐
相关产品推荐

