Anthos Service Mesh中部署GCP Auth Envoy Filter失败求助
关于Anthos Service Mesh中GCP Auth Filter部署问题的解答
问题背景
- 尝试部署GCP Auth Filter,该过滤器官方说明在Envoy 1.22版本中可用
- 当前使用Anthos Service Mesh(ASM)1.14,其基于Envoy 1.22,已通过以下命令验证Envoy版本:
输出:kubectl exec -it mypod -c istio-proxy -- pilot-agent request GET server_info --log_as_json | jq {version}{ "version": "70cf007ae0dcec3e226544e16af578d3b980f29f/1.22.2/Modified/RELEASE/BoringSSL-FIPS" } - 编写的EnvoyFilter配置如下:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: filter-gcp spec: workloadSelector: # 按同namespace内的标签选择工作负载 labels: istio: ingressgateway configPatches: # 要修改的Envoy配置 - applyTo: HTTP_FILTER match: context: GATEWAY listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" subFilter: name: "envoy.filters.http.router" patch: operation: INSERT_BEFORE value: name: envoy.filters.http.gcp_authn typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.GcpAuthnFilterConfig http_uri: uri: http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=[AUDIENCE] cluster: metadata timeout: 10ms - Ingress Gateway日志出现以下错误:
[libprotobuf WARNING external/com_google_protobuf/src/google/protobuf/text_format.cc:2139] Can't print proto content: proto type type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.GcpAuthnFilterConfig not found [libprotobuf WARNING external/com_google_protobuf/src/google/protobuf/text_format.cc:2139] Can't print proto content: proto type type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.GcpAuthnFilterConfig not found 2022-08-09T08:05:21.513377Z warning envoy config gRPC config for type.googleapis.com/envoy.config.listener.v3.Listener rejected: Error adding/updating listener(s) 0.0.0.0_80: Didn't find a registered implementation for name: 'envoy.filters.http.gcp_authn' - 用户疑问:该过滤器是否受ASM支持?配置是否有误?或是ASM定制的Envoy版本未包含该过滤器?
解答
1. 过滤器是否受ASM支持?
ASM并非包含Envoy的所有原生扩展过滤器。GCP Auth Filter属于Envoy官方扩展组件,但ASM为了保持服务网格的稳定性、适配GCP生态的特定需求,默认并未预装该过滤器。即使底层Envoy版本满足要求(1.22+),ASM也会裁剪部分非核心扩展。
2. 是否配置有误?
从配置语法看,整体结构符合EnvoyFilter插入HTTP过滤器的规范,但存在两个潜在细节问题:
metadata集群是否存在:需要确认Istio/ASM默认是否预配置了指向metadata.google.internal的metadata集群,若不存在需额外添加集群配置的patch。- Proto类型匹配:错误日志提示找不到指定的proto类型,一方面是因为过滤器未被编译进ASM的Envoy二进制,另一方面也可确认proto版本是否与ASM的Envoy版本匹配(v3版本是正确的,但ASM可能使用了不同的proto包路径)。
不过核心问题并非配置语法错误,而是过滤器未被ASM的Envoy包含。
3. ASM的Envoy是否未包含该过滤器?
是的,从错误日志Didn't find a registered implementation for name: 'envoy.filters.http.gcp_authn'可以明确判断:ASM提供的Envoy二进制中未编译并注册该过滤器。ASM的Envoy是Google定制版本,仅集成与GCP服务、Istio核心功能强相关的过滤器,原生Envoy的部分扩展会被排除。
替代方案
若需在ASM中实现类似GCP Auth Filter的功能,可考虑:
- 使用ASM原生身份认证机制,集成Google Cloud IAP(身份感知代理)作为入口认证
- 自定义EnvoyFilter,使用JWT过滤器配合GCP OIDC服务实现认证逻辑
- 若必须使用GCP Auth Filter,需自行构建包含该过滤器的定制化Envoy镜像并替换ASM代理镜像(此方法需维护自定义镜像,且可能失去ASM官方支持)
内容的提问来源于stack exchange,提问作者user140547
相关产品推荐
相关产品推荐

