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、主服務等不會部署到同一臺機器,但對於如上問題還是有所困惑,如有大佬知道的,還望指教!

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