对kubernetes服务的误解

问题描述 投票:0回答:1

我尝试使用 kubernetes 一段时间了,我偶然发现了一个我无法解决的问题。 我正在尝试部署一个 React 前端和一个 Rust 后端应用程序(作为两个容器/Pod 之间通信的情况),一切正常,它们似乎都在工作,并且可以使用

minikube service <name-of-service>
访问前端,问题是前端尝试从后端获取数据但失败并出现多个错误:

  • Websocket connection to 'ws://<minikube-ip>/ws' failed
  • GET 'http://backend:8080/test' net::ERR_NAME_NOT_RESOLVED
    (也许这就是问题所在?)
  • Failed to fetch

我一直在尝试更改用于创建部署和服务的 .yaml 文件,并查看了其他人尝试做同样事情的多种方法,但似乎没有任何帮助,因为他们只透露了他们的规范.yaml 文件

这就是我的前端部署和服务 .yaml 文件的样子:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment
  labels:
    app: client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
        tier: frontend
    spec:
      containers:
      - name: client
        image: quan1um/react-test:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-service
spec:
  selector:
    app: client
    tier: frontend
  ports:
    - protocol: "TCP"
      port: 3000
      targetPort: 3000
  type: LoadBalancer

后端:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
        - name: backend
          image: quan1um/rust-actix-test:latest
          ports:
            - name: http
              containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: backend
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 8080
      targetPort: http
  type: ClusterIP

正如你从我的错误消息中看到的,我的前端尝试从

http://backend:8080
获取数据,我确实意识到这是行不通的,因为这个获取请求发生在浏览器上,而浏览器不知道 kubernetes 上的服务以及他们的名字。

尽管我只在前端使用 React,但我已经看到 nginx 配置文件使用 .yaml 服务文件中指定的名称作为服务器配置块,我对此也很好奇

http kubernetes tcp
1个回答
0
投票

如果您想从 K8s 外部(即浏览器)调用任何内容,您需要公开并ingress

使用 minikube 则稍微复杂一些。看看这个示例

你需要这样的东西:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /backend
        pathType: Prefix
        backend:
          service:
            name: backend
            port:
              number: 8080
© www.soinside.com 2019 - 2024. All rights reserved.