【问题标题】:Rewrite Authority in Envoy Filter重写 Envoy 过滤器中的权限
【发布时间】:2019-08-08 13:25:35
【问题描述】:

所以在这种情况下,我希望能够在请求进入时重写 Host 标头,以便它路由到在我重写的主机上侦听的 VirtualService。我有一个 Envoy 过滤器,其中包含以下代码。

serviceName = headers:get("x-service-name")
headers:add("X-Forwarded-Host", headers:get(":authority"))
headers:replace("host", serviceName .. ".company.local")
headers:replace(":authority", serviceName.. ".company.local")

还有一个类似于以下设置的 VirtualService

gateways:
- my-gateway
hosts:
- my-service.company.local
http:
....

但是,如果我尝试使用以下内容调用服务,我会收到来自 Istio 的 404 响应。

curl -H "X-Service-Name: my-service" http://ingress.company.com

我试图路由到的主机 (my-service.company.local) 实际上并不存在,而且 DNS 解析不会提供任何东西,我只是希望Istio 会在 VS 中看到主机并以这种方式引导流量,不是这样吗?

如果确实需要解析 DNS,我是否可以将 ServiceEntry 与将流量转发到正确的 Kubernetes 服务或其他东西的主机一起使用,这样我就不需要创建真正的 DNS 条目?

【问题讨论】:

  • 您要将 Envoy 过滤器应用到哪个 pod?如果虚拟服务指向的是一个 pod,那么为时已晚,因为请求可能没有到达该 pod 中的代理。您可能想尝试将过滤器应用于 Ingressgateway pod,但我不知道它会如何表现。
  • 你有没有想过如何做到这一点?我有一些 lua 正在做类似的事情;据我所知,这并没有改变 envoy 中的集群,这可能是问题所在。

标签: routing istio envoyproxy


【解决方案1】:

我在这里遇到了同样的问题,尝试重写 :authority 标头不会触发新路由。 但我意识到您可以将标头基础路由添加到 Envoy 路由规则,并让您的插件仅添加这些标头。 无需弄乱 Envoy 的内部标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 2021-05-18
    • 2014-03-24
    • 2018-09-09
    • 2016-10-10
    • 2020-11-16
    • 1970-01-01
    • 2019-10-19
    相关资源
    最近更新 更多