【发布时间】: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