首页 文章

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

提问于
浏览
4

这是我的情况,我在kubernetes(ingress),有两个docker图像:一个专用于Web,第二个专用于api .

在下一个配置下(在消息的末尾): /web 将显示将对 /apiall 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

1 回答

  • 1

    这取决于您的前端和后端应用程序在路径方面的期望 . 通常情况下,前端会need to be able to find the backend on a certain external path,在您的情况下,您的后端需要在外部( /api )与集群内的工作方式( /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
    

相关问题