Minikube Ingress访问时无限挂起问题求助
问题描述
我已通过minikube addons enable ingress启用Ingress,并验证其处于运行状态:
$ kubectl get pods -n ingress-nginx NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-pzhzn 0/1 Completed 0 53m ingress-nginx-admission-patch-k9xdn 0/1 Completed 0 53m ingress-nginx-controller-7c6974c4d8-rkcrp 1/1 Running 0 53m
随后获取了Minikube IP:
$ minikube ip 192.168.49.2
Deployment/Service/Ingress定义如下:
apiVersion: apps/v1 kind: Deployment metadata: name: karpenter-test-deployment labels: app: karpenter-test spec: replicas: 1 selector: matchLabels: app: karpenter-test template: metadata: labels: app: karpenter-test spec: containers: - name: karpenter-test-manager image: localhost/test-karpenter-manager:latest imagePullPolicy: Never ports: - containerPort: 8000 --- apiVersion: v1 kind: Service metadata: name: karpenter-test-service spec: selector: app: karpenter-test ports: - protocol: TCP port: 8000 targetPort: 8000 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /api pathType: Prefix backend: service: name: karpenter-test-service port: number: 8000
已验证Pod处于运行状态:
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES karpenter-test-deployment-945ff8f95-fbv24 1/1 Running 0 95m 10.244.0.3 minikube <none> <none>
但访问http://192.168.49.2/api时页面无限挂起,通过kubectl port-forward service/karpenter-test-service 8000:8000可正常访问http://localhost:8000/api,询问原因及解决办法。
原因分析
- Ingress重写规则错误:当前配置的
nginx.ingress.kubernetes.io/rewrite-target: /会把所有/api前缀的请求重写到服务的根路径/,但你的服务实际只响应/api路径(port-forward时访问/api正常),重写后请求访问的是服务未处理的根路径,导致超时挂起。 - Minikube Ingress端口未暴露:Minikube中Ingress Controller的Service默认是
LoadBalancer类型,需要通过minikube tunnel建立宿主机到集群的端口转发,否则直接用Minikube IP无法访问Ingress服务。
解决办法
方法1:修正Ingress重写规则
如果服务需要接收/api路径的请求,调整重写规则或直接移除重写注解:
- 如需保留路径前缀,修改Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: rules: - http: paths: - path: /api/(.*) pathType: Prefix backend: service: name: karpenter-test-service port: number: 8000
- 如不需要重写,直接删除
rewrite-target注解:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress spec: rules: - http: paths: - path: /api pathType: Prefix backend: service: name: karpenter-test-service port: number: 8000
方法2:启动Minikube Tunnel
在终端执行以下命令(保持窗口打开):
minikube tunnel
之后再访问http://192.168.49.2/api即可正常转发请求。
额外验证步骤
- 检查Ingress配置是否正确关联服务:
kubectl describe ingress minimal-ingress
- 查看Ingress Controller日志排查转发问题:
kubectl logs -n ingress-nginx ingress-nginx-controller-7c6974c4d8-rkcrp
内容的提问来源于stack exchange,提问作者wfgeo
相关产品推荐
相关产品推荐

