我有一个kubernetes集群,我有超过15个微服务在其中运行,每个REST API都会给我发送一个自定义的头,让我说";版本":"1.2.0";,我需要从每个RESTapi中检查这个版本,如果它与我的值不匹配,就会抛出一个自定义错误。
假设我有一个移动应用程序,并且我发布了该应用程序的新版本,并重新部署了微服务以匹配新应用程序,我想向使用旧应用程序下载新应用程序的用户抛出一个自定义错误,以继续使用该应用程序。
有没有一种方法可以使用ingress nginx或在kubernetes级别实现这一点,而不是在每个微服务中重复逻辑。
使用Nginx ingress
,如果请求来自外部,则可以将机密注入请求中,并将请求转发给服务
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header My-Custom-Header $http_my_custom_header;
由于您的所有微服务都在内部进行对话并基于自定义标头进行路由,因此您可以使用服务网格istio
例如:https://istio.io/latest/docs/tasks/traffic-management/request-routing/#route-基于用户身份
https://dwdraju.medium.com/simplified-header-based-routing-with-istio-for-http-grpc-traffic-ff9be55f83ca
ingress nginx支持将配置片段作为注释。
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($http_version != "1.2.0") {
return 418;
}
您可以将入口配置为捕获某些错误代码,以便默认后端应用程序接收这些请求,并可以构建自定义错误响应。请注意,这会捕获所有列出的错误代码。因此,不要使用应用程序其他部分可能使用的状态代码,也不要隐藏真正的错误响应。