公司的某个微服务运行在公司内网的容器网络中,该微服务需要接收某个第三方服务的推送消息。显然,那个第三方服务器无法直接推送消息,需要打通网络
- 在公网部署FRP服务端(FRPS)
- 在K8S集群中部署FRP客户端(FRPC)
预期效果如下
配置脚本
nginx 配置脚本
/etc/nginx/conf.d/frp-proxy.conf
1 2 3 4 5 6 7 8 9 10 11 12
| server { listen 80; server_name frp1.example.com,frp1.example.com,frp1.example.com; location / { proxy_pass http://127.0.0.1:47000/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Authorization $http_authorization; } }
|
- 此处我们配置了三个虚拟主机,以备将来使用
- 虚拟主机名称需要报给第三放服务厂商(比如接入微信支付时,在微信后台填写)
FRP服务端配置脚本
frps.ini
1 2 3 4 5 6 7 8 9 10 11 12 13
| [common] bind_port = 47000
token = 12344321 subdomain_host = example.com
dashboard_port = 47500 dashboard_user = admin dashboard_pwd = 11223344
allow_ports = 2000-3000,3001,3003,51000-52500 vhost_http_port = 47008 vhost_https_port = 47003
|
FRP客户端配置脚本
frpc.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [common]
server_addr = 10.11.12.200 server_port = 47000
token = 12344321
log_level = debug [web1] type = http
subdomain = frp1
local_ip = nyx-pay local_port = 8080
|
注意:
- 配置文件的中二级域名是
frp1
,结合服务端配置,对应的完整域名是frp1.example.com
,也就是说来自frpnet1.example.com
的请求会转发到此客户端。
- frp客户端收到请求后,会再次转发到
http://nyx-pay:8080
,此处nyx-pay
是主机名,也是我们的微服务在k8s集群中的名称,端口8080
是微服务的容器内端口,因为frp客户端也运行在k8s容器网络中。
- 如果需要测试,可以在浏览器输入
http://frp1.example.com/${你的接口地址}
来看看配置是否成功。
FRP客户端K8S部署脚本
篇幅所限,K8S部署略过,下面是frp客户端的容器启动命令,K8S按照这个思路部署就行了。
1 2 3 4
| docker run --rm --name frp-client \ -v /opt/frp/conf:/opt/frp/conf \ vimagick/frp \ ./frpc -c /opt/frp/conf/frpc.ini
|
注意先将上面的frpc.ini
放到/opt/frp/conf
中