使用负载均衡器真的很烦人,因为它们每小时都要花钱。我还没有每小时的钱,正在努力避免尽可能多的开销。这和你不能有一个超时超过30秒的TCP负载均衡器…
https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing
内部负载平衡使在同一网络上但在集群外部运行的应用程序可以访问集群的服务。例如,如果您在同一网络中的某些计算引擎VM实例旁边运行集群,并且您希望集群内部服务可供集群外部实例使用,则需要配置集群的一个服务资源以添加内部负载平衡器。
这正是我想要做的,但是使用IPtable和VM而不是内部负载均衡器。
如果没有内部负载平衡,则需要设置外部负载平衡器,创建防火墙规则来限制访问,并设置网络路由以使应用程序的IP地址可在集群外部访问。
除了最后一部分谈到网络路由之外,我可以做所有的事情。在阅读本文之前,我尝试制作一个NodePort并获得了一个内部IP地址。甚至无法ping它。我确保我没有在不同类型的服务上使用库伯内特斯留档的集群IP。
另请注意,我目前无意扩展我的资源,因此我只有1个节点,其中包含3个容器。
如何使用IP表将流量路由到NodePort服务?如果NotePort提供的地址不起作用,我应该使用IP地址?
kubernetes中的NodePort服务将在集群中的每个节点上公开一个端口。然后,公开的端口将向您的服务发送流量,然后该服务将向您的一个pod发送流量。以下内容摘自kubernetes网站。
如果您将“类型”字段设置为“NodePort”,库伯内特斯主机将从由--service-node-port-range标志(默认值:30000-32767)指定的范围内分配一个端口,每个节点将代理该端口(每个节点上的端口号相同)到您的“服务”中。
在这种情况下不需要IP表。但是,您需要确保您有防火墙规则,允许流量到达服务公开的端口上的kubernetes节点。
此配置的缺点是,如果您的节点IP发生更改(由于自动缩放、节点崩溃或实时迁移),您将需要更新目标IP。无论您是否使用iptables,此设置不会在更改时自动更新节点的正确IP。