我可以直接拨打Kubernetes外面的吊舱吗?

时间:2016-04-22 17:08:28

标签: kubernetes

我正在尝试将现有应用程序转换为Kubernetes,其工作方式如下:

  • 外部服务通过带有新会话的负载均衡器调用我们的应用程序。
  • 我们的应用程序返回处理请求的服务器的IP。
  • 来自该服务的外部服务的所有后续调用都直接发送到同一服务器(绕过负载均衡器)

在kubernetes有没有办法做到这一点?我知道pod ip不是外部暴露的,有没有办法直接暴露它们?

另外,我认为我不能使用sessionAffinity =“ClientIP”,因为请求都将来自同一个地方。有没有办法编写自定义sessionAffinity类型?

1 个答案:

答案 0 :(得分:1)

这取决于您的网络设置方式以及“外部服务”的含义,但答案很可能是“不”。

如果您在云环境中使用其中一个默认群集创建脚本运行,则无法从Internet路由pod IP地址,因此任何与群集不在同一专用网络中的服务将无法通话直接到豆荚。

但是,根据您所使用的云提供商,您可能会通过继续拨打service of type LoadBalancer的外部IP来获得您想要的行为。例如,在Google云平台上,cloud load balancer that gets created for such services by default maintains connection affinity by 5-tuple(src ip和port,dst ip和port,L4协议)听起来就像你想要的那样,因为你想要平衡每个会话而不是每个IP。 / p>

至于创建一个新的sessionAffinity类型,这不是一件容易扩展的事情,因为它需要更改Kubernetes源代码。如果这确实是您想要采用的路径,那么您可能希望在群集中运行自己的负载均衡器,而不是依赖于内置的负载均衡。