我有下面的过滤器。
我正在检查网关的日志,它没有看起来像是应用了过滤器。
EnvoyFilter
?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
这个主题在文档中有很好的描述:
最简单的 Istio 日志记录是 Envoy 的访问日志记录。 Envoy 代理将访问信息打印到其标准输出。然后可以通过
命令打印 Envoy 容器的标准输出。kubectl logs
您问过:
我在哪里可以看到每个请求应用了哪些过滤器?
基于 github 上的这个问题:
没有通用机制。
因此,如果您想查看每个请求应用了哪些过滤器,则必须创建自定义解决方案。
但是,没有任何问题,您可以根据文档中的此片段获取有关每个请求的日志:
如果您使用
CR 安装 Istio,请将以下字段添加到您的配置中:IstioOperator
spec:
meshConfig:
accessLogFile: /dev/stdout
否则,请将等效设置添加到原始
命令中,例如:istioctl install
istioctl install <flags-you-used-to-install-Istio> --set meshConfig.accessLogFile=/dev/stdout
您还可以通过将
设置为accessLogEncoding
或JSON
,在 JSON 和文本之间进行选择。 您可能还想通过编辑TEXT
accessLogFormat
来自定义访问日志的格式。有关所有这三个设置的更多信息,请参阅全局网格选项:
meshConfig.accessLogFile
meshConfig.accessLogEncoding
meshConfig.accessLogFormat
另请参阅(编辑):
- EnvoyFilters 将出现在您告诉 Istio 放置它们的位置。通常,错误的 EnvoyFilter 将表现为 Envoy 拒绝配置(即不处于上面的 SYNCED 状态),并且您需要检查 Istiod (Pilot) 日志中是否有来自 Envoy 拒绝配置的错误。
- 如果配置根本没有出现在 Envoy 中——Envoy 没有确认它,或者它是一个 EnvoyFilter 配置——很可能该配置无效(Istio 无法在语法上验证 EnvoyFilter 内部的配置)或者位于错误的位置在 Envoy 的配置中。