规则:
图:
┌───────────────────────────────────────────────┐
│ │
│ usa-region-1 │
│ ┌───►/app-1/*│
│ │ │
┌───┼──► Load ──────► ┌── Ingress ────┤ │
│ │ Balancer │ Controller ├───►/app-2/*│
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ └───►/app-3/*│
│ │ │ │ │
│ │ │ │ │
│ │ │ └─Authentication │
User──────► Cloudflare ──────►│ │ │ Service │
Request │ │ │ │
│ └──────────────────┼────────────────────────────┘
│ │ *proxie the request*
│ ┌──────────────────┼────────────────────────────┐
│ │ │ │
│ │ europe-region-1 │ │
│ │ │ ┌───►/app-1/*│
│ │ │ │ │
└───┼──► Load ───────► └── Ingress ────┤ │
│ Balancer Controller ├───►/app-2/*│
│ │ │ │
│ │ │ │
│ │ └───►/app-3/*│
│ │ │
│ │ │
│ └─Authentication │
│ Service │
│ │
└───────────────────────────────────────────────┘
发布于 2022-07-17 14:10:10
本地数据存储需求
在一些市场中,可能有管理理由将用户的数据保存在其本国区域内。因此,如果一个欧洲用户已经旅行到美国,他们应该继续路由到欧洲服务器,他们的数据将留在欧洲。
基于报头的简单路由
首先,在每个HTTP请求中都需要一些内容,比如您提到的user_region
头。入口控制器是执行此操作的逻辑位置,而不是每个服务的逻辑位置。这是一个基于Traefik报头的路由示例。
入口控制器中的路由
如果您需要更复杂的逻辑,那么可以使用入口控制器的可扩展性特性或者放在API前面的专用API网关来编写插件。有关示例,请参见这个NGINX配置文件,它根据这个Lua插件设置目标主机名。
进一步信息
这些联系也可能令人感兴趣。特别要注意如何处理未经认证的请求,首先识别用户,然后将用户转移到他们的主区域,以便在那里进行身份验证。这可以允许用户的凭据只存储在他们的主区域。
发布于 2022-07-11 17:47:13
您所描述的通常被称为“全局服务器负载平衡”。虽然Traefik本身不支持这样的特性,但可以利用它与高级DNS提供程序一起提供Global负载平衡。
在实践中,您可能希望设置基于位置的DNS设置,以便将用户引用最近的“侵入控制器”,而不是在您的入口控制器之间重新路由。nginx的这篇文章详细介绍了如何将NS1作为DNS提供程序来设置全局服务器负载平衡,并可用于Trafik。
https://stackoverflow.com/questions/72915162
复制相似问题