Istio Sidecar
概念及示例
Sidecar
描述了sidecar代理的配置。默认情况下,Istio 让每个 Envoy 代理都可以访问来自和它关联的工作负载的所有端口的请求,然后转发到对应的工作负载。您可以使用 Sidecar 配置去做下面的事情:
- 微调 Envoy 代理接受的端口和协议集。
- 限制 Envoy 代理可以访问的服务集合。
您可能希望在较庞大的应用程序中限制这样的 sidecar 可达性,配置每个代理能访问网格中的任意服务可能会因为高内存使用量而影响网格的性能。
您可以指定将 sidecar 配置应用于特定命名空间中的所有工作负载,或者使用 workloadSelector
选择特定的工作负载。例如,下面的 sidecar 配置将 bookinfo
命名空间中的所有服务配置为仅能访问运行在相同命名空间和 Istio 控制平面中的服务。
每个名称空间只能有一个没有任何配置
workloadSelector
的Sidecar
配置 , 如果Sidecar
给定名称空间中存在多个不使用选择器的配置,则系统的行为是不确定的。
下面声明的Sidecar
在根名称空间中声明了全局默认配置istio-config
,该配置在所有名称空间中配置了sidecar,以仅允许将流量发送到同一名称空间中的其他工作负载以及该名称空间中的服务istio-system
。
1 | apiVersion: networking.istio.io/v1alpha3 |
下面声明的Sidecar
在配置prod-us1
命名空间覆盖全局默认以上定义,使出口流量到公共服务中prod-us1
,prod-apis
和istio-system
命名空间。
1 | apiVersion: networking.istio.io/v1alpha3 |
下面的示例Sidecar
在prod-us1
名称空间中声明一个配置,该配置接受端口9080上的入站HTTP通信并将其转发到侦听Unix域套接字的附加工作负载实例。在出口方向上,除了istio-system
名称空间外,Sidecar仅代理绑定到端口9080的HTTP流量,以用于prod-us1
名称空间中的服务
1 | apiVersion: networking.istio.io/v1alpha3 |
Sidecar配置
Field | Type | Description | Required |
---|---|---|---|
workloadSelector |
WorkloadSelector |
表示工作负载的选择器,Sidecar 的配置可以使用 workloadSelector 应用到命名空间下的一个或多个负载,如果未配置 workloadSelector,则应用到整个命名空间。每个命名空间都只能定义一个没有 workloadSelector 的 Sidecar,表示对命名空间的全局配置 | No |
ingress |
IstioIngressListener[] |
IstioIngressListener 类型,配置 Sidecar 对于的工作负载的 Inbound 流量。 | No |
egress |
IstioEgressListener[] |
是一种 istioEgressListener 类型,可用来配置 Sidecar 对网络内其他服务的访问,如果没有配置,则只要命名空间可见,命名空间里的服务就都可以被访问。 | Yes |
outboundTrafficPolicy |
OutboundTrafficPolicy |
允许配置出站流量策略 | No |
WorkloadSelector配置
WorkloadSelector
指定的标准来确定是否Gateway
, Sidecar
或EnvoyFilter
配置可被应用到一个代理。匹配条件包括与代理关联的元数据,工作负载实例信息或代理在初始握手期间提供给Istio的任何其他信息。如果指定了多个条件,则必须匹配所有条件才能选择工作负载实例。当前,仅支持基于标签的选择机制。
Field | Type | Description | Required |
---|---|---|---|
labels |
map |
一个或多个标签,指示Sidecar 应在其上应用此配置的一组特定的Pod / VM 。标签搜索的范围仅限于存在资源的配置名称空间。 |
Yes |
参考文献
https://preliminary.istio.io/zh/docs/reference/config/networking/sidecar/#Sidecar