多个 nginx 入口重写的默认路径

Default path on multiple nginx ingress rewrite

这是我的情况,我在 kubernetes(入口)上,有两张 docker 图片:一张专用于网络,第二张专用于 api。

在下一个配置下(在消息的末尾):/web 将显示将对 /api 进行一些调用的前端,一切都很好.

/ 是 404,因为没有定义任何内容,我无法在入口配置中找到一种方法来告诉 / 应该重定向到 /web

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dev-ingress
  annotations:
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - demo.com
    secretName: tls-secret
  rules:
  - host: demo.com
    http: 
      paths:
      - path: /api
        backend:
          serviceName: api-app
          servicePort: 8080
      - path: /web
        backend:
          serviceName: web-app
          servicePort: 80

这取决于您的前端和后端应用对路径的期望。通常,前端将 ,在您的情况下,听起来您的后端需要在外部路径(/api)上与它在集群内的工作路径(/)上可用.您可以重写对 api 的请求的目标,以便 /api 将在请求路由到后端时转到 /

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dev-ingress-backend
  annotations:
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - demo.com
    secretName: tls-secret
  rules:
  - host: demo.com
    http: 
      paths:
      - path: /api
        backend:
          serviceName: api-app
          servicePort: 8080

并且您还可以为不重写目标的前端定义一个单独的入口(具有不同的名称),以便对 /web 的请求将转到 /web

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dev-ingress-frontend
  annotations:
    kubernetes.io/tls-acme: "true"
spec:
  tls:
  - hosts:
    - demo.com
    secretName: tls-secret
  rules:
  - host: demo.com
    http: 
      paths:
      - path: /web
        backend:
          serviceName: web-app
          servicePort: 80