美文网首页程序员Pinetwork
内网穿透用于微服务eureka跨网络通信

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

作者: 王强儿 | 来源:发表于2018-06-08 22:51 被阅读66次

    内网穿透用于微服务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还有更好项目,推荐大家关注。

    相关文章

      网友评论

        本文标题:内网穿透用于微服务eureka跨网络通信

        本文链接:https://www.haomeiwen.com/subject/uudzsftx.html