1

我注意到集群中的每个节点都有一个分配给它的外部 IP。这似乎是 Google Kubernetes Engine 的默认行为。

我认为集群中的节点应该只能从本地网络访问(通过其虚拟 IP),但我什至可以通过连接到其托管节点(不使用负载均衡器)。

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

切换回具有外部 IP 的默认实例模板后,一切又恢复正常。因此,出于某种原因,Google Kubernetes Engine 似乎要求集群节点是公开的。

您能解释一下为什么会这样吗?是否有办法防止 GKE 将集群节点暴露在互联网上?我应该设置防火墙吗?我应该使用什么规则(因为节点是动态创建的)?

我认为谷歌不允许私有节点是一个安全问题......假设有人在数据库管理系统上发现了一个安全漏洞。如果我们的数据库节点没有暴露在 Internet 上,我们会更愿意修复它(应用补丁、升级版本)。

4

4 回答 4

2

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

于 2018-03-23T05:28:30.140 回答
0

这就是 GKE 的设计方式,我知道没有办法绕过它。使用公共 IP 运行 kubernetes 节点并没有什么坏处,如果这些是用于节点之间通信的 IP,则无法避免。

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

于 2018-02-27T19:44:07.977 回答
0

本文所述,您可以使用网络标签来识别哪些 GCE 虚拟机或 GKE 集群受某些防火墙规则和网络路由的约束。

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

此外,可以通过在新节点池中的所有节点上应用 GCE 标签来创建 GKE 集群,因此标签可以在防火墙规则中使用,以允许/拒绝到节点的所需/不受欢迎的流量。这在本文--tags的标志下进行了描述。

于 2018-03-01T03:33:04.017 回答
0

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

创建集群时,会自动创建一些防火墙规则。这些是集群所需要的,例如来自主节点的入口和集群节点之间的流量。

GCP 中的网络“默认”具有现成的防火墙规则。这些启用来自 Internet 的所有 SSH 和 RDP 流量,并启用您的计算机的 ping。您可以删除这些而不影响集群,并且您的节点不再可见。

于 2018-03-21T16:18:06.287 回答