内网穿透用于微服务eureka跨网络通信
内网穿透用于微服务eureka跨网络通信
场景
开发调试时,我们希望其他人可以访问我们电脑的服务。例如微信公众号开发。
其实微服务的调试更需要这个。例如spring cloud中将本地服务注册进远程eureka,其他服务是没有办法调用我们的服务的。如果你不知道为啥不能调用,那么我试着跟你再解释一遍局域网的概念。
#解释
我看都知道电脑连接网络后会自动分配一个IP,那么其他人可以通过这个IP访问我们电脑上的服务吗?
答案是可以,但是有一个限制必须在同一网络中,就说我们经常说的可以ping通。
了解一点网络的同学知道,我们电脑的ipconfig获取到的信息是局域网的IP,如果需要访问外部网络,我们真正使用的IP是运营商网关的IP。
我见过一些同事,问他的IP是什么,他在百度上搜索说找到了自己的IP,这里应该是运营商的网关地址。
如何做才能
目前我知道的几种方法
1.向运营商申请固定IP地址。但是有些运营商不愿意给你。突然有一天和同事讨论,使用云服务做开发测试环境,付了不少钱买到配置很差的机器,只不过是换来一个固定IP的服务器而已。
2.ngrok。开源免费,tcp代理需要付费。也可以自己搭建私有的服务器。
3.花生壳之类的收费软件。
我的经历
我一直想找到一个软件可以实现这样的功能,可以让其他人访问我计算机上的服务。开始使用过ngrok,还算比较方便。
eureka注册的实例,使用IP,并且使用自定义的地址和端口。通过端口转发可以实现夸网络的微服务访问。
eureka使用的配置
server:
port: 10011
eureka:
client:
service-url:
defaultZone: http://eureka/eureka/
instance:
prefer-ip-address: true
ip-address: 转发的IP
nonSecurePort: 转发的端口
这段配置看似简单,很多书上都没有写,令人感动的是有几篇博客给出了参数说明。通过eureka源码里面逻辑,展示出确实可以这么使用。我就觉得没有跨网络的微服务就是耍流氓,因为如果使用了微服务,加上使用容器技术,网络的情况确实更加复杂,和单机的调用有了不少区别。
开源的实现
我找了很久一直没有合适的答案,突然有一天发现了一个好的项目,码云上的端口转发。地址http://git.oschina.net/matrixy/java-port-forwarding。
代码书写的很直接,我尝试阅读并搞明白了部分逻辑。
原理
假设我们需要把一台局域网的80端口暴露出来,我们利用公网服务器的2222端口来转发,那么流程是这样的。这样我们就可以代理访问局域网的服务了。
内网穿透用于微服务eureka跨网络通信感悟
学习其他人开源项目真是一件美好的事情,这个项目的matrixyhttp://git.oschina.net/matrixy还有更好项目,推荐大家关注。