6

[技术贴]微服务中的网关部署在云服务器,自己在公司内网启动服务,怎么让网关能调通自...

 1 year ago
source link: https://www.v2ex.com/t/916208
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

[技术贴]微服务中的网关部署在云服务器,自己在公司内网启动服务,怎么让网关能调通自己本地的服务?

  Aliberter · 17 小时 39 分钟前 · 1973 次点击

如题,目前遇到这么个问题,一开始想的是内网穿透,但是被 pass 了说是对内网不安全,经过一番调研,阿里云有自己的端云互联工具,但是又不想用阿里云,太贵了。我们的某个竞品,他们部署在云端的后台就能直接发现自己内网的服务并成功调用,这个是怎么做到的呢?希望老哥们给指点一下迷津,感谢

48 条回复    2023-02-15 22:16:47 +08:00
MinJin

MinJin      17 小时 37 分钟前

zerotier
luomao

luomao      17 小时 36 分钟前

我们这边是和阿里云拉了一条专线,可以直接互访内网
Aliberter

Aliberter      17 小时 34 分钟前

@MinJin 就是如果不用额外的第三方穿透工具,有别的实现方式吗
Aliberter

Aliberter      17 小时 34 分钟前

@luomao 哦哦,大佬,……我们还做不到
Aliberter

Aliberter      17 小时 31 分钟前

我们用的 springcloud 那一套,有能跟服务的项目做集成做绑定,不用额外的网络配置和三方工具,只要本地项目跑起来,就能被云端发现调用,这种技术实现吗?
cheng6563

cheng6563      17 小时 26 分钟前

ssh 算第三方工具吗?用 ssh 也能穿透
tramm

tramm      17 小时 26 分钟前

你们公司不能开放端口吗?

不开放端口,也没专线的话,云服务器起个 TCP 服务,公司的这边写个 TCP 中转服务通过长连接连上去,让云服务器那边所有请求下发到公司的这个中转服务器上...不过感觉这个有点麻烦啊
Seulgi

Seulgi      17 小时 23 分钟前

阿里的端云互联实际也和内网穿透差不多。
Lentin

Lentin      17 小时 22 分钟前

防火墙上做 nat 转发 设置好源 IP 和目的地 IP 端口就行了
Diego01

Diego01      17 小时 19 分钟前

公网访问、VPN 、智能接入网关、共享专线
Aliberter

Aliberter      17 小时 18 分钟前

@cheng6563 就是希望 ssh 能融入进微服务代码架构里最好,每一个服务启动后都连一下 ssh ?这样可能也能被他们接受
Aliberter

Aliberter      17 小时 16 分钟前

@tramm 能开放端口,就是不要有明显的穿透工具就行,你说的这个是不是就是 frp 的原理啊...手写 tcp 服务再中转啥的...可能确实有点麻烦
Aliberter

Aliberter      17 小时 15 分钟前

@Seulgi 对 我看也是 就是有个中转 但是他们不同意我们自己用 frp 之类的 还需要各种配置 还要改项目配置的 ip 麻烦 就想无脑启动
Aliberter

Aliberter      17 小时 13 分钟前

@Lentin 这个需要运维参与,我们可能不会让运维去搞这个,就是想着在不动网络的前提下
Aliberter

Aliberter      17 小时 12 分钟前

@Diego01 合理合法的方案,但都没被接受,说实话,我觉得除了这些,真就有点异想天开了
lower

lower      17 小时 9 分钟前

@tramm 搭个消息队列 搞一套发布、订阅 感觉也基本能在楼主描述的网络场景里实现想要的功能……
Eytoyes

Eytoyes      17 小时 8 分钟前

这不是网工的事吗?提个申请开个口子映射到你的内网服务器,把源地址和目的地址都限制一下就行了
lower

lower      17 小时 8 分钟前

楼主项目里有集成消息队列么,感觉应该适合你的场景,改造改造
ragnaroks

ragnaroks      17 小时 7 分钟前

zerotier 本身有库,集成到你的项目中即可,我用很久以前就实现了 MC 一键 P2P 联机
luomao

luomao      17 小时 6 分钟前

和 spring cloud 那套融合起来,还有个比较蛋疼的方法。两边都接入一个消息队列,譬如 rabbitMq ,网关收到消息后将消息发送到队列中并保持连接,内网服务器消费这个”请求”,“请求”的结果消费完以后再将”响应”发送到队列中,网关消费掉这个”响应”后释放连接并返回
killva4624

killva4624      17 小时 5 分钟前

合理合法、又不动网络和运维参与,说实话不太可能...
koloonps

koloonps      17 小时 5 分钟前

SSH -L 将服务器的端口映射到本地,SSH -R 将本地端口映射到服务器上.修改本机路由,将服务器地址转发到 localhost.这样应该就可以了
lucifer69

lucifer69      17 小时 4 分钟前

部署一个服务注册中心?比如 nacos
xuanbg

xuanbg      17 小时 4 分钟前

VPN 。我在家里,要使用公司的测试环境的话,就拨公司的 VPN 。
koloonps

koloonps      17 小时 3 分钟前

最简单的方式是开一个 openvpn,不用对外开放端口.用 SSH 将 openvpn 端口映射到本地,然后你在 openvpn 客户端中将服务器设置为本地就可以了
Aliberter

Aliberter      17 小时 3 分钟前

@lower 消息队列怎么实现啊 说实话好像了解到竞品的代码里有 jmx 的东西 跟这个有关系吗大佬
xuanbg

