【问题标题】:How to debug an EnvoyFilter in Istio?如何在 Istio 中调试 EnvoyFilter?
【发布时间】:2021-11-30 21:31:47
【问题描述】:

我有以下过滤器:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: proper-filter-name-here
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      app: istio-ingressgateway
  configPatches:
    - applyTo: NETWORK_FILTER
      match:
        context: GATEWAY
        listener:
          filterChain:
            filter:
              name: "envoy.http_connection_manager"
      patch:
        operation: INSERT_BEFORE
        value:
          name: envoy.lua
          typed_config:
            "@type": "type.googleapis.com/envoy.config.filter.http.lua.v2.Lua"
            inlineCode: |
              function envoy_on_request(request_handle)
                 request_handle:logDebug("Hello World!")
              end

我正在检查网关的日志,它确实没有看起来像应用了过滤器。如何调试 EnvoyFilter?在哪里可以查看每个请求应用了哪些过滤器?

【问题讨论】:

    标签: debugging istio envoyproxy


    【解决方案1】:

    这个话题在the documentation中有很好的描述:

    最简单的 Istio 日志记录是 Envoy’s access logging。 Envoy 代理将访问信息打印到其标准输出。然后可以通过kubectl logs 命令打印 Envoy 容器的标准输出。

    你问过:

    在哪里可以查看每个请求应用了哪些过滤器?

    基于this issue on github

    没有通用机制。

    因此,如果您想查看对每个请求应用了什么过滤器,则必须创建自定义解决方案。

    但是,没有任何问题,您可以根据this fragment in the documentation获取有关每个请求的日志:

    如果您使用 IstioOperator CR 安装 Istio,请将以下字段添加到您的配置中:

    spec:
      meshConfig:
        accessLogFile: /dev/stdout
    

    否则,将等效设置添加到您原来的istioctl install 命令中,例如:

    istioctl  install  <flags-you-used-to-install-Istio> --set meshConfig.accessLogFile=/dev/stdout
    

    您还可以通过将accessLogEncoding 设置为JSONTEXT 在JSON 和文本之间进行选择。 您可能还想通过编辑accessLogFormat 来自定义访问日志的format

    有关所有这三个设置的更多信息,请参阅global mesh options

    • meshConfig.accessLogFile
    • meshConfig.accessLogEncoding
    • meshConfig.accessLogFormat

    您也可以通过链接指令change access log formattest the access log

    另见(编辑):

    • EnvoyFilters 将显示在您告诉 Istio 放置它们的位置。通常,错误的 EnvoyFilter 将表现为 Envoy 拒绝配置(即未处于上述 SYNCED 状态),您需要检查 Istiod(Pilot)日志以了解来自 Envoy 拒绝配置的错误。
    • 如果配置根本没有出现在 Envoy 中——Envoy 没有确认它,或者它是一个 EnvoyFilter 配置——很可能是配置无效(Istio 无法从语法上验证 EnvoyFilter 内部的配置)或者位于Envoy 配置中的错误位置。

    【讨论】:

    • 谢谢。我正在从我的 istio-ingressgateway 跟踪日志,但我似乎无法找出为什么我添加的过滤器没有被使用。
    • @2240,我已经编辑了答案并添加了有关调试特使的更多信息。第一个和第二个链接应该是最有用的。
    猜你喜欢
    • 2021-08-21
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2021-05-28
    • 2022-01-10
    • 2022-06-29
    • 1970-01-01
    相关资源
    最近更新 更多