1.4. 使用发现选择器对 Service Mesh 进行范围
Service Mesh 包括满足以下条件的工作负载:
- control plane 已发现工作负载。
- 工作负载注入了 Envoy 代理 sidecar。
默认情况下,control plane 在集群中的所有命名空间中发现工作负载,其结果如下:
- 每个代理实例接收所有命名空间的配置,包括没有在网格中注册的工作负载。
- 任何具有适当 pod 或命名空间注入标签的工作负载都会接收代理 sidecar。
在共享集群中,您可能想要将 Service Mesh 范围限制为只有某些命名空间。当多个服务网格在同一个集群中运行时,此方法特别有用。
1.4.1. 关于发现选择器
使用发现选择器,网格管理员可以控制 control plane 可以访问的命名空间。通过使用 Kubernetes 标签选择器,管理员将命名空间可见的条件设置为 control plane,不包括与指定条件不匹配的任何命名空间。
Istiod 始终为所有命名空间打开对 OpenShift 的监视。但是,发现选择器会忽略其处理早期没有被选择的对象,从而尽量减少成本。
discoverySelectors
字段接受一组 Kubernetes 选择器,它们应用到命名空间上的标签。您可以为不同的用例配置每个选择器:
-
自定义标签名称和值。例如,使用标签
istio-discovery=enabled
配置所有命名空间。 -
使用基于集合的选择器和 OR 逻辑的命名空间标签列表。例如,使用
istio-discovery=enabled
ORregion=us-east1
配置命名空间。 -
包含和排除命名空间。例如,使用
istio-discovery=enabled
和标签app=helloworld
配置命名空间。
发现选择器不是安全边界。即使配置了 discoverySelector
字段,Istiod 仍然可以访问所有命名空间。
其他资源
1.4.2. 使用发现选择器来限制 Service Mesh
如果您知道在 Service Mesh 中包含的命名空间,请在安装过程中或安装后配置 discoverySelectors
,方法是将所需的选择器添加到 Istio
资源的 meshConfig.discoverySelectors
部分。例如,将 Istio 配置为仅发现标记为 istio-discovery=enabled
的命名空间。
先决条件
- 已安装 OpenShift Service Mesh operator。
- 已创建一个 Istio CNI 资源。
流程
在包含 Istio control plane 的命名空间中添加一个标签,如
istio-system
系统命名空间。$ oc label namespace istio-system istio-discovery=enabled
修改
Istio
control plane 资源,使其包含具有相同标签的discoverySelectors
部分。kind: Istio apiVersion: sailoperator.io/v1alpha1 metadata: name: default spec: namespace: istio-system values: meshConfig: discoverySelectors: - matchLabels: istio-discovery: enabled
应用 Istio CR:
$ oc apply -f istio.yaml
-
确保包含作为 Service Mesh 一部分的工作负载的所有命名空间都有
discoverySelector
标签,如果需要,适当的 Istio 注入标签。
发现选择器有助于限制单个 Service Mesh 的范围,在在单个集群中部署多个 Istio control plane 时,务必要限制 control plane 范围。