簡體   English   中英

如何在單個域上為 React app + Express 設置 k8s ingress?

[英]How do you setup k8s ingress for React app + Express on single domain?

我有一個用 React 構建的前端應用程序和在 nodejs 上構建的后端。 兩者都有一個單獨的 Docker 映像,因此在 k8s (gce) 上有一個單獨的部署。

每個部署都有對應的 k8s 服務,比方說fe-sericebe-service

我正在嘗試設置一個 Ingress,以便通過以下方式在單個域中公開這兩個服務:

  • /api/* - 路由到be-service
  • 其他一切都路由到fe-service

這是我的 yaml 文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: my-host
    http:
      paths:
      - path: /*
        backend:
          serviceName: fe-service
          servicePort: 80
      - path: /api/*
        backend:
          serviceName: be-service
          servicePort: 5000

這是我使用 curl 得到的結果:

curl [ip] --header "Host: my-host" -> React 應用程序(如預期的那樣)

curl [ip]/foo --header "Host: my-host" -> nginx 404(為什么?)

curl [ip]/api --header "Host: my-host" -> nginx 404(為什么?)

curl [ip]/api/ --header "Host: my-host" -> nodejs 應用程序

curl [ip]/api/foo --header "Host: my-host" -> nodejs 應用程序

據我所知,帶有api/的部分工作正常,但我無法弄清楚其他所有內容,我嘗試了帶/不帶通配符的不同組合,但它仍然無法按照我希望的方式工作。

我錯過了什么? 這可能嗎? 提前致謝!

我無法解釋為什么 /foo 不起作用

/api/* 不涵蓋 /api,它只涵蓋 /api/ 之后的所有內容

我不認為這里的問題是你的入口,而是你的 nginx 設置(沒有看到它。),因為 React 應用程序是單頁應用程序,你需要告訴 nginx 服務器總是尋找index.html而不是去例如/usr/share/nginx/html/foo可能什么也找不到。

我想您會在這里找到相關信息。 祝你好運@Andrey,讓我知道這是否有幫助!

我希望不會遲到回應。 請使用kubernetes use-regrex注釋來確保它映射到您的服務端點。 請確保在重置結束時完成 React 應用程序服務映射。 使用以下 yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - host: my-host
    http:
      paths:
      - path: /api/?(.*)
        backend:
          serviceName: be-service
          servicePort: 5000
       - path: /?(.*)
        backend:
          serviceName: fe-service
          servicePort: 80

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM