首页 > 解决方案 > Kubernetes 服务无法相互通信

问题描述

我是 Kubernetes 的新手,我尝试创建两个可以相互通信的服务。第一个服务是一个简单的静态 Web(HTML、js),类型LoadBalancer为 ,第二个服务是 express.js 后端,类型为ClusterIP。这是我的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-generatorAPI获取一个随机数。我尝试使用http://number-generator/and访问它http://number-generator:3000/,但它们都返回如下网络错误:

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

错误应该或多或少与我称为http://number-generator/或的错误相同http://number-generator:3000/。那么我怎样才能让这两个服务互相交谈呢?

标签: kuberneteskubernetes-podkubernetes-service

解决方案


我刚刚发现了问题。

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

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


推荐阅读