本地开发环境使用Ingress暴露K8s集群及访问无响应问题求解
问题排查与解决步骤
1. 修正Ingress配置错误
你当前的Ingress配置存在两处直接导致访问异常的问题:
- 路径匹配规则缺失:你仅配置了
/auth前缀的路由规则,直接访问my-domain.dev根路径没有匹配的后端服务,自然无响应 - 重写注解配置错误:你使用了
nginx.ingress.kubernetes.io/rewrite-target: /$1,但path规则里没有定义捕获组,会导致路径重写后不符合预期
修改后的ingress-srv.yaml参考:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: # 新增捕获组,匹配/auth之后的所有路径重写到服务根路径 nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - host: my-domain.dev http: paths: # path修改为带捕获组的规则 - path: /auth(/|$)(.*) pathType: Prefix backend: service: name: auth-srv port: number: 3003
修改后重新应用配置:kubectl apply -f ingress-srv.yaml
2. 验证Minikube Ingress连通性
minikube的ingress默认需要确认是否正确暴露了80/443端口,按以下步骤检查:
- 先直接访问ingress地址验证端口连通性:
curl 182.138.19.21,如果返回nginx 404页面说明ingress控制器本身正常运行 - 如果上述命令无响应,执行
minikube addons list确认ingress插件状态为enabled,如果异常可以先禁用再重新开启:minikube addons disable ingress minikube addons enable ingress - 大部分桌面环境下minikube的ingress需要通过
tunnel命令暴露到宿主机,新开一个终端窗口执行:minikube tunnel,执行期间不要关闭该终端,再重新测试访问
3. 验证后端服务可用性
先在集群内部验证auth-srv是否正常响应,排除服务本身故障:
- 启动一个临时测试pod执行curl测试:
kubectl run -it --rm --image=curlimages/curl testcurl -- curl auth-srv:3003 - 如果上述命令无返回,说明auth服务本身存在问题,先检查Deployment的pod运行状态:
kubectl get pods | grep auth-depl,再查看pod日志定位问题:kubectl logs <替换为实际的auth-pod名称>
4. 访问测试
完成上述配置后,使用正确的路径测试:
- curl测试:
curl my-domain.dev/auth - 浏览器访问:直接输入
http://my-domain.dev/auth即可
内容的提问来源于stack exchange,提问作者Raz Buchnik
相关产品推荐
相关产品推荐

