【问题标题】:Why is My TCP Istio EnvoyFilter Not Working?为什么我的 TCP Istio EnvoyFilter 不工作?
【发布时间】:2021-07-21 12:35:07
【问题描述】:

我正在尝试通过 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

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

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.comlistenerMatch下面有address选项,但是如果外部服务的IP地址不断变化呢?

使用的 Istio 和 EnvoyProxy 版本:

ISTIO_VERSION=1.2.5
ENVOY_VERSION=1.11.0-dev

【问题讨论】:

  • 你好@bakadevops。您能否告诉我们您使用的是哪个版本的 Istio?
  • @WytrzymałyWiktor Istio 版本是1.2.5,它使用的特使版本是1.11.0-dev
  • 您应该升级到最新版本,对 1.2 的支持于 2019 年 12 月结束
  • @ChristophRaab 我意识到这个 EnvoyFilter 配置不起作用,因为它不支持 y 版本 1.2.5。是的,升级 istio 会有所帮助,但它是一个旧的生产集群,所以我现在不能这样做。是否有任何其他解决方法可以使其正常工作?
  • 您可以使用旧文档并修改您的过滤器以使用旧 api:istio.io/v1.2/docs/reference/config/networking/v1alpha3/…

标签: kubernetes istio envoyproxy istio-sidecar


【解决方案1】:

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

正如 cmets 中已经讨论的,EnvoyFilter 在 Istio 版本 1.2 中尚不支持,实际上该版本自 2019 年 12 月起不再支持。

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

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

更多详情请见latest docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 2020-06-28
    • 2021-11-30
    • 2021-05-28
    相关资源
    最近更新 更多