如何在 Istio 中调试 EnvoyFilter?

问题描述 投票:0回答:1

我有下面的过滤器。

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

  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
debugging istio envoyproxy
1个回答
2
投票

这个主题在文档中有很好的描述:

最简单的 Istio 日志记录是 Envoy 的访问日志记录。 Envoy 代理将访问信息打印到其标准输出。然后可以通过

kubectl logs
命令打印 Envoy 容器的标准输出。

您问过:

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

基于 github 上的这个问题

没有通用机制。

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

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

如果您使用

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

spec:
  meshConfig:
    accessLogFile: /dev/stdout

否则,请将等效设置添加到原始

istioctl install
命令中,例如:

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

您还可以通过将

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

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

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

您还可以通过链接的说明更改访问日志格式测试访问日志

另请参阅(编辑):

  • EnvoyFilters 将出现在您告诉 Istio 放置它们的位置。通常,错误的 EnvoyFilter 将表现为 Envoy 拒绝配置(即不处于上面的 SYNCED 状态),并且您需要检查 Istiod (Pilot) 日志中是否有来自 Envoy 拒绝配置的错误。
  • 如果配置根本没有出现在 Envoy 中——Envoy 没有确认它,或者它是一个 EnvoyFilter 配置——很可能该配置无效(Istio 无法在语法上验证 EnvoyFilter 内部的配置)或者位于错误的位置在 Envoy 的配置中。
© www.soinside.com 2019 - 2024. All rights reserved.