首页 > 解决方案 > Nginx 入口路由问题

问题描述

我对 url 路径有疑问。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: backend
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /v1/$1
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  tls:
  - hosts:
    - backend.example.com
    secretName: backend-example-com
  rules:
  - host: backend.example.com
    http:
      paths:
      - path: /v9/anonymous/set-data/?(.*)
        backend:
          serviceName: backend2
          servicePort: 80
      - path: /v9/?(.*)
        backend:
          serviceName: backend1
          servicePort: 80

在服务中我得到

/v1/

但我应该得到

/v1/anonymous/set-data/foo/bar/

我需要重写路径中的所有版本/v1/ 并且一些请求应该去后端1,但是后端2的一些特定路径

标签: kubernetesurl-rewritingnginx-ingress

解决方案


找到解决方案

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: backend
  annotations:
#    nginx.ingress.kubernetes.io/rewrite-target: /v1/$1
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/v9/?(.*)$ /v1/$1 break;
spec:
  tls:
  - hosts:
    - backend.example.com
    secretName: backend-example-com
  rules:
  - host: backend.example.com
    http:
      paths:
      - path: /v9/anonymous/set-data/?(.*)
        backend:
          serviceName: backend2
          servicePort: 80
      - path: /v9/?(.*)
        backend:
          serviceName: backend1
          servicePort: 80

一切都重写/v1/并按应有的方式工作


推荐阅读