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

这是我的情况,我在kubernetes(ingress),有两个docker图像:一个专用于Web,第二个专用于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
点赞