WSL(Ubuntu)环境下Kubernetes Ingress无法正常工作问题排查
Minikube Nginx Ingress在WSL环境无法访问问题排查
问题背景
在WSL(Ubuntu)环境下使用Minikube部署Nginx服务,Pod和Service内部测试正常,但Ingress无法对外提供访问;相同配置在原生Ubuntu主机上可正常运行。
配置文件
Nginx Pod YAML
apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: name: my-nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
Service YAML
apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: name: my-nginx name: nginx-service spec: ports: - port: 8080 protocol: TCP targetPort: 80 selector: name: my-nginx status: loadBalancer: {}
Ingress YAML
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: number: 8080
当前状态检查结果
执行 kubectl get ingress 输出:
NAME CLASS HOSTS ADDRESS PORTS AGE nginx-ingress nginx * 192.168.49.2 80 141m
执行 kubectl describe ingress nginx-ingress 输出:
Name: nginx-ingress Labels: <none> Namespace: default Address: 192.168.49.2 Ingress Class: nginx Default backend: <default> Rules: Host Path Backends ---- ---- -------- * / nginx-service:8080 (10.244.0.16:80) Annotations: nginx.ingress.kubernetes.io/rewrite-target: / Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Sync 5m49s (x2 over 6m2s) nginx-ingress-controller Scheduled for sync
测试验证
- Pod内部服务正常:
kubectl exec -it nginx-pod -- curl localhost可正常获取Nginx默认页面 - 直接访问Ingress地址
curl http://192.168.49.2/请求挂起,无响应
针对性解决方案(WSL环境)
1. 切换Minikube网络驱动
WSL默认的网络驱动可能存在NAT转发问题,建议切换到Docker驱动:
# 停止并删除现有集群 minikube stop && minikube delete # 用Docker驱动启动集群(需WSL2已安装Docker) minikube start --driver=docker # 启用Ingress插件 minikube addons enable ingress
2. 启用Minikube Tunnel
WSL2的NAT网络无法直接暴露Minikube的负载均衡地址,需通过tunnel转发端口:
# 启动隧道,绑定到所有地址 minikube tunnel --bind-address 0.0.0.0
启动后可通过Windows主机的localhost或WSL的IP访问Ingress服务。
3. 检查WSL网络转发规则
确保WSL的IPTABLES转发规则正常:
sudo iptables -P FORWARD ACCEPT
同时检查Windows防火墙是否允许WSL相关的入站流量,可临时关闭防火墙测试。
4. 验证Ingress控制器状态
确认Ingress控制器Pod正常运行:
kubectl get pods -n ingress-nginx
若Pod异常,查看日志排查:
kubectl logs -n ingress-nginx <ingress-controller-pod-name>
内容的提问来源于stack exchange,提问作者DrMcCleod
相关产品推荐
相关产品推荐

