EnvoyFilter 「爱情、让人受尽委屈。」 2022-08-31 07:19 68阅读 0赞 ### EnvoyFilter ### `EnvoyFilter` 提供了一种机制,来自定义 Istio Pilot 生成的 Envoy 配置。使用 `EnvoyFilter` 可以 修改某些字段的值,添加特定的过滤器,甚至添加全新的监听器、集群等。必须谨慎使用此功能,因为不正确的配置可能会破坏整个网格的稳定性。与其他 Istio 网络对象不同,`EnvoyFilters` 是附加应用的。对于特定命名空间中的给定工作负载,可以有任意数量的 `EnvoyFilters`。这些 `EnvoyFilters` 的应用顺序如下:配置根命名空间中的所有 `EnvoyFilters`,然后是工作负载命名空间中的所有匹配的 `EnvoyFilters`。 注意1:由于这是“碎玻璃”配置,不同 Istio 版本之间不会有任何向后兼容性。即 此配置会根据 Istio 网络子系统的内部实现而发生变化。 注意2:在 Istio 代理版本升级中,应仔细检查通过此机制提供的 Envoy 配置,以确保废弃字段被删除并合适地替换。 注意3:当多个 `EnvoyFilters` 绑定到给定命名空间中的同一个工作负载时,将按创建时间的顺序顺序处理所有补丁。如果多个 `EnvoyFilters` 配置相互冲突,则该行为是不确定的。 注释4:`*_To` 将 `EnvoyFilter` 资源应用于系统中的所有工作负载(`sidecars` 和 `gateways`),在配置根命名空间中定义资源,而不需要工作负载选择器。 下面的示例中,在名为 `istio-config` 的根命名空间中声明了一个全局默认的 `EnvoyFilter` 资源,该资源在系统中的所有 `sidecars` 上添加了自定义协议过滤器,以使出站端口 9307 生效。应该在终止 `tcp_proxy` 过滤器生效之前添加该过滤器。此外,它为 `sidecars` 和 `gateways` 中的所有 HTTP 连接设置了 30s 的空闲超时。 apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: custom-protocol namespace: istio-config # as defined in meshConfig resource. spec: configPatches: - applyTo: NETWORK_FILTER match: context: SIDECAR_OUTBOUND # will match outbound listeners in all sidecars listener: portNumber: 9307 filterChain: filter: name: "envoy.tcp_proxy" patch: operation: INSERT_BEFORE value: name: "envoy.config.filter.network.custom_protocol" config: ... - applyTo: NETWORK_FILTER # http connection manager is a filter in Envoy match: # context omitted so that this applies to both sidecars and gateways listener: filterChain: filter: name: "envoy.http_connection_manager" patch: operation: MERGE value: typed_config: "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager" idle_timeout: 30s 下面的示例中,为 `bookinfo` 命名空间中到达带有标签为 `app: reviews` 的 `reviews` 服务 `Pod` 的服务端口 8080 的所有入站 HTTP 调用启用 Envoy 的 Lua 筛选器。Lua 过滤器调出到外部服务 `internal.org.net:8888`,该服务在 Envoy 中需要特殊的集群定义,集群也作为此配置的一部分添加到 `sidecar` 中。 apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: reviews-lua namespace: bookinfo spec: workloadSelector: labels: app: reviews configPatches: # The first patch adds the lua filter to the listener/http connection manager - applyTo: HTTP_FILTER match: context: SIDECAR_INBOUND listener: portNumber: 8080 filterChain: filter: name: "envoy.http_connection_manager" subFilter: name: "envoy.router" patch: operation: INSERT_BEFORE value: # lua filter specification name: envoy.lua config: inlineCode: | function envoy_on_request(request_handle) -- Make an HTTP call to an upstream host with the following headers, body, and timeout. local headers, body = request_handle:httpCall( "lua_cluster", { [":method"] = "POST", [":path"] = "/acl", [":authority"] = "internal.org.net" }, "authorize call", 5000) end # The second patch adds the cluster that is referenced by the lua code # cds match is omitted as a new cluster is being added - applyTo: CLUSTER match: context: SIDECAR_OUTBOUND patch: operation: ADD value: # cluster specification name: "lua_cluster" type: STRICT_DNS connect_timeout: 0.5s lb_policy: ROUND_ROBIN hosts: - socket_address: protocol: TCP address: "internal.org.net" port_value: 8888 下面的示例中,覆盖了 HTTP 连接管理器中的某些字段(HTTP 空闲超时和 `X-Forward-For` 受信任的跃点),这些字段位于 SNI 主机 `app.example.com` 的 `istio-system` 命名空间的入口网关上的监听器中。 apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: hcm-tweaks namespace: istio-system spec: workloadSelector: labels: istio: ingress-gateway configPatches: - applyTo: NETWORK_FILTER # http connection manager is a filter in Envoy match: context: GATEWAY listener: filterChain: sni: app.example.com filter: name: "envoy.http_connection_manager" patch: operation: MERGE value: idle_timeout: 30s xff_num_trusted_hops: 5 -------------------- ### EnvoyFilter ### `EnvoyFilter` 提供了一种机制,自定义 Istio Pilot 生成的 Envoy 配置。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>workloadSelector</code></td> <td><code>WorkloadSelector</code></td> <td>用于选择在其上应用此补丁配置的指定 <code>Pods/VMs</code> 组的条件。如果省略,<code>EnvoyFilter</code> 补丁将应用于同一命名空间中的所有工作负载。如果在配置根名称空间中存在 <code>EnvoyFilter</code>,它将被应用于任何命名空间中的所有工作负载</td> <td>否</td> </tr> <tr> <td><code>configPatches</code></td> <td><code>EnvoyConfigObjectPatch[]</code></td> <td>具有匹配条件的一个或多个补丁</td> <td>是</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.ApplyTo ### `ApplyTo` 指定在 `Envoy` 配置中的哪个位置应用给定的补丁。 <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>INVALID</code></td> <td>占位符</td> </tr> <tr> <td><code>LISTENER</code></td> <td>将补丁应用到监听器</td> </tr> <tr> <td><code>FILTER_CHAIN</code></td> <td>将补丁应用到过滤器链上</td> </tr> <tr> <td><code>NETWORK_FILTER</code></td> <td>将补丁应用到网络过滤器链,可以修改现有的过滤器或添加新的过滤器</td> </tr> <tr> <td><code>HTTP_FILTER</code></td> <td>将补丁应用于 HTTP 连接管理器中的 HTTP 过滤器链,以修改现有的过滤器或添加新的过滤器</td> </tr> <tr> <td><code>ROUTE_CONFIGURATION</code></td> <td>将补丁应用于 HTTP 连接管理器中的 <code>Route</code> 配置(rds 输出)。这不适用于虚拟主机。当前,仅允许对路由配置对象进行 <code>MERGE</code> 操作</td> </tr> <tr> <td><code>VIRTUAL_HOST</code></td> <td>将补丁应用到路由配置中的虚拟主机</td> </tr> <tr> <td><code>HTTP_ROUTE</code></td> <td>在路由配置中将补丁应用于匹配的虚拟主机内部的路由对象上。当前,仅允许对路由对象进行 <code>MERGE</code> 操作</td> </tr> <tr> <td><code>CLUSTER</code></td> <td>在 CDS 输出中将补丁应用于集群。也用于添加新的集群</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.ClusterMatch ### 必须满足在 `ClusterMatch` 中指定的条件,该补丁才能应用于集群。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>portNumber</code></td> <td><code>uint32</code></td> <td>为其生成集群的服务端口。如果省略,则应用于任何端口的集群</td> <td>否</td> </tr> <tr> <td><code>service</code></td> <td><code>string</code></td> <td>此集群的完全限定服务名。如果省略,则应用于任何服务的集群。对于通过 <code>ServiceEntry</code> 定义的服务,服务名称与在 <code>ServiceEntry</code> 中定义的主机相同</td> <td>否</td> </tr> <tr> <td><code>subset</code></td> <td><code>string</code></td> <td>与服务关联的子集。如果省略,则应用于服务的任何子集的集群</td> <td>否</td> </tr> <tr> <td><code>name</code></td> <td><code>string</code></td> <td>要匹配的集群的精确名称。要通过名称匹配特定的集群,例如内部生成的 <code>Passthrough</code> 集群,请将 <code>ClusterMatch</code> 中除 <code>name</code> 之外的所有字段保留为空</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.DeprecatedListenerMatch.ListenerProtocol ### <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>ALL</code></td> <td>所有协议</td> </tr> <tr> <td><code>HTTP</code></td> <td><code>HTTP</code>/<code>HTTPS</code>/<code>HTTPS</code>/<code>gRPC</code></td> </tr> <tr> <td><code>TCP</code></td> <td>任何非 HTTP 监听器</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.DeprecatedListenerMatch.ListenerType ### <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>ALL</code></td> <td>所有监听器</td> </tr> <tr> <td><code>SIDECAR_INBOUND</code></td> <td><code>sidecar</code> 中的入站监听器</td> </tr> <tr> <td><code>SIDECAR_OUTBOUND</code></td> <td><code>sidecar</code> 中的出站监听器</td> </tr> <tr> <td><code>GATEWAY</code></td> <td>网关监听器</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.EnvoyConfigObjectMatch ### 在将补丁应用到为给定代理生成的配置之前,需要满足一个或多个匹配条件。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>context</code></td> <td><code>PatchContext</code></td> <td>匹配的特定配置生成的上下文。Istio Pilot 会在 <code>Gateway</code>、到 <code>sidecar</code> 的入站流量和 <code>sidecar</code> 的出站流量的上下文中生成 Envoy 配置</td> <td>否</td> </tr> <tr> <td><code>proxy</code></td> <td><code>ProxyMatch</code></td> <td>匹配与代理关联的属性</td> <td>否</td> </tr> <tr> <td><code>listener</code></td> <td><code>ListenerMatch (oneof)</code></td> <td>匹配 Envoy 监听器属性</td> <td>是</td> </tr> <tr> <td><code>routeConfiguration</code></td> <td><code>RouteConfigurationMatch (oneof)</code></td> <td>匹配 Envoy HTTP 路由配置属性</td> <td>是</td> </tr> <tr> <td><code>cluster</code></td> <td><code>ClusterMatch (oneof)</code></td> <td>匹配 Envoy 集群属性</td> <td>是</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.EnvoyConfigObjectPatch ### <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>applyTo</code></td> <td><code>ApplyTo</code></td> <td>指定应在 Envoy 配置中的何处应用补丁。匹配将根据 <code>applyTo</code> 选择合适的对象。例如,带有 <code>HTTPFILTER</code> 的 <code>applyTo</code> 在监听器上具有一个匹配条件,在 <code>envoy.http connection_manager</code> 上具有一个网络过滤器选择,在应该执行插入的 HTTP 过滤器上具有一个子过滤器选择。同样,<code>CLUSTER</code> 上的 <code>applyTo</code> 应该在集群上而不是在监听器上具有匹配项(如果提供)</td> <td>否</td> </tr> <tr> <td><code>match</code></td> <td><code>EnvoyConfigObjectMatch</code></td> <td>匹配 监听器或路由 的 配置或集群</td> <td>否</td> </tr> <tr> <td><code>patch</code></td> <td><code>Patch</code></td> <td>与操作一起应用的补丁</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.Filter.FilterType ### <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>INVALID</code></td> <td>占位符</td> </tr> <tr> <td><code>HTTP</code></td> <td>HTTP 过滤器</td> </tr> <tr> <td><code>NETWORK</code></td> <td>网络过滤器</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.InsertPosition.Index ### 在过滤器链中的索引或位置。 <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>FIRST</code></td> <td>首位插入</td> </tr> <tr> <td><code>LAST</code></td> <td>尾部插入</td> </tr> <tr> <td><code>BEFORE</code></td> <td>在给定过滤器之前插入</td> </tr> <tr> <td><code>AFTER</code></td> <td>在给定过滤器之后插入</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.ListenerMatch ### 要将补丁应用到跨所有过滤链的指定监听器上,或者应用到监听器内部的指定过滤链上,必须满足监听器匹配中指定的条件。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>portNumber</code></td> <td><code>uint32</code></td> <td>向其发送或接收流量的服务端口或网关端口。如果未指定,则匹配所有监听器。即使为实例端口或 <code>Pod</code> 端口生成了入站监听器,也应该只使用服务端口来匹配监听器</td> <td>否</td> </tr> <tr> <td><code>filterChain</code></td> <td><code>FilterChainMatch</code></td> <td>匹配监听器中的指定过滤器链。如果指定了,则补丁将应用于过滤器链(以及指定的过滤器,如果指定了),而不是应用于监听器中的其他过滤器链</td> <td>否</td> </tr> <tr> <td><code>name</code></td> <td><code>string</code></td> <td>通过名称匹配指定的监听器。Pilot 生成的监听器通常命名为 <code>IP:Port</code></td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.ListenerMatch.FilterChainMatch ### 对于有多个过滤器链的监听器(如 带有许可的 mTLS 的 `sidecars` 上的入站监听器,有多个 SNI 匹配的网关监听器),可以使用过滤器链匹配来选择要打补丁的指定过滤器链。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>name</code></td> <td><code>string</code></td> <td>过滤器链的名称</td> <td>否</td> </tr> <tr> <td><code>sni</code></td> <td><code>string</code></td> <td>过滤器链的匹配条件使用的 SNI 值。如果过滤器链没有 SNI 匹配,则此条件的值为 false</td> <td>否</td> </tr> <tr> <td><code>transportProtocol</code></td> <td><code>string</code></td> <td>仅适用于 SIDECAR INBOUND 上下文。如果非空,则在决定过滤器链匹配时要考虑传输协议。当 <code>tls inspector</code> 监听器过滤器检测到该值时,会将其与新连接的传输协议进行比较。可接受的值包括:<code>raw_buffer</code> - 默认值,当没有检测到传输协议时使用;<code>tls</code> - 当 <code>tls inspector</code> 检测到 tls 协议时设置</td> <td>否</td> </tr> <tr> <td><code>applicationProtocols</code></td> <td><code>string</code></td> <td>仅适用于 <code>sidecars</code>。如果非空,则在决定过滤器链匹配时要考虑一组逗号分隔的应用程序协议。当某个监听器过滤器(如 <code>http_inspector</code>)检测到该值时,会将其与新连接的应用程序协议进行比较。接受的值包括:<code>h2</code>/<code>http/1.1</code>/<code>http/1.0</code></td> <td>否</td> </tr> <tr> <td><code>filter</code></td> <td><code>FilterMatch</code></td> <td>要应用补丁的指定过滤器的名称。将其设置为 <code>envoy.httpconnectionmanager</code>,以添加过滤器或将补丁应用于 HTTP 连接管理器</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.ListenerMatch.FilterMatch ### 匹配过滤器链中的特定过滤器的条件。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>name</code></td> <td><code>string</code></td> <td>要匹配的过滤器的名称</td> <td>否</td> </tr> <tr> <td><code>subFilter</code></td> <td><code>SubFilterMatch</code></td> <td>过滤器中要匹配的下一级过滤器。通常用于 HTTP 连接管理器过滤器和 Thrift 过滤器</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.ListenerMatch.SubFilterMatch ### 匹配另一个过滤器中的特定过滤器的条件。此字段通常用于匹配 `envoy.httpconnectionmanager` 网络过滤器内的 HTTP 过滤器。也适用于 Thrift 过滤器。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>name</code></td> <td><code>string</code></td> <td>要匹配的过滤器的名称</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.Patch ### 指定如何给选中的对象打补丁。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>operation</code></td> <td><code>Operation</code></td> <td>指定如何应用补丁</td> <td>否</td> </tr> <tr> <td><code>value</code></td> <td><code>Struct</code></td> <td>补丁对象的 json 配置。这将使用 json 合并语义与路径中现有的 proto 进行合并</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.Patch.Operation ### `Operation` 指定如何应用补丁到选定的配置。 <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>MERGE</code></td> <td>使用 json 合并语义将提供的配置与生成的配置合并</td> </tr> <tr> <td><code>ADD</code></td> <td>将提供的配置添加到现有列表(监听器,集群,虚拟主机,网络过滤器 或 HTTP 过滤器)。当 <code>applyTo</code> 设置为 <code>ROUTECONFIGURATION</code> 或 <code>HTTPROUTE</code> 时,将忽略此操作</td> </tr> <tr> <td><code>REMOVE</code></td> <td>从列表中删除选定的对象(监听器,集群,虚拟主机,网络过滤器 或 HTTP 过滤器)。不需要指定值。当 <code>applyTo</code> 设置为 <code>ROUTECONFIGURATION</code> 或 <code>HTTPROUTE</code> 时,将忽略此操作</td> </tr> <tr> <td><code>INSERT_BEFORE</code></td> <td>在给定对象数组上执行插入操作。此操作仅在过滤器的上下文中才有用,因为过滤器的顺序很重要。对于集群和虚拟主机,数组中元素的顺序无关紧要。在选定的过滤器或子过滤器之前插入。如果没有选择任何过滤器,指定的过滤器将被插入到列表的开头</td> </tr> <tr> <td><code>INSERT_AFTER</code></td> <td>在给定对象数组上执行插入操作。此操作仅在过滤器的上下文中才有用,因为过滤器的顺序很重要。对于集群和虚拟主机,数组中元素的顺序无关紧要。在选定的过滤器或子过滤器之后插入。如果没有选择任何过滤器,指定的过滤器将被插入到列表的末尾</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.PatchContext ### `PatchContext` 将根据流量流向和工作负载选择一类配置。 <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>ANY</code></td> <td><code>sidecars</code> 和 <code>gateways</code> 中的所有监听器、路由、集群</td> </tr> <tr> <td><code>SIDECAR_INBOUND</code></td> <td><code>sidecars</code> 中入站的监听器、路由、集群</td> </tr> <tr> <td><code>SIDECAR_OUTBOUND</code></td> <td><code>sidecars</code> 中出站的监听器、路由、集群</td> </tr> <tr> <td><code>GATEWAY</code></td> <td><code>gateways</code> 监听器、路由、集群</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.ProxyMatch ### 要匹配的代理的一个或多个属性。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>proxyVersion</code></td> <td><code>string</code></td> <td>golang regex 格式(RE2)的正则表达式,可以使用 Istio 代理的特定版本来选择代理。给定代理的 Istio 版本是在连接到 Pilot 时从代理提供的节点元数据字段 <code>ISTIOVERSION</code> 中获得的。此值作为环境变量 <code>ISTIOMETAISTIOVERSION</code> 嵌入在 Istio 代理的 <code>docker</code> 镜像中。自定义代理实现应该提供这个元数据变量,以利用 Istio 版本检查选项</td> <td>否</td> </tr> <tr> <td><code>metadata</code></td> <td><code>map<string, string></code></td> <td>当连接到 Istio Pilot 时,匹配代理提供的节点元数据。注意,虽然 Envoy 的节点元数据的类型为 <code>Struct</code>,但 Pilot 只处理字符串的键值对。元数据中指定的所有键都必须与精确值匹配。如果指定的任何键不存在或值不匹配,则匹配将失败</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.RouteConfigurationMatch ### 当补丁应用到路由配置对象或路由配置中的指定虚拟主机时,必须满足 `RouteConfigurationMatch` 中指定的条件。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>portNumber</code></td> <td><code>uint32</code></td> <td>生成此路由配置的服务端口号或网关服务器端口号。如果省略,则适用于所有端口的路由配置</td> <td>否</td> </tr> <tr> <td><code>portName</code></td> <td><code>string</code></td> <td>仅适用于 <code>Gateway</code> 上下文。生成此路由配置的网关服务器端口名称</td> <td>否</td> </tr> <tr> <td><code>gateway</code></td> <td><code>string</code></td> <td>生成此路由配置的 Istio 网关配置的 <code>namespace/name</code>。仅在上下文为 <code>Gateway</code> 时适用,应该采用 <code>namespace/name</code> 格式。将此字段与 <code>portNumber</code> 和 <code>portName</code> 结合使用,可以为网关配置对象内的特定 <code>HTTPS</code> 服务器准确选择 <code>Envoy</code> 路由配置</td> <td>否</td> </tr> <tr> <td><code>vhost</code></td> <td><code>VirtualHostMatch</code></td> <td>在路由配置中匹配指定的虚拟主机,然后将补丁应用到该虚拟主机</td> <td>否</td> </tr> <tr> <td><code>name</code></td> <td><code>string</code></td> <td>用于匹配的路由配置名称,可用于按此名称匹配特定的路由配置。例如,为所有 <code>sidecars</code> 内部生成的 <code>http_proxy</code> 路由配置</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.RouteConfigurationMatch.RouteMatch ### 在路由配置中匹配虚拟主机中的特定路由。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>name</code></td> <td><code>string</code></td> <td>默认情况下生成的路由对象命名为 <code>default</code>。使用 <code>VirtualService</code> 生成的路由对象将携带 <code>VirtualService</code> 的 HTTP 路由中使用的名称</td> <td>否</td> </tr> <tr> <td><code>action</code></td> <td><code>Action</code></td> <td>将路由与特定操作类型匹配</td> <td>否</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.RouteConfigurationMatch.RouteMatch.Action ### `Action` 是指 Envoy 在匹配 HTTP 路由时对路由采取的操作。 <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>ANY</code></td> <td>所有三个路由操作</td> </tr> <tr> <td><code>ROUTE</code></td> <td>将流量路由到 <code>cluster/weighted</code> 集群</td> </tr> <tr> <td><code>REDIRECT</code></td> <td>重定向请求</td> </tr> <tr> <td><code>DIRECT_RESPONSE</code></td> <td>直接响应具有特定有效负载的请求</td> </tr> </tbody> </table> -------------------- ### EnvoyFilter.RouteConfigurationMatch.VirtualHostMatch ### 在路由配置中匹配特定的虚拟主机。 <table> <thead> <tr> <th>字段</th> <th>类型</th> <th>描述</th> <th>是否必需</th> </tr> </thead> <tbody> <tr> <td><code>name</code></td> <td><code>string</code></td> <td>由 Istio 生成的虚拟主机对象被命名为 <code>host:port</code>,其中主机通常对应 <code>VirtualService</code> 的 <code>host</code> 字段或注册表中某个服务的主机名</td> <td>否</td> </tr> <tr> <td><code>route</code></td> <td><code>RouteMatch</code></td> <td>匹配虚拟主机中的特定路由</td> <td>否</td> </tr> </tbody> </table> --------------------
相关 一张图快速了解 Istio 的 EnvoyFilter EnvoyFilter简介 EnvoyFilter 提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 修改某些字段的值 喜欢ヅ旅行/ 2023年09月28日 15:09/ 0 赞/ 131 阅读
相关 EnvoyFilter详解 欢迎关注我的公众号: ![watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAaHhwamF2Y 偏执的太偏执、/ 2022年10月16日 15:29/ 0 赞/ 3 阅读
相关 EnvoyFilter EnvoyFilter `EnvoyFilter` 提供了一种机制,来自定义 Istio Pilot 生成的 Envoy 配置。使用 `EnvoyFilter` 可以 修 「爱情、让人受尽委屈。」/ 2022年08月31日 07:19/ 0 赞/ 69 阅读
相关 不懂envoyfilter也敢说精通istio系列-ratelimit-istio ratelimit完全手册 欢迎关注我的公众号: ![watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAaHhwamF2 迈不过友情╰/ 2022年08月28日 09:59/ 0 赞/ 147 阅读
还没有评论,来说两句吧...