使用 DiscoverySelectors
一个工作负载被包含在 Service Mesh 中需满足以下两个条件:
- 它已被控制平面发现。
- 已向其注入 Envoy 代理 sidecar。
默认情况下,控制平面会扫描集群中每个命名空间的工作负载。此默认行为导致两个结果:
- 每个代理实例都会为所有命名空间配置,即使这些工作负载不属于网格。
- 只要 Pod 或命名空间上有正确的注入标签,代理 sidecar 就会被注入到任何工作负载中。
目录
理解 discovery selectors
Discovery selectors 允许 mesh 管理员管理控制平面可以监控的命名空间。管理员使用 Kubernetes 标签选择器定义应对控制平面可见的命名空间的条件,从而有效隐藏不符合条件的命名空间。
Istiod 始终会对所有命名空间打开 Kubernetes 的 watch。但 discovery selectors 会在处理的非常早期阶段忽略未被选择的对象,从而最大限度地减少开销。
discoverySelectors 字段接受一个 Kubernetes 选择器数组,这些选择器应用于命名空间标签。每个选择器可以针对不同场景进行配置:
- 自定义标签名称和值。 例如,为所有相关命名空间配置
istio-discovery=enabled标签。 - 命名空间标签列表。 这可以通过使用 OR 逻辑的基于集合的选择器实现。例如,配置具有
istio-discovery=enabled或region=us-east1标签的命名空间。 - 包含和排除命名空间。 例如,配置同时具有
istio-discovery=enabled和app=helloworld标签的命名空间。
需要注意的是,discovery selectors 并不作为安全边界。即使配置了 discoverySelector 字段,Istiod 仍然可以访问所有命名空间。
如何使用 Discovery Selectors 对 Service Mesh 进行范围限定
当您确定要包含在 Service Mesh 中的命名空间后,可以在安装期间或之后配置 discoverySelectors。方法是在 Istio 资源的 meshConfig.discoverySelectors 字段中添加所需的选择器。例如,您可以配置 Istio 仅发现带有 istio-discovery=enabled 标签的命名空间。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio CNI。
- 已部署 Istio 控制平面。
操作步骤
-
为运行 Istio 控制平面的命名空间(如
istio-system命名空间)添加标签。 -
通过添加使用相同标签的
discoverySelectors部分,更新Istio控制平面资源。 -
确认所有计划承载 Service Mesh 工作负载的命名空间均已标记了
discoverySelector标签,并在需要时标记了相关的 Istio 注入标签。
参考
- Use discovery selectors to configure namespaces for your Istio service mesh (Istio 文档)
- Label selectors (Kubernetes 文档)
- Resources that support set-based requirements (Kubernetes 文档)