【问题标题】:Kubernetes: Ingress-nginx does not work well with subpaths in the /api routeKubernetes:Ingress-nginx 不适用于 /api 路由中的子路径
【发布时间】:2022-07-01 19:18:15
【问题描述】:

我正在尝试访问后端中的子路径,但它似乎不适用于 /api/hello 等任何东西,除了 /api/。

这是我的配置:


apiVersion: networking.k8s.io/v1

kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
    # ADD ANNOTATION
    nginx.ingress.kubernetes.io/rewrite-target: /$2

spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /api(/|$)(.*)
            # UPDATE PATH
            pathType: Prefix
            backend:
              service:
                name: server-srv
                port:
                  number: 3000

          - path: /
            pathType: Prefix
            backend:
              service:
                name: client-srv
                port:
                  number: 3000

当尝试访问 /api 中的子路径时,我会收到 404 not found。

任何帮助将不胜感激~!

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    Ingress 中的每条路径都需要有对应的路径类型。不包含显式 pathType 的路径将无法通过验证。

    Ingress 的路径字段唯一支持的通配符是 * 字符。 * 字符必须跟在正斜杠 (/) 之后,并且必须是模式中的最后一个字符。 例如,/、/foo/ 和 /foo/bar/* 是有效模式,但 、/foo/bar 和 /foo//bar不是。更具体的模式优先于不太具体的模式。如果您同时拥有 /foo/ 和 /foo/bar/,则采用 /foo/bar/bat 匹配 /foo/bar/。有关路径限制和模式的更多信息匹配,见URL Maps documentation

    建议:尝试将路径提及为 /api/*

    其他参考文档:

    https://github.com/kubernetes/ingress-nginx/issues/1120#issuecomment-322007251 https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#multiple_backend_services

    【讨论】:

      猜你喜欢
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 2017-08-28
      • 1970-01-01
      • 2020-04-18
      相关资源
      最近更新 更多