QOS 概述

新版本 dubbo 2.5.8 新增了 QOS 模組,並提供新的 telnet 命令支援。

QoS 提供了一些啟動參數來設定啟動,它們主要包括:

參數說明預設值
qos-enable是否啟用 QoStrue
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.propertiesapplication.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

最後修改日期:2023 年 1 月 2 日:增強英文文件 (#1798) (95a9f4f6c1c)