Google Compute Engine - 如何允许(仅)其他项目实例进行访问?

Google Compute Engine - How to allow access from (only) other project instances?

使用 Google Compute Engine,如何创建防火墙规则以便只允许同一项目中的实例访问?应该允许从其他集群(在同一项目中)访问。

场景是允许 GKE 集群访问 运行 在 GCE 实例上的 RethinkDB 数据库服务器集群。

"So that only instances within the same project are allowed access" 到什么?

我假设您不是指访问集群的 apiserver,因为该 IP 应该已经可以从您的所有实例访问。

如果你的意思是从集群外的实例访问集群中的容器,你可以创建一个防火墙规则来更宽松地允许 GCE 网络内的流量。执行此操作时,您可以非常宽容或更细粒度:

  1. 非常宽松 - 只需创建一个防火墙规则,允许来自源 IP 范围 10.0.0.0/8 的流量到您网络中的所有实例(不要添加任何 "target tags")您关心的所有协议和端口(例如 tcp:1-65535,udp:1-65535,icmp)。 10.0.0.0/8 范围将涵盖您网络中的所有实例和容器(不包括网络之外的任何内容)。

  2. 每个集群单独的防火墙 - 做与第一个相同的事情,但添加集群中所有节点上的目标标记。您可以通过查看其中一个实例的标签或查看 GKE 在创建集群时为您的集群创建的防火墙上的目标标签来获取此信息。这种方法的好处是它可以让您网络中的所有内容都与您的集群通信,而不会暴露网络中您不想公开的任何其他内容。

如果你的意思是从集群外部访问服务,那么它有点困难,因为你需要 运行 集群外部实例上的 kube-proxy 并将其配置为与集群的 apiserver 通信以便正确路由服务数据包。

原来问题出在我通过外部 IP 访问 RethinkDB 实例。出于某种原因,这会导致具有内部源 IP 的防火墙规则不匹配。解决方案是通过内部 DNS 名称访问实例,在这种情况下应用防火墙规则。

此外,已经有一个默认的防火墙规则,default-allow-internal,它允许同一项目中实例之间的任何流量。因此我不需要创建自己的规则。