kube-proxy

时间:2015-08-20 15:36:54

标签: kubernetes reverse-proxy scalability kube-proxy

我在尝试kubernetes集群时遇到了可伸缩性问题。为了简化测试机器中的拓扑,NodePort类型用于在外部公开单个服务。承载节点和主机的裸机是RHEL 7,具有24个CPU和32G RAM;我还没有专用的负载均衡器,或者像基础设施这样的云提供商。服务定义的片段如下所示

    "spec": {       
         "ports": [{
             "port": 10443,             
             "targetPort": 10443,               
             "protocol": "TCP",                                
             "nodePort": 30443
    } ],
   "type": "NodePort",

通过这种方式,可以通过https://[node_machine]:30443/[a_service]

访问该应用程序

此类服务仅由一个Pod支持。理想情况下,我希望在同一节点上部署多个服务(但使用不同的NodePort),并同时运行。

事情进展顺利,直到很明显,对于类似的工作负载,增加部署的服务数量(因此也增加了后端pod)会使应用程序的性能下降。令人惊讶的是,在分解服务加载时间时,我注意到“连接时间”出现了急剧下降,这似乎表明“网络”层中某处出现了减速。请注意,负载不足以驱动节点上的大部分CPU。我在文档中读到了shortcomings,但不确定我所遇到的是否正是那里描述的kube-proxy / Service的限制。

问题是:

  1. 是否有任何关于如何使其更具可扩展性的建议?即能否支持更多服务/ Pod而不会影响应用程序的性能? NodePort类型是为我们的服务设置“公共”地址的最简单方法,但如果所有服务和Pod都以这种方式设置,那么可扩展性或性能是否有任何限制?

  2. 如果我们将类型更改为LoadBalancer会有什么不同吗? “type”:“LoadBalancer”

  3. 此外,使用专用的LoadBalancer或反向代理来提高可扩展性是有益的,例如: HAProxy或类似的,将流量从外部路由到后端Pod(或服务)?我注意到为Nginx darkgaro / kubernetes-reverseproxy做了一些工作 - 遗憾的是,doc似乎不完整,并且没有具体的例子。在其他一些线程中,人们谈论了Vulcan - 它是推荐的kubernetes LB工具吗?

  4. 非常感谢您的推荐和帮助!

2 个答案:

答案 0 :(得分:1)

您好kubernetes的新手,但我有类似的问题和疑虑。将尝试回答其中一些内容或将您重定向到用户指南的相关部分。

如果您在非云启用的提供程序(例如vagrant / local等)上部署Kubernetes,那么平台目前不会为您提供或自动执行某些功能。

其中一个是'LoadBalancer'类型的服务。自动提供和分配PUBLIC IP到服务(代理L.B)目前只在Google容器引擎等平台上发生。

请参阅问题herehere

官方文件说明

  

在支持外部负载均衡器的云提供商上,设置   “LoadBalancer”类型字段将为您提供负载均衡器   服务。

目前正在开发和记录替代方案,请参阅here使用HAProxy

也许在不久的将来,kubernetes最终将支持所有可以部署和运行的可用平台中的这种功能,因此请始终检查其更新的功能。

您所指的性能降级很可能是由于PublicIP(1.0版及更高版本的NodePort)功能正常运行。这意味着通过使用NodePort服务类型,kubernetes会在集群的所有节点上为这种服务分配一个端口。然后kube-proxy拦截对此端口的调用到实际服务等。

可以找到使用HaProxy尝试解决同一问题的示例here

希望有所帮助。

答案 1 :(得分:0)

我面临同样的问题。内部kube-proxy似乎不是外部负载均衡器。更具体地说,我们想在kube-proxy上设置一些超时或重试等等。

我发现this article描述了类似的问题。他建议在内部使用etd时查看vulcan,这个项目的方向可能是为将来为k8s提供功能齐全的LB.