Kubernetes 1.22版本下Minikube Ingress配置失效问题求助(WSL环境)
我明白你在WSL环境里配置Minikube Ingress时的头疼——所有Pod、Service、Ingress资源状态全绿,hosts也映射好了,但就是curl不通服务。结合Kubernetes 1.22+的特性和WSL的网络特殊性,咱们一步步来排查:
1. 先确认Ingress Controller的状态与关联关系
Kubernetes 1.22之后,IngressClass成为稳定特性,默认的Nginx Ingress Controller需要Ingress资源明确指定ingressClassName才能关联上,这也是很多旧教程失效的核心原因。
首先检查Ingress Controller的Pod是否正常运行:
kubectl get pods -n kube-system -l app.kubernetes.io/name=nginx-ingress如果Pod状态不是
Running,先重新启用ingress addon:minikube addons disable ingress && minikube addons enable ingress然后查看Ingress资源的事件,确认是否关联到了控制器:
kubectl describe ingress example-ingress如果看到类似
no ingress class specified的警告,那就是问题所在。你需要修改example-ingress.yaml,在spec部分添加ingressClassName: nginx:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx # 新增这一行 rules: - host: hello-world.info http: paths: - path: / pathType: Prefix backend: service: name: web port: number: 8080重新应用配置:
kubectl apply -f your-modified-ingress.yaml
2. 验证WSL与Minikube的网络连通性
WSL的网络环境有时候会有转发问题,先跳过域名直接测试Minikube IP的80端口:
curl http://192.168.49.2
如果这一步都不通,那问题出在网络层面:
- 检查WSL的防火墙规则,临时关闭防火墙测试:
sudo ufw disable(如果使用ufw) - 确认Minikube使用的驱动:
minikube config get driver,在WSL环境下推荐用docker驱动,如果你用的是virtualbox,需要额外配置端口转发 - 尝试在Minikube内部访问Service,确认服务本身没问题:
如果能返回Hello App的内容,说明Service和Deployment是正常的,问题集中在Ingress或WSL网络转发。minikube ssh curl http://web.default.svc.cluster.local:8080
3. 确保hosts配置真正生效
WSL默认会自动生成hosts文件,可能会覆盖你手动添加的映射。你已经在/etc/wsl.conf里加了generateHosts = false,但别忘了:
- 先验证hosts配置是否生效:
ping hello-world.info,看返回的IP是不是192.168.49.2 - 如果没生效,执行
wsl --shutdown关闭WSL,再重新打开终端,让配置生效
4. 查看Ingress Controller日志找线索
如果前面的步骤都没问题,看看Nginx Ingress Controller的日志,有没有请求到达或者报错:
kubectl logs -n kube-system -l app.kubernetes.io/name=nginx-ingress
如果日志里看不到来自WSL的请求记录,说明请求根本没到达Ingress Controller,大概率是WSL的网络路由问题;如果有请求但返回错误,根据日志提示进一步排查(比如路由规则匹配问题)。
内容的提问来源于stack exchange,提问作者Hamza Ince

