Kubernetes 服务无法相互通信

问题描述

我是 Kubernetes 的新手,我尝试创建两个可以相互通信的服务。第一个服务是类型为 LoadBalancer 的简单静态 Web(HTML、js),第二个服务是类型为 ClusterIP 的 express.js 后端。这是我的 service.yaml 文件

apiVersion: v1
kind: Service
Metadata:
  name: number-generator
spec:
  selector:
    app: number-generator
  ports:
  - port: 3000
    targetPort: 3000
  type: ClusterIP
---
apiVersion: v1
kind: Service
Metadata:
  name: number-web
spec:
  selector:
    app: number-web
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer

这是我的 deployment.yaml 文件

apiVersion: apps/v1
kind: Deployment
Metadata:
  name: number-generator
spec:
  selector:
    matchLabels:
      app: number-generator
  template:
    Metadata:
      labels:
        app: number-generator
    spec:
      containers:
      - name: number-generator
        image: cantdocpp/number-generator
        ports:
        - containerPort: 3000
---
apiVersion: apps/v1
kind: Deployment
Metadata:
  name: number-web
spec:
  selector:
    matchLabels:
      app: number-web
  template:
    Metadata:
      labels:
        app: number-web
    spec:
      containers:
      - name: number-web
        image: cantdocpp/number-web:v5
        ports:
        - containerPort: 80

所以在可以在 number-web 中访问的 localhost:80 服务内部,应该访问 number-generator API 以获取随机数。我尝试使用 http://number-generator/http://number-generator:3000/ 访问它,但它们都返回如下网络错误

GET http://number-generator/ net::ERR_NAME_NOT_RESOLVED

无论我调用 http://number-generator/ 还是 http://number-generator:3000/错误应该或多或少相同。那么我怎样才能让这两个服务相互通信呢?

解决方法

我刚刚发现了问题。

所以,因为我在前端使用静态站点,所以当我调用后端服务时实际上是从浏览器调用它。浏览器不是我们的 kubernetes 集群,所以当我尝试使用 ajax 访问 number-generator 服务时,它会发送这些错误。

当我尝试将我的静态前端更改为 express app 时,它可以访问后端 number-generator 服务,因为它包含在集群中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...