通过EnvoyFilter CRD禁用访问日志失败,报路径长度校验错误
解决通过EnvoyFilter禁用Istio访问日志的报错问题
问题背景
常规禁用Istio访问日志的方式是通过meshConfig.accessLogFile设置空字符串,但因无全局配置修改权限,尝试用EnvoyFilter CRD实现,使用的配置如下:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: disable-accesslog spec: configPatches: - applyTo: NETWORK_FILTER match: listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" patch: operation: MERGE value: typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager" access_log: - name: envoy.access_loggers.file typed_config: "@type": "type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog" path: ""
但操作失败,收到的错误日志如下:
2022-07-25T10:03:29.923757Z 警告 envoy config 类型为type.googleapis.com/envoy.config.listener.v3.Listener的gRPC配置被拒绝:添加/更新监听器0.0.0.0_15014失败:Proto约束校验不通过(FileAccessLogValidationError.Path: 值长度必须至少为1个字符)
问题原因
报错明确指出FileAccessLog的path字段长度必须至少1个字符,直接设为空字符串不符合Envoy的配置校验规则。
解决方案
要禁用访问日志,不应给access_log数组添加空路径的文件日志配置,而是清空整个access_log数组,让Envoy不再加载任何访问日志过滤器。修改后的EnvoyFilter配置如下:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: disable-accesslog spec: configPatches: - applyTo: NETWORK_FILTER match: listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" patch: operation: MERGE value: typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager" access_log: []
如果MERGE操作不生效(比如原配置中已有access_log条目无法被清空),可以改用REPLACE操作直接覆盖,注意保留HttpConnectionManager的其他必要配置(如路由规则、HTTP过滤器等):
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: disable-accesslog spec: configPatches: - applyTo: NETWORK_FILTER match: listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" patch: operation: REPLACE value: name: "envoy.filters.network.http_connection_manager" typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager" access_log: [] # 保留原配置中的route_config、http_filters等必要字段,避免破坏代理逻辑
验证
应用修改后的EnvoyFilter后,查看Envoy的配置或日志,确认访问日志已停止生成。
内容的提问来源于stack exchange,提问作者sca.
相关产品推荐
相关产品推荐

