首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes后端/前端服务之间无通信

Kubernetes后端/前端服务之间无通信
EN

Stack Overflow用户
提问于 2020-08-24 00:39:10
回答 1查看 87关注 0票数 0

我正在尝试创建一个非常简单的Kubernetes项目,其中包括用Reactjs +nginx编写的前端客户端和用Java + Spring boot编写的后端服务器之间的通信。

我可以在本地使用docker-compose进行此通信,但当将其部署到gke时,我得到: failed (111:连接被拒绝)

在后端我有:

控制器:

代码语言:javascript
复制
@RestController
@RequestMapping("/msgs")
@CrossOrigin
public class MsgController {

    @GetMapping("/getMsg")
    public String getMsg() {
        return "hello from backend";
    }
}

Dockerfile

代码语言:javascript
复制
FROM adoptopenjdk/openjdk11:alpine-jre

WORKDIR /opt/app
ARG JAR_FILE=target/*.jar

COPY ${JAR_FILE} app.jar

# java -jar /opt/app/app.jar
ENTRYPOINT ["java","-jar","app.jar"]

部署yml:

代码语言:javascript
复制
Version: apps/v1
kind: Deployment
metadata:
  name: server-demo
spec:
  selector:
    matchLabels:
      app: server-demo
      tier: backend
      track: stable
  replicas: 1
  template:
    metadata:
      labels:
        app: server-demo
        tier: backend
        track: stable
    spec:
      containers:
        - name: hello
          image: "gcr.io/gcp-kub-course/server-demo:latest"
          ports:
            - name: http
              containerPort: 4420
---
apiVersion: v1
kind: Service
metadata:
  name: server-demo
spec:
  selector:
    app: hello
    tier: backend
  ports:
  - protocol: TCP
    port: 4420
    targetPort: 4420

在前端,我有

代码语言:javascript
复制
const [msg, setMsg] = useState('');

useEffect(() => {
    fetch('/msgs/getMsg')
        .then(response => response.text())
        .then(m => {
            // console.log(JSON.stringify(m))
            setMsg(m)
        });
});


return <div>{msg}</div>

Dockerfile:

代码语言:javascript
复制
FROM node:10-alpine as a builder

COPY package.json package-lock.json ./

RUN npm install && mkdir /react-ui && mv ./node_modules ./react-ui

WORKDIR /react-ui

COPY . .

# Build the project and copy the files
RUN npm run build


FROM nginx:alpine

#!/bin/sh

COPY ./nginx/nginx.conf /etc/nginx/nginx.conf

RUN rm -rf /usr/share/nginx/html/*

COPY --from=builder /react-ui/build /usr/share/nginx/html

EXPOSE 3000 80

ENTRYPOINT ["nginx", "-g", "daemon off;"]

nginx.conf:

代码语言:javascript
复制
worker_processes  5;  ## Default: 1
worker_rlimit_nofile 8192;

events {
  worker_connections  4096;  ## Default: 1024
}

http {
    upstream client {

    }
    server {
        listen 80;

        root   /usr/share/nginx/html;
        index  index.html index.htm;
        include /etc/nginx/mime.types;

        gzip on;
        gzip_min_length 1000;
        gzip_proxied expired no-cache no-store private auth;
        gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location /msgs {
            proxy_pass http://server-demo:4420;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
        }
    }
}

和部署yml:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
  labels:
    app: frontend-service
spec:
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: frontend-service
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-service
  namespace: default
  labels:
    app: frontend-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: frontend-service
  template:
    metadata:
      labels:
        app: frontend-service
    spec:
      containers:
      - name: frontend-service
        image: gcr.io/gcp-kub-course/frontend-service:latest
        imagePullPolicy: "Always"
        ports:
        - name: http
          containerPort: 80

查看服务时:

代码语言:javascript
复制
kubectl get svc
NAME               TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
frontend-service   LoadBalancer   10.24.15.122   34.121.100.70   80:32506/TCP   57m
kubernetes         ClusterIP      10.24.0.1      <none>          443/TCP        25h
server-demo        ClusterIP      10.24.4.49     <none>          4420/TCP       57m

查看pods时:

代码语言:javascript
复制
frontend-service-bf9b4ccfd-jcjvm   1/1     Running   0          58m
server-demo-84df7f57c6-blgxq       1/1     Running   0          58m

最后,在查看前端服务日志时,我看到:

代码语言:javascript
复制
2020/08/23 16:05:11 [error] 6#6: *28 connect() failed (111: Connection refused) while connecting to upstream, client: 10.128.0.7, server: , request: "GET /msgs/getMsg HTTP/1.1", upstream: "http://10.24.4.49:4420/msgs/getMsg", host: "34.121.100.70", referrer: "http://34.121.100.70/"
10.128.0.7 - - [23/Aug/2020:16:05:11 +0000] "GET /msgs/getMsg HTTP/1.1" 502 559 "http://34.121.100.70/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"

我可以看到nginx完成了它的工作,因为它将GET /msgs/getMsg代理到了10.24.4.49,这是演示服务器IP,它们都在默认名称空间上,我迷路了

EN

回答 1

Stack Overflow用户

发布于 2020-08-24 00:44:35

在我发布它的那一秒,我看到了我的错误:在服务器演示部署yaml的末尾

我错过了配置:

代码语言:javascript
复制
selector:
  app: hello

这必须是:

代码语言:javascript
复制
selector:
  app: server-demo
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63549508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档