【发布时间】:2021-03-09 15:26:32
【问题描述】:
我的后端服务与 ingress nginx 配合得很好。 我正在尝试将前端 SPA 反应应用程序添加到我的入口,但没有成功。
我确实设法让它工作,但我无法让我的后端和前端都工作。
我的入口 yml 是
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
nginx.ingress.kubernetes.io/rewrite-target: /$2
#nginx.ingress.kubernetes.io/add-base-url: "true"
spec:
rules:
- host: accounting.easydeal.dev
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-srv
port:
number: 3000
- host: api.easydeal.dev
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: docker-hello-world-svc
port:
number: 8088
- path: /accounting(/|$)(.*)
pathType: Prefix
backend:
service:
name: accounting-srv
port:
number: 80
- path: /company(/|$)(.*)
pathType: Prefix
backend:
service:
name: dealers-srv
port:
number: 80
使用上面的这个 yml,我可以像这样戳我的后端 -> api.easydeal.dev/helloword 或 api.easydeal.dev/company/* 和它的工作原理!。
但是,我的 react 应用程序 (accounting.easydeal.dev) 以白页结束,控制台日志显示此错误 ->
Uncaught SyntaxError: Unexpected token '<'
我能让我的 react 应用工作的唯一方法是将 rewrite-target: /$2 更改为 / 。但是这样做会阻止正确路由我的其他 api。
我确实将 React 应用的主页设置为“。”但仍然有错误,我也尝试为我的前端设置路径到 /?(*)
这是我的 dockerfile
# pull the base image
FROM node:alpine
# set the working direction
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install
COPY . ./
EXPOSE 3000
CMD ["npm", "start"]
【问题讨论】:
-
您能否使用 Firefox“检查”窗口中的“查看源代码”或“检查器”选项卡检查实际返回的 HTML。
-
您是否尝试在 2 个资源上拆分
Ingress?accounting带有特定的注释,api就像问题中的那个? -
@SameerNaik 我没有页面,没有内容
-
@DawidKruk 当您说 2 个资源时,您的意思是创建 2 个入口服务吗?如果是这样,如果我需要它们都在同一个域上,这会带来问题吗?我认为这将为每个人创建不同的 ip
-
@Pilouk 是正确的。请看看我想说什么:kubernetes.github.io/ingress-nginx/user-guide/basic-usage
标签: reactjs docker nginx kubernetes nginx-ingress