繁体   English   中英

在 Kube.netes 中设置 React 应用程序和 NodeJS 后端?

[英]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 startnpm 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 curlapt-get install curlyum 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM