如何将流量从VM上的IP路由到Kubernete的NodePort?

时间:2018-07-17 07:21:32

标签: routing kubernetes google-cloud-platform google-compute-engine google-kubernetes-engine

使用负载均衡器真的很烦人,因为它们每小时要花钱。我还没有每小时的钱,并且正在努力避免尽可能多的开销。这样,您就无法拥有超时时间超过30秒的TCP负载平衡器...

https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing

  

内部负载平衡使群集的服务可访问   在同一网络上但在群集外部运行的应用程序。   例如,如果您在某些Compute Engine虚拟机旁边运行集群   同一网络中的实例,并且您希望内部使用群集   您需要集群外部实例可用的服务   配置群集的服务资源之一以添加   内部负载均衡器。

这正是我要执行的操作,但是要使用IPtables和VM,而不要使用内部负载平衡器。

  

如果没有内部负载平衡,则需要设置外部   负载均衡器,创建防火墙规则以限制访问权限并进行设置   网络路由以使应用程序的IP地址可访问   在集群之外。

除了讨论网络路由的最后一部分,我可以做所有事情。在阅读本文之前,我尝试制作一个NodePort并获得了一个内部IP地址。甚至无法ping通它。我确保我没有根据Kubernetes关于不同类型服务的文档使用ClusterIP。

还请注意,我目前不打算扩展资源,因此我只有1个节点,其中包含3个容器。

如何使用IP表将流量路由到NodePort服务?如果NotePort提供的IP地址不起作用,我该使用哪个IP地址?

1 个答案:

答案 0 :(得分:1)

kubernetes中的

NodePort服务将在集群中的每个节点上公开一个端口。然后,暴露的端口会将流量发送到您的服务,然后该服务会将流量发送到您的一个Pod。以下摘自the kubernetes website

如果将'type'字段设置为'NodePort',则Kubernetes主服务器将在--service-node-port-range标志指定的范围内分配端口(默认值:30000-32767),每个Node将将该端口(每个节点上的相同端口号)代理到您的“服务”中。

在这种情况下,不需要IP表。但是,您需要确保您具有防火墙规则,该规则允许在服务公开的端口上的kubernetes节点上进行通信。

此配置的缺点是,如果您的节点IP发生更改(由于自动缩放,节点崩溃或实时迁移),则需要更新目标IP。无论您是否使用iptables,此设置都会在更改时自动更新节点的正确IP。