如何在 Istio 中调试 EnvoyFilter?

pol*_*per 6 debugging istio envoyproxy

我有下面的过滤器。

我正在检查网关的日志,看起来没有应用过滤器。

  1. 如何调试EnvoyFilter
  2. 在哪里可以查看每个请求应用了哪些过滤器?
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
Run Code Online (Sandbox Code Playgroud)

Mik*_*iak 3

文档中对此主题进行了很好的描述:

\n
\n

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

\n
\n

您曾问过:

\n
\n

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

\n
\n

基于github上的这个问题

\n
\n

没有通用机制。

\n
\n

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

\n

但是,没有任何问题,您可以根据文档中的此片段获取有关每个请求的日志:

\n
\n

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

\n
\n
spec:\n  meshConfig:\n    accessLogFile: /dev/stdout\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n
\n
istioctl  install  <flags-you-used-to-install-Istio> --set meshConfig.accessLogFile=/dev/stdout\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n

有关所有这三个设置的更多信息,请参阅 全局网格选项:

\n
\n
    \n
  • meshConfig.accessLogFile
  • \n
  • meshConfig.accessLogEncoding
  • \n
  • meshConfig.accessLogFormat
  • \n
\n

您还可以更改访问日志格式并通过链接的指令测试访问日志

\n

另请参阅(编辑):

\n\n
\n
    \n
  • EnvoyFilters 将出现在您告诉 Istio 放置它们的位置。通常,错误的 EnvoyFilter 将表现为 Envoy 拒绝配置(即不处于上述 SYNCED 状态),并且您需要检查 Istiod (Pilot) 日志中是否有来自 Envoy 拒绝配置的错误。
  • \n
\n
\n
\n
    \n
  • 如果配置\xe2\x80\x99根本没有出现在Envoy中\xe2\x80\x93 Envoy没有ACK它,或者它\xe2\x80\x99是一个EnvoyFilter配置\xe2\x80\x93它\xe2\x80\x99s配置可能无效(Istio 无法在语法上验证 EnvoyFilter 内部的配置)或者位于 Envoy\xe2\x80\x99s 配置中的错误位置。
  • \n
\n
\n\n