我注意到群集中的每个节点都分配了一个外部IP。这似乎是Google Kubernetes Engine的默认行为。
我认为我的群集中的节点只能通过本地网络(通过其虚拟IP)访问,但我甚至可以通过连接到其托管节点直接连接到从家用计算机上运行的mongo服务器(不使用LoadBalancer)。
我尝试通过更改群集实例模板设置(更改属性"外部IP"从" Ephemeral"到&#34)使Container Engine不要将外部IP分配给新创建的节点;无&#34)。但是在我这样做之后,GCE无法启动任何pod(Got"没有最低可用性和#34;错误)。新实例甚至没有显示在我的集群中的节点列表中。
使用外部IP切换回默认实例模板后,一切都恢复正常。因此,Google Kubernetes Engine似乎需要群集节点公开。
您能解释一下为什么会这样,以及是否有办法阻止GKE将群集节点暴露给Internet?我应该设置防火墙吗?我应该使用什么规则(因为节点是动态创建的)?
我认为谷歌不允许私有节点是一种安全问题......假设有人在数据库管理系统上发现安全漏洞。如果我们的数据库节点没有暴露给互联网,我们会更加努力地修复(应用补丁,升级版本)。
答案 0 :(得分:2)
GKE最近添加了一项新功能,允许您创建private clusters,这些节点是节点没有公共IP地址的群集。
答案 1 :(得分:0)
这就是GKE的设计方式,我无法理解它。使用公共IP运行kubernetes节点没有坏处,如果这些是用于节点之间通信的IP,则无法避免。
至于您的安全问题,如果您在kubernetes上运行该示例数据库,即使您使用公共IP也无法访问,因为这只能在内部pod-to-pod网络上进行,而不是在节点上自我。
答案 2 :(得分:0)
如this article中所述,您可以使用网络标记来识别哪些GCE VM或GKE群集受某些防火墙规则和网络路由的约束。
例如,如果您已创建防火墙规则以允许流量到端口27017,27018,27019(这是MongoDB使用的默认TCP端口),请为所需实例提供标记,然后使用该标记应用防火墙规则允许这些端口访问这些实例。
此外,可以通过在新节点池中的所有节点上应用GCE标记来创建GKE集群,因此可以在防火墙规则中使用标记来允许/拒绝节点的期望/不期望的流量。 this article --tags
标记下的{{3}}中对此进行了描述。
答案 3 :(得分:0)
Kubernetes Master在网络外部运行,需要访问您的节点。这可能是拥有公共IP的原因。
创建群集时,会自动创建一些防火墙规则。这些是群集所必需的,例如来自主节点和集群节点之间的流量。
网络'默认'在GCP中有现成的防火墙规则。这些可以从Internet启用所有SSH和RDP流量,并启用对您的计算机的ping操作。这些可以在不影响群集的情况下删除,并且您的节点不再可见。