这是我关于这个问题的第三篇文章,希望也是最后一篇。问题是 - 我正在为我的大学做一个项目,我有 3 个 kubernetes pod - 一个带有 React 应用程序,它应该连接到第二个带有 Express 应用程序的 pod,该应用程序连接到 mongo 数据库。我配置了用于连接那些使用环境变量的链接。所以,这些 Pod 可以自行工作,但现在当我为它们设置入口时,出现了一个问题:
kind: Ingress
metadata:
name: frontend-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /frontend
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 3001
- path: /backend
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 5001
在这里,如您所见,我将前端服务的路径指定为
/frontend
,将后端服务的路径指定为/backend
。奇怪的是,如果我尝试打开http://localhost/frontend
,它似乎会找到链接,但页面似乎是空的,即使浏览器选项卡标题似乎正确更改,并且浏览器中的开发模式似乎也发生了变化。显示一些默认模板反应代码。 但是,如果我只是将 path: /
用作前端的 path: /frontend
,页面会正确加载。 如果我为其设置空路径,后端也可以正常工作,但我无法为这两个服务设置相同的路径。我该如何解决这个问题以便我可以正确访问两者?
我正在使用minikube。如果您需要它,这里是我的后端和前端部署和服务的配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-deployment
spec:
replicas: 1
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: cloud-frontend
imagePullPolicy: Never
ports:
- containerPort: 3001
env:
- name: REACT_APP_API_URL
value: "http://localhost"
- name: PORT
value: "3001"
---
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
selector:
app: frontend
ports:
- protocol: TCP
port: 3001
targetPort: 3001
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-deployment
spec:
replicas: 1
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: backend
image: cloud-backend
imagePullPolicy: Never
ports:
- containerPort: 5001
env:
- name: PORT
value: "5001"
- name: DBLINK
value: "mongodb://database-service:27017/TODO"
---
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector:
app: backend
ports:
- protocol: TCP
port: 5001
targetPort: 5001
type: ClusterIP
@nicvampire 你好,是的,一周以来我一直在努力解决同样的问题。您找到解决此问题的方法了吗?请告诉我。