为什么k3s访问不了监听loopback地址的host服务?
Why can't k3s access host services that listening loopback address?
我在一台 Ubuntu 机器上部署了 k3s。
其他服务直接安装在本机(k8s之外),例如Redis,Mysql...出于安全原因,他们正在监听环回地址127.0.0.1
。
但是k3s里面的服务无法连接到我的数据库。如果我把监听地址改成0.0.0.0
,问题就解决了
为什么?这个用例中的最佳实践是什么?
PS:我使用Endpoints
将主机服务映射到k8s:
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
ports:
- port: 6379
---
apiVersion: v1
kind: Endpoints
metadata:
name: redis
subsets:
- addresses:
- ip: xxxxx (host's ip)
ports:
- port: 6379
感谢@vincent pli,我意识到我将 lo
与主机本身混淆了。
一个服务监听lo
,并不代表本机运行上的所有服务实际上都可以访问它。如果那是你真正想要的,你必须确保这两个服务在同一个虚拟网卡中(lo
)。
否则,如果要通过ip地址访问,服务必须监听它。如果这个地址只在局域网内部,还是安全的。或者使用防火墙执行更严格的入站限制。
我在一台 Ubuntu 机器上部署了 k3s。
其他服务直接安装在本机(k8s之外),例如Redis,Mysql...出于安全原因,他们正在监听环回地址127.0.0.1
。
但是k3s里面的服务无法连接到我的数据库。如果我把监听地址改成0.0.0.0
,问题就解决了
为什么?这个用例中的最佳实践是什么?
PS:我使用Endpoints
将主机服务映射到k8s:
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
ports:
- port: 6379
---
apiVersion: v1
kind: Endpoints
metadata:
name: redis
subsets:
- addresses:
- ip: xxxxx (host's ip)
ports:
- port: 6379
感谢@vincent pli,我意识到我将 lo
与主机本身混淆了。
一个服务监听lo
,并不代表本机运行上的所有服务实际上都可以访问它。如果那是你真正想要的,你必须确保这两个服务在同一个虚拟网卡中(lo
)。
否则,如果要通过ip地址访问,服务必须监听它。如果这个地址只在局域网内部,还是安全的。或者使用防火墙执行更严格的入站限制。