内网穿透用于微服务eureka跨网络通信

图片发自简书App

场景

开发调试时,我们希望其他人可以访问我们电脑的服务。例如微信公众号开发。

其实微服务的调试更需要这个。例如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端口来转发,那么流程是这样的。这样我们就可以代理访问局域网的服务了。

图片发自简书App

感悟

学习其他人开源项目真是一件美好的事情,这个项目的matrixyhttp://git.oschina.net/matrixy还有更好项目,推荐大家关注。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,646评论 2 56
  • 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 De...
    Java架构阅读 8,755评论 2 144
  • 做任何事情都要坚信三点:一是兴趣,只有养成自己的兴趣,内心才有坚定的追求。二是困难,遭受的困难越多让自己成长的越快...
    一颗星火阅读 132评论 0 0
  • 画不动了,作为一个上班狗~~真心是累啊 未完待续~~ 今天第一天上班,工作真心很棒。很喜欢
    山栗也阅读 339评论 0 0