如何将流量转发到特定的广告连播?

时间:2019-03-04 09:25:50

标签: kubernetes load-balancing nlb statefulset

我有一个在内存数据库中使用的应用程序。我使用带有3个副本的Pod创建了statefulset。用PVC来存储数据库相关文件。

我使用了Loabalancer来公开状态集。

因此,当流量每次转发到不同的Pod时都达到负载均衡器时。

无论如何,我是否可以根据某些条件(例如,如果客户端IP为X转到Pod Y)来控制Pod的负载平衡?

2 个答案:

答案 0 :(得分:3)

事实上,您具有领导者/跟随者拓扑,将流量定向到所述nome(主节点)的要求存在缺陷,其原因如下:

  1. 当前领导者故障转移并且有新的领导者时会发生什么 选择新领导人
  2. 豆荚短暂存在的事实 他们不应在生产中扮演主要角色,而要工作 与部署及其副本。您正在努力实现的目标 是反模式

无论如何,如果这是您想要的,也许您想阅读有关heregateways in istio

答案 1 :(得分:0)

您可以使用K8s入口资源来解决这种情况。我认为您要尝试的是基于主机的路由。 使用标签将您的广告连播置于其他服务的后面。在您的情况下,服务1落后1-100,服务2落后100-200,依此类推。然后创建一个入口资源,以根据主机或路径将传入流量重定向到其他服务,无论您需要什么。您可能必须使用像Nginx这样的代理才能在公共云平台上正常工作。 YAML清单将是这样的:

function weightedIntegerValues(weights, total) { let flooredValues = []; const weightSum = weights.reduce((sum, item) => { return sum + valueFunc(item); }, 0); let flooredSum = 0 weights.forEach((weight, i) => { const weighted = total * weight / weightSum const floored = Math.floor(weighted); flooredValues.push({ floored: floored, diff: weighted - floored, index: i }); flooredSum = flooredSum + flooredValues[i].floored; }); flooredValues = flooredValues.sort((a, b) => b.diff - a.diff); const difference = total - flooredSum; for (let i = 0; i < difference; i++) { flooredValues[i].floored += 1; } return flooredValues.sort((a, b) => a.index - b.index).map(v => v.floored); }