Istio DiscoverySelectors 过滤命名空间
本文永久链接: https://www.xtplayer.cn/istio/istio-discoveryselectors-filter-the-namespaces/
在 Istio 服务网格中,discoverySelectors 是 MeshConfig 里的一个配置字段。它的作用是限制 Istio 控制平面(Istiod)需要监控和发现哪些命名空间(Namespace)。忽略掉不必要的命名空间,从而优化性能。
核心价值
在大型 Kubernetes 集群中,如果所有命名空间都在服务网格内,Istiod 会监视和处理所有命名空间的 services, pods, and endpoints,这将消耗大量 CPU 和内存去处理所有服务的配置。为了解决这个问题,可通过 discoverySelectors 过滤不必要的命名空间,让 Istio 只关心你指定的命名空间,有效降低控制平面的负载。
配置方式
你可以在 IstioOperator 自定义资源中配置 meshConfig.discoverySelectors,使用标准的 Kubernetes 标签选择器。
示例 1:基于标签匹配
下面的配置告诉 Istiod,只发现带有 istio-discovery: enabled 标签的命名空间。
apiVersion: install.istio.io/v1alpha1 |
然后,你需要手动为你希望纳入网格的命名空间打上这个标签:
kubectl label namespace your-namespace istio-discovery=enabled |
如果是通过 chart 部署,在 value 中添加配置:
istiod: |
示例 2:基于表达式匹配
你也可以使用 matchExpressions 进行更复杂的逻辑判断。
meshConfig: |
如果是通过 chart 部署,在 value 中添加配置:
istiod: |
示例 3:基于表达式排除命名空间
apiVersion: install.istio.io/v1alpha1 |
如果是通过 chart 部署,在 value 中添加配置:
istiod: |
注意事项
- **需要包含
istio-system**:如果你在istio-system命名空间中存放了网关等核心配置,请务必也为它打上匹配的标签,否则这些配置会被忽略。 - 动态生效:配置更改后,Istiod 会很快生效,不再匹配的命名空间会从服务注册表中被移除。
参考地址
https://istio.io/latest/zh/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig-discovery_selectors
https://istio.io/latest/zh/docs/ops/configuration/mesh/configuration-scoping/

