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

Kubernetes集群中Traefik作为Ingress Controller访问应用出现404错误

Apache应用通过Traefik Ingress访问404问题排查

我在Kubernetes集群中部署了Apache演示应用,使用Traefik作为Ingress Controller。应用本身无问题(将Service改为NodePort类型后可正常访问),但通过Traefik Ingress访问时出现404错误,以下是相关配置及问题详情:

应用部署配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache
  labels:
    name: apache
spec:
  selector:
    matchLabels:
      app: apache
  replicas: 1
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: apache
        image: httpd:latest
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: apache-svc
  labels:
    name: apache
spec:
  type: ClusterIP
  ports:
    - port: 80
      name: http
      targetPort: 80
  selector:
    app: apache
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: apache-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: apache-svc
            port:
              number: 80

Traefik Service配置

kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: monitoring
spec:
  selector:
    app: traefik
  ports:
    - protocol: TCP
      port: 80
      name: http
      targetPort: http
    - protocol: TCP
      port: 8080
      name: admin
      targetPort: admin
  type: NodePort

补充:Traefik Dashboard的IngressRoute配置

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-webui-ingress
  namespace: monitoring
spec:
  entryPoints:
    - web
  routes:
  - match: PathPrefix(`/`)
    kind: Rule
    services:
    - name: traefik
      port: 8080

当前Service信息

NAMESPACE      NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)
monitoring     traefik-ingress-service   NodePort    x.x.x.x      <none>        80:<httpNodePort>/TCP,8080:<AdminNodePort>/TCP

问题现象

通过http://<workerIP>:<AdminNodePort>/test/访问应用时出现404错误,但将apache-svc改为NodePort类型后,通过对应NodePort可正常访问应用,确定问题出在Traefik Ingress Controller配置上。


排查与解决方案

  1. 访问端口错误
    你误用了Traefik的Admin端口(8080对应的NodePort)访问应用,该端口仅用于Traefik Dashboard。应用的Ingress规则绑定在Traefik的web入口点(对应Service的80端口),应使用http://<workerIP>:<httpNodePort>/test/访问。

  2. IngressRoute路由优先级冲突
    Traefik Dashboard的IngressRoute配置了PathPrefix(/),该规则会匹配所有请求,优先级高于Apache的Ingress规则。需调整Dashboard的路由前缀,避免覆盖其他规则:

    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: traefik-webui-ingress
      namespace: monitoring
    spec:
      entryPoints:
        - web
      routes:
      - match: PathPrefix(`/dashboard`)
        kind: Rule
        services:
        - name: traefik
          port: 8080
        middlewares:
        - name: strip-dashboard-prefix
    ---
    apiVersion: traefik.containo.us/v1alpha1
    kind: Middleware
    metadata:
      name: strip-dashboard-prefix
      namespace: monitoring
    spec:
      stripPrefix:
        prefixes:
          - /dashboard
    
  3. 确认Traefik启用Kubernetes Ingress支持
    检查Traefik启动参数,确保添加了--providers.kubernetesingress,否则Traefik不会处理标准Ingress资源。

  4. Ingress类注解兼容性
    若使用Traefik v2+,建议替换旧注解为Traefik专用注解,确保Ingress被正确识别:

    metadata:
      name: apache-ingress
      annotations:
        traefik.ingress.kubernetes.io/router.entrypoints: web
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:07:44