debugging 如何在Istio中调试EnvoyFilter?

tquggr8v  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(145)

我有以下过滤器:

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

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

bjp0bcyl

bjp0bcyl1#

这个主题在the documentation中有很好的描述:
最简单的Istio日志记录是Envoy’s access logging。Envoy代理将访问信息打印到其标准输出。Envoy容器的标准输出可以通过kubectl logs命令打印出来。
你问过:
在哪里可以看到每个请求应用了哪些过滤器?
基于this issue on 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设置为JSONTEXT来选择JSON和文本。您可能还希望通过编辑accessLogFormat来自定义访问日志的格式。
有关所有这三种设置的详细信息,请参考全局网格选项:

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

您还可以更改访问日志格式,并从链接的指令测试访问日志。
参见(编辑):

  • How to debug your Istio networking configuration
  • EnvoyFilters将在您告诉Istio放置它们的位置显示。通常情况下,一个坏的EnvoyFilter将表现为Envoy拒绝配置(即。即不在上面的SYNCED状态),您需要检查Istiod(Pilot)日志,以了解Envoy拒绝配置的错误。
  • 如果配置根本没有出现在Envoy中-- Envoy没有确认它,或者它是EnvoyFilter配置--很可能配置无效(Istio无法在EnvoyFilter中语法验证配置),或者位于Envoy配置中的错误位置。
  • Debugging Envoy and Istiod
  • Using EnvoyFilters to Debug Requests

相关问题