无法使用来自对等 VPC 网络的私有 IP 访问 Google 云 SQL
Can't access Google Cloud SQL with private IP from peered VPC network
步骤如下:
- 在 "Project A" 我有一个 "network A" 里面有 postgresql 私有 IP。
- 可以通过私有 IP 从同一 "network A" 中存在的 VM 访问 postgresql。
- 在相同的 "Project A"
中创建一个新的 "network B"
- 在 "network A" 和 "network B" 之间创建一个 "VPC network peer"
- 完全打开防火墙
- 无法从 "network B" 访问 postgresql,但可以 ping "network A"
上存在的 VM
为什么我无法访问 postgresql?是因为 SQL 私有 IP 处于 Beta 模式,还是我在这里遗漏了一些东西?
Cloud SQL 私有 IP 访问是通过对等互连设置的,因此网络 A 与包含您的 Cloud SQL 实例的网络 Z 对等互连。当您将 A 与 B 对等时,B 无法访问网络 Z。
是的,如之前的回复中所述,代理是可行的方法,因为对等互连不可传递。
从对等网络 "B" VM 访问网络 "A" 中的 SQL 代理会很简单。
至于从网络 "B" 中的 Kubernetes 集群访问,有一个可能的陷阱。默认情况下,Kubernetes 不会对发往 10.0.0.0/8 的流量进行 SNAT,并会尝试将其保留在本地。因此,您需要更改主机实例上的 iptables
规则才能到达外部。
永久解决方案是设置 DaemonSet
,但您可以先在主机上通过手动更改来测试这个理论。例如:
iptables -A POSTROUTING -d 10.11.0.0/24 \
-m addrtype ! --dst-type LOCAL -j MASQUERADE -t nat
这里有一个 link 非常简单的指南 https://blog.mrtrustor.net/post/iptables-kubernetes/。
步骤如下:
- 在 "Project A" 我有一个 "network A" 里面有 postgresql 私有 IP。
- 可以通过私有 IP 从同一 "network A" 中存在的 VM 访问 postgresql。
- 在相同的 "Project A" 中创建一个新的 "network B"
- 在 "network A" 和 "network B" 之间创建一个 "VPC network peer"
- 完全打开防火墙
- 无法从 "network B" 访问 postgresql,但可以 ping "network A" 上存在的 VM
为什么我无法访问 postgresql?是因为 SQL 私有 IP 处于 Beta 模式,还是我在这里遗漏了一些东西?
Cloud SQL 私有 IP 访问是通过对等互连设置的,因此网络 A 与包含您的 Cloud SQL 实例的网络 Z 对等互连。当您将 A 与 B 对等时,B 无法访问网络 Z。
是的,如之前的回复中所述,代理是可行的方法,因为对等互连不可传递。
从对等网络 "B" VM 访问网络 "A" 中的 SQL 代理会很简单。
至于从网络 "B" 中的 Kubernetes 集群访问,有一个可能的陷阱。默认情况下,Kubernetes 不会对发往 10.0.0.0/8 的流量进行 SNAT,并会尝试将其保留在本地。因此,您需要更改主机实例上的 iptables
规则才能到达外部。
永久解决方案是设置 DaemonSet
,但您可以先在主机上通过手动更改来测试这个理论。例如:
iptables -A POSTROUTING -d 10.11.0.0/24 \
-m addrtype ! --dst-type LOCAL -j MASQUERADE -t nat
这里有一个 link 非常简单的指南 https://blog.mrtrustor.net/post/iptables-kubernetes/。