我是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
因此,在localhost:80
中可以访问的number-web
服务内部,应该访问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服务,它会发送这些错误。
当我试图将静态前端更改为express app时,它可以访问后端数字生成器