时间:2022-12-02 11:42:59 | 栏目: | 点击:次
5.1.5版本后,Rainbond默认提供了综合网络治理插件(同时处理入站和出站网络)和出站网络治理插件两个插件可用。 网络治理插件工作在与业务容器同一个网络空间之中,可以监听一个分配端口,拦截入站的业务流量进行限流、断路等处理再将流量负载到业务服务的实际监听端口之上。
同时也可以工作在出站方向,业务服务需要访问上游服务时,通过访问本地出站治理插件监听的端口,进行流量路由、断路、安全验证等处理,再将流量负载到尚有服务的主机之上。
对于插件的开发者来说需要关注如下两点:
"base_ports":[ { "service_alias":"gre484d9", "service_id":"9703228e9b42cde3e3a72f4826e484d9", "port":8080, "listen_port":65301, "protocol":"http", "options":{ "LIMIT_DOMAIN":"limit.common", "OPEN_LIMIT":"NO" } } ]
插件运行时会自动注入DISCOVER_URL变量,通过此变量值的地址可以动态获取到如上的配置信息,入站网络治理插件必须通过以上配置来监听65301端口,将流量负载到127.0.0.1:8080端口。
"base_services":[ { "service_alias":"gre484d9", "service_id":"9703228e9b42cde3e3a72f4826e484d9", "depend_service_alias":"grcff92d", "depend_service_id":"c81923991ff2428082a5d9d478cff92d", "port":5000, "protocol":"http", "options":{ "BaseEjectionTimeMS":"30000", "ConsecutiveErrors":"5", "Domains":"todos", "Headers":"", "IntervalMS":"10", "MaxActiveRetries":"5", "MaxConnections":"10", "MaxEjectionPercent":"20", "MaxPendingRequests":"1024", "MaxRequests":"1024", "MaxRequestsPerConnection":"", "PROXY":"YES", "Prefix":"/", "Weight":"80" } } ]
使用上述原生配置发现和服务发现来让自定义插件工作,插件层面需要做较多的数据适配工作。Rainbond同时提供了基于envoy XDS(grpc)规范的动态配置发现服务,在插件中通过XDS_HOST_IP XDS_HOST_PORT两个变量来获取XDS服务的地址。
对用用户来说插件层的网络治理对于业务层是完全透明的,所有有依赖关系的分布式服务类似于运行同一台主机一样。
默认提供的综合网络治理插件基于envoy 1.9.0实现,综合网络插件同时实现了入站方向的治理和出站方向的治理,提供以下配置参数:
全局限流:
断路:
动态路由(HTTP协议):
Domains
请求域名,对于http协议的上游服务,支持基于域名路由并复用80端口。
Prefix
请求Path路径的前缀,基于前缀来路由不同的上游服务。
Headers
请求头,基于请求头的路由不同的上游服务。
Weight
权重,基于不同的权重来将流量分发到不同的上游服务。
断路(面向连接):
断路(面向上游主机):
当服务无需使用入站方向的治理功能时,可只使用出站治理插件,配置参数与综合治理插件的出站方向一致。