Envoy 过滤器仅应用于对外部负载均衡器的调用,而不应用于特定服务的入站入口流量

Envoy Filter is only getting applied on calls to External Load Balancer but not on Traffic to inbound ingress for Specific Service

我有一个 K8s 集群,使用以下命令公开了它的地址:kubectl get svc istio-ingressgateway -n istio-system -> 让我们假设地址是 a467.kongz.com

我的集群中有一个 Envoy 过滤器,它利用 ExtAuth 并将额外的 header Is-Kong-Verified 附加到响应 headers 考虑与此类似的东西 -> ()

现在,当我对 -> curl -v a467.kongz.com/stream/1 进行 API 调用时 这到达外部验证系统并且响应 header 附加了 Is-Kong-Verified 然后最终到达上游服务 Kong Stream Service Pod(/stream/1)

现在,当我调用 Kong Stream Service 时,它作为 https://stream.kongz.com/stream/1 通过 Ingress 公开给 Public,请求没有被选择由 Envoy 过滤器向上但到达最终服务。

最终目标

需要Envoy过滤器应用于集群内的所有传入请求,即使直接请求服务

注意:目标 Service/deployment 已注入 Istio-Sidecar

我查了一些文档,意识到应该有一个像Ambassador,Nginx这样的网关服务作为服务的代理。因此,当 client/user 调用 Nginx 代理时,它会将流量路由到 ALB 或集群地址,然后通过 Envoy 过滤器,然后到达上游服务。

是否可以在没有任何代理系统(nginx、ambassdor)的情况下实现最终目标,还是我遗漏了什么?

提前感谢您的回答。

终于,我找到了查询的解决方案

与以下文档中的 spec.configPatches.context=GATEWAY 配置相比

应该改为spec.configPatches.context=SIDECARD_INBOUND 并且工作负载选择器需要更改为与任何命名空间

下的目标pods匹配的标签

使用以下文档获取更多上下文 https://istio.io/latest/docs/reference/config/networking/envoy-filter/#EnvoyFilter-PatchContext

现在这将允许 API 通过 Envoy 过滤器拦截的 Ingress 调用特定服务

确保 Pods 具有与工作负载选择器匹配的标签 spec.workloadSelector.labels 例如,它应该类似于下面的

spec:
  workloadSelector:
    labels:
      externalAuth: enabled

并且您的 Pod 具有标签 externalAuth: enabled