我尝试从前端向后端发出http请求
我想在 kubernetes 中同一节点的 pod 之间创建通信。 我以这种方式创建了部署:
文件 yaml:
后端(Spring-boot)
apiVersion: apps/v1
kind: Deployment
metadata:
name: tool-be
spec:
replicas: 1 # imposta il numero desiderato di repliche
selector:
matchLabels:
app: tool-be
template:
metadata:
labels:
app: tool-be
tier: tool-be
spec:
containers:
- name: tool-be
image: localhost:5000/tool-be:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: db-pass
value: "#####"
- name: db-username
value: "#####"
- name: spring.profiles.active
value: "kube"
---
apiVersion: v1
kind: Service
metadata:
name: tool-be-service
spec:
selector:
app: tool-be
ports:
- protocol: TCP
port: 8080
targetPort: 8080
前端(角度)
apiVersion: apps/v1
kind: Deployment
metadata:
name: tool-fe
spec:
replicas: 1 # imposta il numero desiderato di repliche
selector:
matchLabels:
app: tool-fe
template:
metadata:
labels:
app: tool-fe
tier: tool-fe
spec:
containers:
- name: tool-fe
image: localhost:5000/tool-fe:latest
ports:
- containerPort: 4200
---
apiVersion: v1
kind: Service
metadata:
name: tool-fe-service
spec:
selector:
app: tool-fe
ports:
- protocol: TCP
port: 4200
targetPort: 4200
type: LoadBalancer
我已经创建了 Pod 并且它们可以工作,但是当我尝试从前端到后端发出 hhtp 请求时(使用服务名称:http://tool-be-service:8080/....)我找到一个错误(net::ERR_NAME_NOT_RESOLVED),就好像地址错误(我不认为这可能是一个cors错误)。 但如果尝试使用以下命令连接到前端终端:
kubectl exec -it tool-fe-68... -- /bin/sh
end 然后在终端尝试执行:
wget http://tool-be-service:8080/...
它有效! (我发现一个 unatorize 错误,但我可以到达后端,如果我查看日志,我会发现请求尝试)
有人能告诉我问题所在吗? 为什么http请求从前端到后端无法连接?
问题解决了。
关键是这条评论:
“Angular 应用程序大概运行在最终用户的浏览器中。这不在 Kubernetes 集群内部,并且无法访问服务名称等内容。您可能需要设置一个 Ingress 来代理前端代码和后端 API 端点。- 大卫迷宫”
我在 kubernetes 的前端环境中更改了 url,使用 localhost 代替服务名称,我还暴露了后端服务,现在它可以工作了!!