kubernetes - 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-generator
API获取一个随机数。我尝试使用http://number-generator/
and访问它http://number-generator:3000/
,但它们都返回如下网络错误:
GET http://number-generator/ net::ERR_NAME_NOT_RESOLVED
错误应该或多或少与我称为http://number-generator/
或的错误相同http://number-generator:3000/
。那么我怎样才能让这两个服务互相交谈呢?
解决方案
我刚刚发现了问题。
所以,因为我为前端使用了一个静态站点,所以当我调用后端服务时,它实际上是从浏览器调用它。浏览器不是我们的 kubernetes 集群,所以当我尝试使用ajax访问数字生成器服务时,它会发送这些错误。
当我尝试将我的静态前端更改为express app时,它可以访问后端号码生成器服务,因为它包含在集群中。
推荐阅读
- json - 在 Json 模式中按名称封装 Root 对象以供重用?
- mysql - 我如何将数据从 reactjs 表单发布到 mysql 数据库
- r - 在r中删除多个带有条件的后续行
- java - 如何在java中刷新蓝牙设备列表
- ansible - 如果我想在同一个盒子上部署 gitlab + ansible,我需要“shell”运行器吗?
- python - “sys.version_info”的类型是什么?
- c++ - 在 Word 中计算字母
- google-bigquery - BigQuery 按最后一个日期过滤并使用分区
- regex - 打印相关符号之前的所有内容,并在相关符号之后保留 1 个字符
- git - 如何显示基于先前提交的提交?