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`。
命令 | 权限级别 |
---|---|
在线 | PUBLIC (1) |
启动 | PUBLIC (1) |
就绪 | PUBLIC (1) |
退出 | 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.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
https://dubbo.apache.org/schema/dubbo https://dubbo.apache.org/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