首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进行前端和后端通信时遇到的问题

进行前端和后端通信时遇到的问题
EN

Stack Overflow用户
提问于 2022-05-08 18:16:49
回答 1查看 77关注 0票数 1

我正在使用Minikube制作一个完整的堆栈K8s应用程序,使用React作为前端,使用ASP.NETCore作为后端。这是我的配置

部署和服务

代码语言:javascript
复制
apiVersion: v1
kind: ServiceAccount
metadata:
  name: web-frontend
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
  labels:
    app: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app:
          frontend
    spec:
      serviceAccountName: web-frontend
      containers:
      - name: frontend
        image: frontend
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: frontend-svc
spec:
  selector:
   app: frontend
  ports:
   - protocol: TCP
     port: 80
     targetPort: 80
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-deployment
  labels:
    app: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app:
          backend
    spec:
      serviceAccountName: backend
      containers:
      - name: backend
        image: backend
        ports:
        - containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
  name: backend
spec:
  selector:
   app: backend
  ports:
   - protocol: TCP
     port: 5000
     targetPort: 5000

前端的Dockerfile

代码语言:javascript
复制
FROM node:alpine as build-image
WORKDIR /app
COPY package.json ./
COPY package-lock.json ./
RUN npm i
COPY . .
CMD ["npm", "run", "start"]

这是我的母校

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: frontend-backend-ingress
  annotations:
#    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /?(.*)
            pathType: Prefix
            backend:
              service:
                name: frontend-svc
                port:
                  number: 80
          - path: /api/?(.*)
            pathType: Prefix
            backend:
              service:
                name: backend
                port:
                  number: 5000

但是,当我输入minikube tunnel在本地公开入口IP时,我可以到达前端,但是当前端试图在浏览器控制台中向/api/something发出fetch请求时,就会得到GET http://localhost/api/patients/ 404 (Not Found)和错误SyntaxError: Unexpected token < in JSON at position 0

而且,如果我用这种方式改变进城

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: frontend-backend-ingress
  annotations:
#    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend-svc
                port:
                  number: 80
          - path: /api/
            pathType: Prefix
            backend:
              service:
                name: backend
                port:
                  number: 5000

然后我可以发出curl localhost/api/something并得到JSON结果,但是当前端试图联系后端时,我得到

代码语言:javascript
复制
GET http://localhost/api/patients/ 500 (Internal Server Error)
SyntaxError: Unexpected end of JSON input
    at main.358f50ad.js:2:473736
    at s (main.358f50ad.js:2:298197)
    at Generator._invoke (main.358f50ad.js:2:297985)
    at Generator.next (main.358f50ad.js:2:298626)
    at Al (main.358f50ad.js:2:439869)
    at a (main.358f50ad.js:2:440073)

这看起来很奇怪,因为如果我尝试前端和kubernetes之外的后端,一切都很好,从React应用程序中,来自后端的结果是正确的(当然,在package.json中使用的是package.json)。

EN

回答 1

Stack Overflow用户

发布于 2022-05-08 19:08:18

要在应用程序之间联系或建立链接,可以使用它们的kubernetes本机FQDN (如果您想要测试连接,可以尝试使用ping或telnet ),但是它是如何工作的:任何服务的默认FQDN是:

代码语言:javascript
复制
 <service-name>.<namespace>.svc.cluster.local.

在上面的示例中,您应该能够从前端的后端服务与以下内容联系:

代码语言:javascript
复制
backend.YOURNAMESPACENAME.svc.cluster.local:5000

对于相同命名空间中的服务,您不需要使用FQDN访问服务,只需使用服务名称即可:

代码语言:javascript
复制
backend:5000

我不知道您在哪里准确地配置了前端和后端之间的链接,但是,您应该将这个链接“可变化”,并在kubernetes清单中添加变量定义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72163933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档