Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Google Kubernetes引擎上使集群节点私有?_Kubernetes_Google Kubernetes Engine_Gke Networking - Fatal编程技术网

如何在Google Kubernetes引擎上使集群节点私有?

如何在Google Kubernetes引擎上使集群节点私有?,kubernetes,google-kubernetes-engine,gke-networking,Kubernetes,Google Kubernetes Engine,Gke Networking,我注意到集群中的每个节点都分配了一个外部IP。这似乎是谷歌Kubernetes引擎的默认行为 我认为集群中的节点应该只能从本地网络(通过其虚拟IP)访问,但我甚至可以通过连接到主机节点(无需使用负载平衡器)直接从家用计算机连接到运行在pod上的mongo服务器 我试图通过更改集群实例模板设置(将属性“external IP”从“Ephemeral”更改为“None”)使容器引擎不将外部IP分配给新创建的节点。但在我这样做之后,GCE无法启动任何POD(出现“没有最低可用性”错误)。新实例甚至没有

我注意到集群中的每个节点都分配了一个外部IP。这似乎是谷歌Kubernetes引擎的默认行为

我认为集群中的节点应该只能从本地网络(通过其虚拟IP)访问,但我甚至可以通过连接到主机节点(无需使用负载平衡器)直接从家用计算机连接到运行在pod上的mongo服务器

我试图通过更改集群实例模板设置(将属性“external IP”从“Ephemeral”更改为“None”)使容器引擎不将外部IP分配给新创建的节点。但在我这样做之后,GCE无法启动任何POD(出现“没有最低可用性”错误)。新实例甚至没有显示在集群中的节点列表中

切换回带有外部IP的默认实例模板后,一切又恢复正常。因此,出于某种原因,谷歌Kubernetes引擎要求集群节点是公共的

您能否解释一下原因,以及是否有办法防止GKE将集群节点暴露到Internet上?我应该设置防火墙吗?我应该使用什么规则(因为节点是动态创建的)


我认为谷歌不允许私有节点是一种安全问题。。。假设有人发现数据库管理系统上存在安全漏洞。如果我们的数据库节点不暴露在互联网上,我们会觉得修复它(应用补丁、升级版本)会舒服得多。

GKE就是这样设计的,我知道没有办法解决它。使用公共IP运行kubernetes节点没有害处,如果这些IP用于节点之间的通信,则无法避免

至于您的安全问题,如果您在kubernetes上运行该示例DB,即使您使用公共IP,它也无法访问,因为这将仅在内部pod-to-pod网络上,而不是节点本身。

如中所述,您可以使用网络标记来标识哪些GCE VM或GKE群集受某些防火墙规则和网络路由的约束

例如,如果您已创建防火墙规则,以允许流量访问端口27017、27018、27019(MongoDB使用的默认TCP端口),请为所需实例提供一个标记,然后使用该标记应用允许这些端口访问这些实例的防火墙规则


此外,还可以通过在新节点池中的所有节点上应用GCE标记来创建GKE集群,因此可以在防火墙规则中使用这些标记来允许/拒绝向节点发送所需/不需要的流量。这在
--tags
标志下进行了描述。

Kubernetes Master正在您的网络外部运行,需要访问您的节点。这可能是拥有公共IP的原因

创建集群时,会自动创建一些防火墙规则。这些都是集群所需要的,例如,从主节点进入和集群节点之间的通信


GCP中的网络“默认”具有现成的防火墙规则。这些支持来自internet的所有SSH和RDP通信,并支持对您的计算机进行ping。您可以在不影响集群的情况下删除这些节点,并且您的节点不再可见。

GKE最近添加了一项新功能,允许您创建节点没有公共IP地址的集群

谢谢,拉德克。节点上的应用程序之间的通信使用专用(虚拟)IP。关于公共IP有害的问题,请看一下我在问题中添加的最后一段。恐怕我不同意你上一段的说法,因为我实际上可以通过输入kubernetes节点的公共IP和运行它的端口,从我的计算机连接到运行在kubernetes上的mongodb服务器。然后你有一些严重的错误配置(或明确配置)来达到这一效果-一个想法是使用
hostNetwork:true
。让我问你一个简单的问题:如果你写的确实是这样,如果yu在一个节点上启动了10个pod,所有这些pod都在端口80上运行nginx(这很正常),那么你会在节点ip:80上访问哪一个?正确的答案是没有。@Radek'Goblin'Pieczonka检查这个!