因此,在这种情况下,我希望能够在请求进入时重写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条目?
答案 0 :(得分:0)
我在这里遇到了同样的问题,尝试重写 :authority
标头不会触发新路由。
但是我意识到您可以将标头基本路由添加到 Envoy 路由规则,并让您的插件只添加这些标头。
无需弄乱 Envoy 的内部标头。