如何重写 ingress yaml 中两个路径的目标

Fur*_*ürk 2 kubernetes kubernetes-ingress nginx-ingress

我有ingress.yaml两条路径;每个到我的一个微前端。然而,我真的很难让重写目标发挥作用。mf1 正确加载,但 mf2 不正确。我做了一些研究,知道我需要使用Captured Groups,但似乎无法正确实现这一点。我怎么做?

这就是我的入口的样子:

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
Run Code Online (Sandbox Code Playgroud)

lar*_*sks 5

您需要在表达式中使用正则表达式捕获组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
Run Code Online (Sandbox Code Playgroud)

我们需要确保对于这两个规则,捕获组$2包含所需的路径。对于第一条规则 ( path: /),我们有一个空组$1(因为这里不需要),并在 中捕获整个路径$2

对于第二条规则,我们匹配/mf2后跟 a/path...或 作为 url 结尾的内容(这确保我们不会错误地匹配/mf2something)。组$1将包含/(或不包含),并且路径进入$2

在这两种情况下,重写的路径 ( /$2) 都会有我们想要的。