问题描述
我是 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 服务,因为它包含在集群中。