Proxy 基于响应位置头重写http请求-Istio

Proxy 基于响应位置头重写http请求-Istio,proxy,kubernetes,istio,envoyproxy,Proxy,Kubernetes,Istio,Envoyproxy,说明: 通过虚拟_服务向上游的Istio(1.0.6)代理发出请求。服务使用头newuri和httpStatus代码ie 307进行响应-我知道重定向应该由designe使用302和location头进行工作。但是我想基于http错误进行重定向处理。 我尝试在lua中使用envoyFilters,但所有功能都与流处理(请求/响应头mod)相关,而不是重写或请求转发 因此,请求路径如下所示: 客户正在提出请求 代理正在向上游转发请求 上游使用自定义头响应,新的uri ie作为值 当响应中存在标头

说明:

通过虚拟_服务向上游的Istio(1.0.6)代理发出请求。服务使用头newuri和httpStatus代码ie 307进行响应-我知道重定向应该由designe使用302和location头进行工作。但是我想基于http错误进行重定向处理。 我尝试在lua中使用envoyFilters,但所有功能都与流处理(请求/响应头mod)相关,而不是重写或请求转发

因此,请求路径如下所示:

  • 客户正在提出请求
  • 代理正在向上游转发请求
  • 上游使用自定义头响应,新的uri ie作为值
  • 当响应中存在标头时,代理正在对新的\u uri执行新请求
  • 客户端查看来自新uri的响应

谢谢

< P>如果你有一个预定义的上游主机列表,你可以考虑看使者。此机制允许您确定一个列表,该列表可与某个特定的重试条件
retry\u on
:即特定的HTTP错误代码;和重试次数系列
num\u retries
,因此,在重新尝试达到重试次数后,特使重试策略将从
retry\u host\u predicate
中定义的列表中选择下一个主机

{
  "retry_on": "...",
  "num_retries": "{...}",
  "per_try_timeout": "{...}",
  "retry_priority": "{...}",
  "retry_host_predicate": [],
  "host_selection_retry_max_attempts": "...",
  "retriable_status_codes": []
}

在另一种情况下,当您的重定向主机事先未知时,最好找到一种方法,在应用程序级别应用适当的逻辑,因为大多数HTTP代理都是以同步执行响应处理程序的方式设计的,也就是说,当响应处理程序运行时,不会在同一线程中调度任何其他内容。只要响应处理程序只处理内存中已有的数据,而不等待远程服务,就可以了。但是,如果你从一个响应处理程序发出一个网络请求,整个线程将被阻塞,直到远程服务回复都不做任何事情,这将导致性能下降。

< P>如果你有一个预定义的上行主机列表,你可以考虑看使者。此机制允许您确定一个列表,该列表可与某个特定的重试条件
retry\u on
:即特定的HTTP错误代码;和重试次数系列
num\u retries
,因此,在重新尝试达到重试次数后,特使重试策略将从
retry\u host\u predicate
中定义的列表中选择下一个主机

{
  "retry_on": "...",
  "num_retries": "{...}",
  "per_try_timeout": "{...}",
  "retry_priority": "{...}",
  "retry_host_predicate": [],
  "host_selection_retry_max_attempts": "...",
  "retriable_status_codes": []
}

在另一种情况下,当您的重定向主机事先未知时,最好找到一种方法,在应用程序级别应用适当的逻辑,因为大多数HTTP代理都是以同步执行响应处理程序的方式设计的,也就是说,当响应处理程序运行时,不会在同一线程中调度任何其他内容。只要响应处理程序只处理内存中已有的数据,而不等待远程服务,就可以了。但是,如果您从响应处理程序发出网络请求,则整个线程将被阻止,并且在远程服务答复之前完全不执行任何操作,这将导致性能下降。

您好,感谢重播,但我发现我们有一些误解,我只想知道如何在istio代理(特使)上执行重定向水平。所以,若服务是对me 307的自动响应,istio将遵循“位置”标题并从“位置”发送给我响应,您好,谢谢重播,但我发现我们有一些误解,我只想知道如何在istio代理(特使)级别上遵循重定向。所以,若服务是对me的响应307,istio将自动跟随“位置”头并从“位置”向me发送响应