我正在使用AWS NLB将我的Kubernetes Pod暴露到互联网。NLB当前使用的是instance
目标类型,但我注意到还有IP
目标类型。从实际的Angular 来看,instance
目标类型与IP
目标类型之间有什么区别?你什么时候会用一个而不是另一个?
AWS的文档指定了一些关于使用IP
目标类型的限制,即它们必须在某些CIDR和最大值的限制范围内,但我试图了解您何时可能希望使用其中一种。
我不知道它是否有任何影响,但我们在kubernetes rollingUpdate
部署中遇到了问题,我们看到Pod在切换时停机(我们在那里检查了liveness
和readiness
)。
3条答案
按热度按时间eaf3rand1#
使用IP目标类型的三个关键用例:
示例目标类型仅限有限示例。在对示例进行负载均衡时,它应该是您的默认选择。例如,如果您在自动伸缩组(ASG)中有示例,ASG会自动将您的示例注册到您的负载均衡。不能对IP目标类型执行此操作。
9rnv2umw2#
在**Amazon Conainer Network Interface(CNI)**的上下文中,节点上的每个弹性网络接口(弹性网络接口(弹性网络接口)都有一个可以支持多少次IP地址的范围。Pod从这个辅助IP地址范围中分配IP地址(这是CNI的工作)。
当该范围的辅助IP地址耗尽时(可能太多的pod或太易失的pod),CNI在节点上提供新的辅助ENI,该节点具有用于该pod的新范围的辅助IP地址(取决于EC2示例的类型,其具有对其可以支持的ENI的数量的限制)。
根据NLB请求路由。
如果使用示例ID指定目标,则流量将使用在示例的主网络接口中指定的主专用IP地址路由到示例。
所以现在对Pods密度有影响。也许滚动更新会发生这种情况,它超过了最大限制。
qjp7pelc3#
关于这方面的一些额外考虑。示例路由将转发到服务的NodePort,这意味着kubeproxy将接收请求并转发到pod。在我的默认配置中,它可以转发到另一个节点上的pod。这通常不是一个大问题。如果您正在处理大量数据,您可能不希望节点之间进行大量转发。此外,节点可以在另一AZ中(如果使用EKS和多个AZ);并且在跨越AZ边界的数据上将存在入口和出口费用。
另外,只是为了澄清上面所说的,如果你在EKS中使用IP路由;使用(最新)AWS负载均衡器控制器;它将保持NLB目标组如您所期望的那样使用POD IP进行更新。或者,如果执行示例路由,它将使用每个Node上的NodePort更新目标组。