概述
应用服务网格默认发现所有命名空间的服务(即使服务没有注入sidecar),即集群内所有的服务信息都会全量推送到所有数据面,任何服务数据的变动也会触发集群范围的全量服务发现数据推送,控制面和数据面的资源消耗都会比较大;通过服务发现范围配置可以限定服务网格只发现指定范围的服务数据,减少不必要的资源消耗。
配置说明
通过服务发现范围配置规则匹配目标命名空间,服务网格将只发现目标命名空间下的服务。当前支持两种匹配方式:
- 标签选择器:通过标签选择器精确匹配目标命名空间的标签。
- 表达式匹配:通过标签值和目标表达式进行匹配,当前支持的匹配模式如下。
匹配操作 | 举例 | 说明 |
---|---|---|
In | key: appoperator: Invalues: - cassandra - spark | app标签值为cassandra或spark时匹配。 |
NotIn | key: appoperator: NotInvalues: - cassandra - spark | app标签值不等于cassandra且不等于spark时匹配。 |
Exists | key: appoperator: Exists | app标签存在时匹配。 |
DoesNotExist | key: appoperator: DoesNotExist | app标签不存在时匹配。 |
配置服务发现范围
进入应用服务网格控制台网格实例详情页,选择网格优化中心-> 服务发现范围 菜单,默认不存在服务发现范围配置,如下图:
点击新增规则可以创建一条匹配规则,每条规则由一组标签选择器和匹配表达式组成,必须同时满足一条规则内的标签选择器和匹配表达式才算匹配当前规则(AND关系),多条规则之间是OR关系,一个命名空间匹配一条规则即可被选中。
功能验证
默认情况下服务发现范围配置为空,我们通过envoy admin接口导出配置数据,可以看到cds数据如下:
更新服务发现范围配置,只发现demo命名空间下的服务,如下:
再次导出配置数据,可以看到cds数据只包含demo命名空间下的服务以及部分ServiceEntry产生的配置: