多个nginx入口重写的默认路径 [英] Default path on multiple nginx ingress rewrite

查看:14
本文介绍了多个nginx入口重写的默认路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的情况,我在Kubernetes(入口)上,有两个docker图像:一个专门用于Web,另一个用于API。

在下一个配置下(在消息末尾):/web将显示将调用/api的前端,All Good There

/是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

这篇关于多个nginx入口重写的默认路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