【问题标题】:How to rewrite URLs for some specific paths?如何重写某些特定路径的 URL?
【发布时间】:2021-08-29 15:29:28
【问题描述】:

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

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  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 重写?

【问题讨论】:

    标签: kubernetes url-rewriting nginx-ingress


    【解决方案1】:

    我设法通过这个配置得到了想要的结果:

    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: /$2
      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 注释是全局的,我使用/$2 作为重写目标,/()(.*) 作为根路径的 noop。

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      相关资源
      最近更新 更多