Sidecar资源定义包括了以下三个部分:
·workloadSelector:用于选择应用该Sidecar配置的容器组pod或者虚拟机(VM)集合的条件限制。如果省略,则Sidecar配置将应用于同一命名空间中的所有工作负载实例。具体来说,workloadSelector可以指定用于确定网关Gateway或Sidecar资源是否可以应用于Envoy代理的条件限制。这些匹配标准包括了与Envoy代理相关联的元数据、工作负载实例信息(例如附加到pod或者VM的标签),或者Envoy代理在初始握手期间提供给Istio的任何其他信息。如果指定了多个条件,则所有条件都需要匹配,以便选择工作负载实例。目前,仅支持基于标签的选择机制,即map<string,string>类型的过滤规则,标签搜索的范围仅限于资源所在的命名空间。
·ingress:定义了一组IstioIngressListener,指定Sidecar的配置,用于处理关联的工作负载实例的入站流量。如果省略,Istio将根据从所依赖的基础设施平台获得的工作负载信息(例如暴露的端口、服务等)自动配置Sidecar。如果已指定,则当且仅当工作负载实例与服务关联时,才需配置入站端口。
·egress:定义了一组IstioEgressListener,指定Sidecar的配置,用于处理从关联的工作负载实例到网格中的其他服务的出站流量。如果省略,Istio将自动配置Sidecar,以便能够到达此命名空间可见的网格中的每个服务。
具体来说,命名空间中的Sidecar资源将应用于使用workloadSelector选择的同一命名空间中的一个或多个工作负载实例。如果没有workloadSelector,它将应用于同一命名空间中的所有工作负载实例。在确定要应用于工作负载实例的Sidecar资源时,将优先使用通过Sidecar资源选择此工作负载实例的workloadSelector的资源,而不使用任何workloadSelector。
此外,每个命名空间只能有一个Sidecar资源,没有任何工作负载选择器。如果给定命名空间中存在多个无选择器的Sidecar资源,则系统的行为也是不确定的。如果具有工作负载选择器的两个或多个Sidecar资源选择相同的工作负载实例,则系统的行为也是不确定的。
每一个IstioIngressListener指定了关联到工作负载实例的Sidecar代理上的入站流量监听器的属性,参见表6-13。
表6-13 IstioIngressListener的入站属性

每一个IstioEgressListener指定了关联到工作负载实例的Sidecar代理上的出站流量监听器的属性,参见表6-14。
表6-14 IstioIngressListener的出站属性
