1

我正在尝试通过 Envoy 过滤器设置 TCP idleTimeout,以便外部域的出站连接some.app.com在空闲 5 秒后将被终止:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: listener-timeout-tcp
  namespace: istio-system
spec:
  configPatches:
  - applyTo: NETWORK_FILTER
    match:
      context: SIDECAR_OUTBOUND
      listener:
        filterChain:
          sni: some.app.com
          filter:
            name: envoy.filters.network.tcp_proxy
    patch:
      operation: MERGE
      value:
        name: envoy.filters.network.tcp_proxy
        typed_config:
          '@type': type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
          idle_timeout: 5s

但是,当我尝试应用此过滤器时,出现以下错误:

Error from server: error when creating "filter.yaml": admission webhook "pilot.validation.istio.io" denied the request: configuration is invalid: envoy filter: missing filters

所以,我意识到上面的 EnvoyFilter 配置不支持istio 1.2.5,所以我修改了配置以使用旧版本:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: tcp-idle-timeout
spec:
  workloadSelector:
    labels:
      app: mecha-dev
  filters:
    - listenerMatch:
        listenerType: SIDECAR_OUTBOUND
        listenerProtocol: TCP
      filterName: envoy.tcp_proxy
      filterType: NETWORK
      filterConfig:
        idle_timeout: 5s

修改后创建了 EnvoyFilter,但它似乎对出站请求没有任何影响。此外,我找不到一种方法来将此过滤器限制为仅发送到外部服务的出站请求some.app.com

我的 EnvoyFilter 配置中是否缺少某些内容?另外,我们可以限制这个过滤器some.app.com吗?下面有address选项,listenerMatch但是如果外部服务的 IP 地址不断变化怎么办?

使用的 Istio 和 EnvoyProxy 版本:

ISTIO_VERSION=1.2.5
ENVOY_VERSION=1.11.0-dev
4

1 回答 1

1

这是一个社区维基答案。随意扩展它。

正如评论中已经讨论的那样,EnvoyFilterIstio 1.2 版尚不支持该版本,实际上该版本自 2019 年 12 月起不再受支持。

我强烈建议升级到最新的 Istio 和 Envoy 版本。此外,升级后请注意,您要使用的过滤器名称已弃用和替换。您现在应该使用envoy.filters.network.tcp_proxy而不是envoy.tcp_proxy.

请记住,某些东西被弃用是有原因的,保留旧版本迟早会给您带来更多麻烦。尽量让事情保持最新。

更多细节可以在最新的文档中找到。

于 2021-05-11T09:41:47.190 回答