kubernetes 如何为入口yaml中的两个路径重写目标

ca1c2owp  于 2023-01-08  发布在  Kubernetes
关注(0)|答案(1)|浏览(147)

我有一个有两条路径的ingress.yaml;我的一个微前端。但是,我真的很难让rewrite-target工作。mf 1正确加载,但mf 2不能。我做了一些研究,知道我需要使用捕获组,但似乎无法正确实现。我该怎么做?
我的入口是这样的:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-ingress
  annotations:
    kubernetes.io/ingress.class: public
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: mf1
                port:
                  number: 80
          - path: /mf2
            pathType: Prefix
            backend:
              service:
                name: mf2
                port:
                  number: 80
ylamdve6

ylamdve61#

您需要在path表达式中使用正则表达式捕获组,然后在.../rewrite-target注解中引用该捕获组。
它可能看起来像这样:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: "/$2"
spec:
  rules:
    - http:
        paths:
          - path: /()(.*)
            pathType: Prefix
            backend:
              service:
                name: backend1
                port:
                  name: http
          - path: /mf2(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: backend2
                port:
                  name: http

我们需要确保对于这两个规则,捕获组$2包含所需的路径。对于第一个规则(path: /),我们有一个空组$1(因为这里不需要),整个路径捕获在$2中。
对于第二个规则,我们匹配/mf2,后面跟着/path...,或者作为url的结尾(这确保了我们不会错误地匹配/mf2something),组$1将包含/(或者什么都不包含),路径进入$2
在这两种情况下,重写后的路径(/$2)将包含我们想要的内容。

相关问题