如何重写某些特定路径的 URL?

How to rewrite URLs for some specific paths?

我在 ingress-nginx 文档中读到,由于这样的注释,正在执行重写:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /something(/|$)(.*)

我有一个案例,我有多个主机,我想 URL 仅重写某些特定路径:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
  name: ingress
spec:
  rules:
    - host: somehost.westeurope.cloudapp.azure.com
      http:
        paths:
        - path: /rest-smtp-sink # I want to rewrite this path
          pathType: Prefix
          backend:
            service:
              name: rest-smtp-sink-svc
              port:
                number: 80
        - path: /backend # This one too
          pathType: Prefix
          backend:
            service:
              name: server-svc
              port:
                number: 80
        - path: / # But not this one
          pathType: Prefix
          backend:
            service:
              name: client-svc
              port:
                number: 80

但是,注释似乎是全局的。如何仅对某些路径启用 URL 重写?

我设法通过此配置获得了预期的结果:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: ingress
spec:
  rules:
    - host: somehost.westeurope.cloudapp.azure.com
      http:
        paths:
        - path: /rest-smtp-sink(/|$)(.*)
          pathType: Prefix
          backend:
            service:
              name: rest-smtp-sink-svc
              port:
                number: 80
        - path: /backend(/|$)(.*)
          pathType: Prefix
          backend:
            service:
              name: server-svc
              port:
                number: 80
        - path: /()(.*)
          pathType: Prefix
          backend:
            service:
              name: client-svc
              port:
                number: 80

由于 nginx.ingress.kubernetes.io/rewrite-target 注释是全局的,我使用 / 作为重写目标,使用 /()(.*) 作为根路径的 noop。