SpringCloud确保服务由gateway网关转发(服务器端口规则及设置方法)

前言

前面曾提到一些方法确保SpringCloud中服务接口先通过网关转发,再到达我们的主服务,避免请求越过网关,直接访问我们的主服务。

但除了在转发层面添加header的解决方式之外,我们大可在服务器层面做手脚,开放必要的端口即可,从源头上断绝了对服务接口的直接访问。

正文

首先有如下架构:
在这里插入图片描述
Consul于服务器192.168.1.102;

Gateway于服务器192.168.1.103;

Auth(即我们的主服务)于服务器192.168.1.104;

在Gateway的application.yml配置文件中,有:

server:
  port: 8750
spring:
  cloud:
    consul:
      host: 192.168.1.102
      port: 8500
      discovery:
        service-name: hpsyche-gateway-server
        prefer-ip-address: true
    gatway:
      - id: hpsyche-auth-server
        uri: lb://hpsyche-auth-server
        order: 8000
        predicates:
        - Path=/api/auth/**
        filters:
        - StripPrefix=2
# gateway路由配置等
	......

在Auth中同样有如下,application.yml

server:
  port: 8762
spring:
  cloud:
    consul:
      host: 192.168.1.102
      port: 8500
      discovery:
        service-name: hpsyche_auth_server
        prefer-ip-address: true

若此时启动consul+gateway+auth,可以通过http://192.168.1.103:8750/api/auth/xxx访问auth下的接口,此方式是通过网关的合理转发实现,但同样若访问http://192.168.1.104:8762/xxx,发现也可直接访问auth下的接口(不合理),所以我需要对auth服务器的端口加以限制。

解决方式

由于项目并没有挂在阿里云或其他云服务器上(没法直接通过安全组进行设置),所以手动敲起iptables命令!

在104服务器下,先禁止8762端口的访问:

iptables -I INPUT -p tcp --dport 8762 -j DROP

再设置指定可以访问的ip,对consul和gateway可见,即:

iptables -I INPUT -p tcp -s 192.168.1.102 --dport 8762 -j ACCEPT
iptables -I INPUT -p tcp -s 192.168.1.103 --dport 8762 -j ACCEPT

再通过如下命令

iptables -L -n

就可以查看是否成功添加端口规则啦!

当然如果你操作有误,想要删除端口规则的话,可以通过如下命令:

首先查看命令num号:

iptables -L -n --line-numbers 

在每个规则前都会有个数字,再通过如下命令即可删除:

iptables -D INPUT #{num}

疑问

在实验中,我一开始尝试用将consul、gateway、auth三个服务都在同一台机器上192.168.1.102跑,通过iptables --sport来设置给auth服务添加如下规则:

iptables -I INPUT -p tcp --dport 8762 -j DROP
iptables -I INPUT -p tcp -s 192.168.1.102 --sport 8500 --dport 8762 -j ACCEPT
iptables -I INPUT -p tcp -s 192.168.1.102 --sport 8750 --dport 8762 -j ACCEPT

本以为可以实现,但发现配置了如上策略后,consul无法监控到auth服务,现在还暂不知什么原因(似乎不能指定某一个端口)。
在这里插入图片描述

虽说gateway、consul、主服务等不会部署到同一台机器,但对于如上问题还是有所困惑,如有大佬知道的,还望指教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章