QOS 概述
相關參數說明
QoS 提供了一些啟動參數來設定啟動,它們主要包括:
參數 | 說明 | 預設值 |
---|---|---|
qos-enable | 是否啟用 QoS | true |
qos-port | 啟用 QoS 綁定的埠 | 22222 |
qos-accept-foreign-ip | 是否允許遠端存取 | false |
qos-accept-foreign-ip-whitelist | 支援的遠端主機 IP 位址(網段) | (無) |
qos-anonymous-access-permission-level | 支援的匿名存取權限等級 | PUBLIC(1) |
注意,從 2.6.4/2.7.0 版本開始,qos-accept-foreign-ip 的預設組態改為 false。如果將 qos-accept-foreign-ip 設定為 true,可能會帶來安全風險,請謹慎評估後再行開啟。
QoS 參數組態
- 系統屬性
- dubbo.properties
- XML 方法
- Spring-boot 自動組裝方法
其中,上述方法的優先順序為系統屬性 > dubbo.properties > XML/Spring-boot 自動組裝方法。
埠
新版 telnet 的埠與 dubbo 協議的埠不同,預設為 `22222`
可透過組態檔案 `dubbo.properties` 進行修改
dubbo.application.qos-port=33333
或者,您可以設定 JVM 參數
-Ddubbo.application.qos-port=33333
安全性
預設情況下,dubbo 接受任何主機發起的命令
可透過組態檔案 `dubbo.properties` 進行修改
dubbo.application.qos-accept-foreign-ip=false
或者
您可以設定 JVM 參數
-Ddubbo.application.qos-accept-foreign-ip=false
拒絕遠端主機發出的命令,僅允許服務在本地執行。
同時,您可以透過設定 `qos-accept-foreign-ip-whitelist` 來指定支援的遠端主機 IP 位址(網段),多個 IP 位址(網段)之間使用 **逗號** 分隔,例如
設定檔
dubbo.properties
dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
設定 JVM 參數
-Ddubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13,132.12.10.13/24
權限
為了預設支援生命週期探測,QoS 提供了匿名訪問的能力並設定權限等級。目前支援的權限等級有:
- PUBLIC(1) 預設支援匿名訪問的指令權限等級。目前僅支援生命週期探測相關指令。
- PROTECTED(2) 指令預設權限等級。
- PRIVATE(3) 保留的最高權限等級,目前不支援。
- NONE 最低權限等級,即不支援匿名訪問。
權限等級
PRIVATE
>PROTECTED
>PUBLIC
>NONE
,高階權限可以訪問同級和低階權限的指令。目前以下指令的權限為PUBLIC
,其他指令的預設權限為PROTECTED
。
指令 | 權限等級 |
---|---|
Live (存活) | PUBLIC (1) |
Startup (啟動) | PUBLIC (1) |
Ready (就緒) | PUBLIC (1) |
Quit (退出) | PUBLIC (1) |
預設情況下,Dubbo 允許匿名主機發起匿名訪問,只能執行 PUBLIC
權限等級的指令,其他更高權限的指令將被拒絕。
關閉匿名訪問 可以通過設定 qos-anonymous-access-permission-level=NONE
來關閉匿名訪問。
設定權限等級 可以通過設定檔 dubbo.properties
修改
dubbo.application.qos-anonymous-access-permission-level=PROTECTED
或者
您可以設定 JVM 參數
-Ddubbo.application.qos-anonymous-access-permission-level=PROTECTED
以允許匿名訪問更高級別權限的指令。
協定
telnet 和 http 協定
telnet 模組現在同時支援 http 協定和 telnet 協定,方便在各種情況下使用。範例:
➜ ~ telnet localhost 22222
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
████████▄ ███ █▄ ▀█████████▄ ▀█████████▄ ▄██████▄
███ ▀███ ███ ███ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ▄███▄▄▄██▀ ▄███▄▄▄██▀ ███ ███
███ ███ ███ ███ ▀▀███▀▀▀██▄ ▀▀███▀▀▀██▄ ███ ███
███ ███ ███ ███ ███ ██▄ ███ ██▄ ███ ███
███ ▄███ ███ ███ ███ ███ ███ ███ ███ ███
████████▀ ████████▀ ▄█████████▀ ▄█████████▀ ▀██████▀
dubbo>ls
As Provider side:
+----------------------------------+---+
| Provider Service Name |PUB|
+----------------------------------+---+
|org.apache.dubbo.demo.DemoService|N|
+----------------------------------+---+
As Consumer side:
+---------------------+---+
|Consumer Service Name|NUM|
+---------------------+---+
dubbo>
➜ ~ curl "localhost:22222/ls?arg1=xxx&arg2=xxxx"
As Provider side:
+----------------------------------+---+
| Provider Service Name |PUB|
+----------------------------------+---+
|org.apache.dubbo.demo.DemoService|N|
+----------------------------------+---+
As Consumer side:
+---------------------+---+
|Consumer Service Name|NUM|
+---------------------+---+
使用設定
使用系統屬性設定
-Ddubbo.application.qos-enable=true
-Ddubbo.application.qos-port=33333
-Ddubbo.application.qos-accept-foreign-ip=false
-Ddubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13,132.12.10.13/24
-Ddubbo.application.qos-anonymous-access-permission-level=PUBLIC
使用 dubbo.properties 檔案設定
在專案的 src/main/resources
目錄下新增 dubbo.properties 檔案,內容如下:
dubbo.application.qos-enable=true
dubbo.application.qos-port=33333
dubbo.application.qos-accept-foreign-ip=false
dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
dubbo.application.qos-anonymous-access-permission-level=PUBLIC
使用 XML 方法設定
如果想通過 XML 設定 QoS 相關的回應參數,可以如下設定:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="https://dubbo.dev.org.tw/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
https://dubbo.dev.org.tw/schema/dubbo https://dubbo.dev.org.tw/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider">
<dubbo:parameter key="qos-enable" value="true"/>
<dubbo:parameter key="qos-accept-foreign-ip" value="false"/>
<dubbo:parameter key="qos-accept-foreign-ip-whitelist" value="123.12.10.13,132.12.10.13/24"/>
<dubbo:parameter key="qos-anonymous-access-permission-level" value="NONE"/>
<dubbo:parameter key="qos-port" value="33333"/>
</dubbo:application>
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="org.apache.dubbo.demo.provider.DemoService" ref="demoService"/>
<bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
</beans>
使用 Spring Boot 自動組態設定
如果是 Spring Boot 應用程式,可以在 application.properties
或 application.yml
上設定。
dubbo.application.qos-enable=true
dubbo.application.qos-port=33333
dubbo.application.qos-accept-foreign-ip=false
dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
dubbo.application.qos-anonymous-access-permission-level=NONE