xuanbg      16 小时 59 分钟前   ❤️ 1

如果服务器上有 doker 的话,稍微改一下下面的 docker 命令里的一些参数,就能通过 vpn 来打通云端的环境了。

docker run -d \
--name=wireguard \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Europe/London \
-e SERVERURL=wireguard.domain.com \
-e SERVERPORT=51820 \
-e PEERS=1 \
-e PEERDNS=auto \
-e INTERNAL_SUBNET=10.13.13.0 \
-e ALLOWEDIPS=0.0.0.0/0 \
-e LOG_CONFS=true \
-p 51820:51820/udp \
-v /opt/wireguard/config:/config \
-v /lib/modules:/lib/modules \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--restart unless-stopped \
lscr.io/linuxserver/wireguard:latest
Aliberter

Aliberter      16 小时 57 分钟前

@Eytoyes 确实...但是...
@ragnaroks 这样啊 我感觉我可以去了解一下 谢谢大佬
@luomao 说的比较详细了 但我确实没这个搞过 我学习下试试
@killva4624 确实,比较奇葩
@koloonps 不让动路由..
@lucifer69 跟注册中心没关系 注册中心也在云上
@xuanbg @koloonps 不想额外搭建什么 openvpn 之类的了
happyn

happyn      16 小时 57 分钟前

首先公司内网,有公网 ip ,可以对外映射服务吗?

如果没有公网 ip ;那肯定得需要端口映射出去;

不用第三方工具,就得自己集成这个服务,本质上跟第三方工具做的事情是一样的;

如果服务不动,ip 也不想改;最简单的方法就是楼上建议的,用 zerotier 、tailscale ,或者 openvpn 一样的工具,把云服务器和公司内网服务器联网到同一个虚拟网络里,然后用 ssh 或者 socat 端口转发,把公司内网的服务映射到云服务器上;这样对于服务端是无感知的;

如果不用三方工具,就得自己做上面的工作了;
koloonps

koloonps      16 小时 55 分钟前

修改本机路由,不是修改公司的路由.在本机路由表中添加一条就行.
2han9wen71an

2han9wen71an      16 小时 53 分钟前

我们是 zerotier
Aliberter

Aliberter      16 小时 45 分钟前

@xuanbg 我去,这个吊,可以用 docker 部,我看看
@happyn 就是可以动服务的代码,刚我看上边有个老哥说能集成 zerotier 到服务里的,我准备看看
@koloonps 本机路由?不是,现在只有公司网络和云端网络两个概念,让云端能访问到公司内网就行,本机路由是啥
john2022

john2022      16 小时 42 分钟前

vpn 接入云端一台服务器,两个子网打通就可以了
john2022

john2022      16 小时 41 分钟前

@john2022 要求云端的访问内网的服务器都要添加一条路由
koloonps

koloonps      16 小时 38 分钟前

你从 nacos 获取的其他服务的地址是服务器的局域网地址,你需要在你的机器路由表上添加一条路由将服务器的地址重定向到本机上.你可以看下 SSH 的内网穿透功能.https://zhuanlan.zhihu.com/p/57630633 参考下这个
amrice

amrice      16 小时 31 分钟前

要么组网,要么直接把设备暴露到公网里呗
wccc

wccc      16 小时 28 分钟前

wireguard 组网
ilovey482i

ilovey482i      16 小时 22 分钟前

如果不组网打通环境的话,只能在云端部署测试服务器,将代码部署到测试服务器上去
GopherDaily

GopherDaily      16 小时 17 分钟前

测试还是开发?测试考虑下 telepresence
nicholasxuu

nicholasxuu      16 小时 2 分钟前

如果公司有固定 ip 的网络的话,搭一下 ipsec vpn ,阿里云那儿大概一个月 200 的费用吧。
ChengHaha

ChengHaha      16 小时 1 分钟前

我是在本地启动一个网关,前端指向本地的网关就好了
nicebird

nicebird      14 小时 59 分钟前

不难吧,自己开发个代理都可以
Bottle

Bottle      12 小时 43 分钟前   ❤️ 1

说一下我们公司的情况:
1 、有两台物理服务器放在公司内网,部署一些服务
2 、办公室没有固定公网 IP
3 、有几台阿里云 ECS ,有公网 IP ,几台 ECS 之间内网互通

需求是:ECS 上的所有服务,都能访问办公室内网两台机器上的服务

我们采用的解决方案是:SSH 远程端口转发
1 、办公室内网服务端口转发到 ECS 指定端口上
2 、ECS 上的服务,通过转发的端口,访问公司内网服务

希望能够帮到你。


参考资料:
https://www.ronpad.com/docs/ssh/port-forwarding-4.html
https://www.cnblogs.com/XiiX/p/15095135.html
BQsummer

BQsummer      10 小时 7 分钟前

我们公司也有类似场景, ios 打包需要 mac 机器, 云服务没有, 就把 mac mini 放在办公地点的机房, 走的 vpn
lyc8503

lyc8503      7 小时 47 分钟前

如果不用过墙的话 wireguard 或者 openvpn 就可以? 两者都是完全开源的工具.
k8ser

k8ser      5 小时 57 分钟前

wireguard over udp ,国内运营商的环境还是要测试下。
salmon5

salmon5      5 小时 52 分钟前

Dreamacro

Dreamacro      4 小时 57 分钟前 via iPad

目前发现比较好的形式是 fly.io 的方案,本地 ctl 通过 wg 映射端口到本地,既可以鉴权又很方便。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK