在特使筛选器中重写权限

时间:2019-08-08 13:25:35

标签: routing istio envoyproxy

因此,在这种情况下,我希望能够在请求进入时重写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")

虚拟服务的设置类似于以下内容

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条目?

1 个答案:

答案 0 :(得分:0)

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