根据响应位置标头重写http请求 - Istio

问题描述 投票:1回答:1

描述:

通过virtual_service向上游请求Istio(1.0.6)代理。服务正在使用标头newuri响应,httpStatus代码即307 - 我知道重定向应该由设计302和位置标头工作。但我想根据http错误进行重定向处理。我尝试使用带有lua的envoyFilters,但所有功能都与流处理(请求/响应头mod)有关,而不是重写或请求转发。

所以请求路径如下所示:

  • 客户正在提出要求,即curl http://foo/path
  • 代理是向上游转发请求
  • 上游正在使用new_uri响应自定义标头,即http://blabla/path2作为值
  • 响应代理中存在头文件时对new_uri做了新请求
  • 客户看到来自new_uri的回复

谢谢

proxy kubernetes istio envoyproxy
1个回答
0
投票

如果您有预定义的上游主机列表,您可以考虑查看Envoy Retry plugin。此机制允许您确定可以与某些特定重试条件Hosts predicates相关联的retry_on列表:即,在特定的HTTP错误代码上;和重试系列num_retries的数量,因此在reattempts达到重试次数后,Envoy重试策略将从retry_host_predicate中定义的列表中选择下一个主机。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.