GCP Kubernetes集群中Spring Boot API接入Memcache遇连接问题求助
排查GKE上Spring Boot API连接VM部署Memcache的问题
看起来你在GKE集群上的Spring Boot API连接VM部署的Memcache时遇到了连接失败的问题,我来帮你一步步梳理可能的原因和解决方案:
1. 先检查最容易踩坑的网络配置
- 防火墙规则的来源范围别搞错了:你提到把本地IP加入白名单,但你的Spring Boot API是跑在GKE的Pod里的,Pod的IP属于集群的Pod CIDR网段,不是你本地的IP!去GCP控制台的「VPC网络->防火墙规则」里,修改你的Memcache端口规则,把来源IP范围改成GKE集群的Pod CIDR(可以在GKE集群详情里找到这个网段),或者如果和VM在同一个VPC,直接允许整个VPC的内部IP访问。
- 确认防火墙规则的目标匹配:如果你的规则是基于标签的,一定要检查VM有没有添加对应的标签;如果是基于IP的,要确保目标IP包含VM的内部IP,别只选了外部IP。
2. 验证Memcache的监听地址
默认情况下,Memcache可能只绑定127.0.0.1(本地回环),这样外部根本连不上:
- 登录到Memcache VM,编辑配置文件(通常是
/etc/memcached.conf或/etc/sysconfig/memcached),找到-l参数,改成0.0.0.0(监听所有网卡)或者VM的内部IP。 - 重启Memcache服务:
sudo systemctl restart memcached - 用命令验证监听状态:
ss -tulpn | grep 11211,输出里应该能看到0.0.0.0:11211或者VM的IP,而不是只有127.0.0.1。
3. 测试Pod到VM的直接连通性
先排除网络层面的问题,在GKE的Pod里直接测试:
- 进入你的Spring Boot API Pod:
kubectl exec -it <你的API Pod名称> -- /bin/bash - 用
telnet或nc测试连接:
如果这里连不上,说明是网络问题;如果能连上,那问题大概率在Spring Boot的客户端配置上。telnet <Memcache VM的IP> 11211 # 或者用nc更直观 nc -zv <Memcache VM的IP> 11211
4. 检查Spring Boot客户端配置
- 确认你用的Memcache客户端(比如
memcached-spring-boot-starter)配置正确,示例配置:spring.memcached.servers=<Memcache VM的IP>:11211 spring.memcached.connection-timeout=5000 spring.memcached.read-timeout=3000 - 开启调试日志看细节,在
application.yml里添加:
从日志里看是连接超时、被拒绝还是其他错误,能更精准定位问题。logging: level: net.spy.memcached: DEBUG
5. 其他可能的小坑
- VM本地防火墙拦截:有些VM镜像自带
ufw或firewalld,即使GCP防火墙开了,本地防火墙也可能挡请求。可以临时关闭测试:
如果关闭后能连接,再配置本地防火墙允许11211端口的入站请求。# Ubuntu/Debian系统 sudo ufw disable # CentOS/RHEL系统 sudo systemctl stop firewalld - Memcache服务是否正常运行:确认VM上的Memcache服务没挂:
sudo systemctl status memcached,如果没启动,先启动并设置开机自启:sudo systemctl enable --now memcached
内容的提问来源于stack exchange,提问作者user2137817
相关产品推荐
相关产品推荐

