这是我的情况,我在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

最佳答案

这取决于您的前端和后端应用程序对路径的期望。通常,前端将为need to be able to find the backend on a certain external path,在您的情况下,听起来您的后端需要从外部(在集群中工作)(/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

关于kubernetes - 多个Nginx入口重写的默认路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51702872/

10-15 21:52