[英]Setting up a React application and NodeJS backend in Kubernetes?
我正在尝试将连接到 NodeJS 后端的示例 React 应用程序设置为 Kube.netes 中的两个 pod。 这是(大部分)带有 Express 的默认CRA 和 NodeJS 应用程序,即npx create-react-app my_app
。
这两个应用程序分别通过yarn start
和npm app.js
在本地运行良好。 React 应用程序使用 package.json 中定义的代理与package.json
进行通信。
反应 package.json
...
"proxy": "http://localhost:3001/"
...
反应 Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn
COPY . .
CMD [ "yarn", "start" ]
节点 Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD [ "node", "app.js" ]
ui部署
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: sample-ui
namespace: my_namespace
spec:
replicas: 1
selector:
matchLabels:
app: my_namespace
component: sample-ui
template:
metadata:
labels:
app: my_namespace
component: sample-ui
spec:
containers:
-
name: sample-ui
image: xxx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: http
protocol: TCP
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
服务器部署
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: sample-server
namespace: my_namespace
spec:
replicas: 1
selector:
matchLabels:
app: my_namespace
component: sample-server
template:
metadata:
labels:
app: my_namespace
component: sample-server
spec:
containers:
-
name: sample-server
image: xxx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3001
name: http
protocol: TCP
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
用户界面服务
apiVersion: v1
kind: Service
metadata:
name: sample-ui
namespace: my_namespace
labels: {app: sample-ui}
spec:
type: LoadBalancer
selector:
component: sample-ui
ports:
- name: listen
protocol: TCP
port: 3000
服务器服务
apiVersion: v1
kind: Service
metadata:
name: sample-server
namespace: my_namespace
labels: {app: sample-server}
spec:
selector:
component: sample-server
ports:
- name: listen
protocol: TCP
port: 3001
这两项服务在我的系统上运行良好。
获取服务
sample-server ClusterIP 10.19.255.171 <none> 3001/TCP 26m
sample-ui LoadBalancer 10.19.242.42 34.82.235.125 3000:31074/TCP 26m
然而,我的 CRA 部署多次崩溃,尽管表明它仍在running
。
获取豆荚
sample-server-598776c5fc-55jsz 1/1 Running 0 42m
sample-ui-c75ccb746-qppk2 1/1 Running 4 2m38s
我怀疑我的React Dockerfile配置不正确,但我不确定如何编写它以在 kube.netes 中使用 NodeJS 后端。
a) 我如何为我的 CRA 设置我的 Dockerfile 以便它在 pod 中运行?
b) 如何设置我的 docker 服务和 pod,以便它们进行通信?
您必须在服务器前面使用 come API 网关,或者您可以使用 kube.netes 的大使。
然后你可以让你的客户端连接到服务器。
a) 我如何为我的 CRA 设置我的 Dockerfile 以便它在 pod 中运行?
React docker 文件看起来不错,您需要检查 pod 容器失败的原因。
使用kubectl describe pod <POD name>
或使用命令kubectl logs <pod name>
调试更多日志
我如何设置我的 docker 服务和 pod,以便它们进行通信?
为此,您走上了正确的轨道,服务器和前端将如何使用服务名称在Kube.netes中进行通信。
这在第一级可能很奇怪,但 Kube.netes DNS 会处理它。
如果您有两个服务前端 (sample-ui) 和后端 (sample-server)
sample-ui会将请求发送到sample-server以便它们以这种方式连接。
您也可以通过进入sample-ui POD(容器)进行尝试
kubect exec -it sample-ui-c75ccb746-qppk2 -- /bin/bash
现在你在sample-ui容器中让我们从这里向sample-server发送请求
如果 curl 不存在,您可以使用apk install curl
或apt-get install curl
或yum install curl
curl http://sample-server:3001
神奇的是你可能会看到服务器的响应。
所以你的 while 流程就像
用户来到前端负载均衡器服务 > 调用sample-ui服务 > 在 kube.netes 集群内部现在你的sample-ui调用sample-server
您在 K8s 中创建的所有服务都可以通过其名称访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.