【发布时间】:2020-07-14 03:04:09
【问题描述】:
尝试将 React 前端 web 连接到 nodejs express api 服务器到 kubernetes 集群时出错。
可以在浏览器中导航到http:localhost:3000,并且网站正常。
但无法按预期导航到http:localhost:3008(不应暴露)
我的目标是将 REACT_APP_API_URL 环境变量传递给前端,以便设置 axios baseURL 并能够在前端和它的 api 服务器之间建立通信。
部署-front.yml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: gbpd-front
spec:
selector:
matchLabels:
app: gbpd-api
tier: frontend
track: stable
replicas: 2
template:
metadata:
labels:
app: gbpd-api
tier: frontend
track: stable
spec:
containers:
- name: react
image: binomio/gbpd-front:k8s-3
ports:
- containerPort: 3000
resources:
limits:
memory: "150Mi"
requests:
memory: "100Mi"
imagePullPolicy: Always
service-front.yaml
apiVersion: v1
kind: Service
metadata:
name: gbpd-front
spec:
selector:
app: gbpd-api
tier: frontend
ports:
- protocol: "TCP"
port: 3000
targetPort: 3000
type: LoadBalancer
Deploy-back.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: gbpd-api
spec:
selector:
matchLabels:
app: gbpd-api
tier: backend
track: stable
replicas: 3 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: gbpd-api
tier: backend
track: stable
spec:
containers:
- name: gbpd-api
image: binomio/gbpd-back:dev
ports:
- name: http
containerPort: 3008
service-back.yaml
apiVersion: v1
kind: Service
metadata:
name: gbpd-api
spec:
selector:
app: gbpd-api
tier: backend
ports:
- protocol: "TCP"
port: 3008
targetPort: http
我尝试了很多组合,也尝试将“LoadBalancer”添加到后台服务但没有...
我可以将完美连接到 localhost:3000 并使用前端,但前端无法连接到后端服务。
问题 1:为了正确传递 REACT_APP_API_URL 到前端,使用什么 ip/名称? 问题2:为什么 curl localhost:3008 没有响应?
在尝试了 k8s 官方文档中的几乎所有内容 2 天后...无法弄清楚这里发生了什么,因此非常感谢任何帮助。
kubectl 描述 svc gbpd-api 回应:
kubectl describe svc gbpd-api
Name: gbpd-api
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"gbpd-api","namespace":"default"},"spec":{"ports":[{"port":3008,"p...
Selector: app=gbpd-api,tier=backend
Type: LoadBalancer
IP: 10.107.145.227
LoadBalancer Ingress: localhost
Port: <unset> 3008/TCP
TargetPort: http/TCP
NodePort: <unset> 31464/TCP
Endpoints: 10.1.1.48:3008,10.1.1.49:3008,10.1.1.50:3008
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
【问题讨论】:
-
容器是否在监听 3008 端口?
-
是的,在本地工作,也在 docker-compse
-
kubectl describe svc gbpd-api 的输出是什么?前端和后端部署在同一个命名空间中?
-
答案已更新,是的,都在同一个命名空间中
-
如果你 curl 到 10.1.1.50:3008 是否有效?
标签: reactjs kubernetes cluster-computing node-jose