我正在尝试实现一个基于无头服务的自定义负载均衡器。我发现(目前)有效的是以下设置:
客户端调用负载均衡器,负载均衡器调用无头服务来检查可用的 Pod。负载均衡器选择一个 Pod 并调用它。
这很好,但这意味着 LB 也将成为代理,我想避免这种情况。我尝试过 redirect 但随后 ip:port 地址返回给客户端 - 并且 pod 显然无法从集群外部访问(我也尝试过简单的入口)。
你们有没有任何提示、技巧和窍门如何做这样的事情?
谢谢! 马特乌斯
在使用 Kubernetes 一段时间后,我设法利用无头服务和自定义代理,但我自己没有完全实现:)
对于我们的自定义负载平衡/代理逻辑,我们决定并检查了 API 网关项目(Spring),它恰好为我们做代理和转发!我们唯一配置的是动态路由。示例:
@Bean
public RouteLocator workerRoutingService(RouteLocatorBuilder builder) {
var routes = builder.routes();
routes.route(r -> r
.path("/api/worker/{resourceId}")
.filters(f -> f.changeRequestUri(exchange -> {
String resourceId = ServerWebExchangeUtils.getUriTemplateVariables(exchange).get("resourceId");
return workerService.getWorkerEndpointByResource(resourceId);
}))
.uri("http://fallback/")
);
return routes.build();
}