You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Ingress访问K8s API,求故障排查方法

排查Ingress访问超时问题的步骤

1. 检查命名空间一致性

你的Ingress部署在app命名空间,需确认Deployment和Service也在该命名空间下:

kubectl get deployment weather-api -n app
kubectl get service api-svc -n app

如果两者不在app命名空间,Ingress会无法找到后端服务,直接导致路由失败。

2. 查看Ingress控制器实时日志

Ingress-Nginx控制器的日志能直接暴露路由失败的具体原因,执行命令跟踪日志:

kubectl logs -n ingress-nginx deployment/ingress-nginx-controller -f

重点关注包含api-ingress或api-svc的日志条目,排查是否存在服务找不到、路径匹配错误或转发失败的提示。

3. 验证Ingress规则加载状态

检查Ingress资源的状态,确认规则已被控制器正确识别:

kubectl describe ingress api-ingress -n app

查看Events字段,确认是否有Successfully configured类的成功提示;同时核对Rules部分的路径、后端服务配置是否与预期一致。

4. 测试集群内部路由连通性

在集群内临时启动一个busybox Pod,测试从集群内部访问Ingress控制器的ClusterIP和目标路径:

kubectl run -it --rm busybox --image=busybox:1.35 -- sh
# 在busybox终端内执行
wget -O - http://10.0.240.185/api

如果内部访问也超时,说明Ingress控制器到后端服务的链路存在问题;若内部能正常访问,则问题出在外部到集群的网络层面。

5. 检查后端服务的端点关联状态

确认Service已正确关联到Pod的端点:

kubectl get endpoints api-svc -n app

查看ENDPOINTS字段是否显示Pod的IP和端口(如10.xx.xx.xx:80),如果为空,说明Service的标签选择器与Pod的标签不匹配(需核对Deployment的Pod标签app: ingress-weather和Service的selector是否一致)。

6. 排查外部网络防火墙/安全组

确认集群所在环境的防火墙或云平台安全组已开放Ingress控制器的端口:

  • 云平台场景:检查LoadBalancer对应的安全组是否允许80端口(或NodePort 32294)的TCP入站流量;
  • 本地集群场景:检查节点的防火墙规则是否放行32294端口的入站请求。

7. 验证Ingress类匹配情况

确认Ingress控制器使用的Ingress类与你的Ingress配置一致:

kubectl get deployment ingress-nginx-controller -n ingress-nginx -o yaml | grep -i ingress.class

如果控制器使用的类名(如nginx-ingress)与Ingress注解kubernetes.io/ingress.class: nginx不匹配,需修改注解保持一致。

8. 调整路径重写规则测试

你的Ingress配置了nginx.ingress.kubernetes.io/rewrite-target: /,但Prefix类型路径的重写规则可能需要调整。可临时修改Ingress配置:

# 修改后的路径及注解示例
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
    - http:
        paths:
        - path: /api(/|$)(.*)
          pathType: Prefix
          backend:
            service: 
              name: api-svc
              port: 
                number: 8100

应用修改后重新测试访问,排查是否因路径重写规则导致的路由失败。

9. 验证LoadBalancer外部IP可达性

从客户端执行连通性测试:

telnet 104.42.145.179 80
# 或用curl查看详细报错
curl -v http://104.42.145.179/api

如果telnet无法连通,说明外部IP本身不可达,需排查云平台LoadBalancer绑定状态或网络路由问题。


内容的提问来源于stack exchange,提问作者Marc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:57:41