我正在寻找将应用程序部署到GCP的最佳方式。该应用程序需要使用微服务(运行在Cloud Run或Cloud Function上(在远程数据库上执行SQL代码。
基本上,微服务收到一段SQL代码,需要在远程数据库上执行。出于安全原因,远程数据库必须将应用程序用于连接的IP地址列入白名单。
在GCP上,拥有一个固定的公共IP地址的最佳方式是什么,一个遥远的DB可以将其列入白名单?考虑到我想使用Cloud Run或Cloud Function。
注意:我知道使用GKE的解决方案。或者在AWS上,使用Lambda+NAT实例。
谢谢!
您有几种解决方案可以实现此
- 在GKE上使用Cloud Run。在这种情况下,你的虚拟机在你的专有网络上,你知道他们的IP。但是,如果VM重新启动,您会有几个公共IP和IP更改。好的模式是将公共IP移除到VM,并部署一个Cloud Nat,用于将所有出口流量映射到单个外部(和公共(IP
- 使用Cloud函数。在这种情况下,您必须添加一个附加组件:Serverless VPC Access。该组件允许路由源自无服务器组件的流量(全部或仅专用目的地IP(。因此,您的请求通过这个元素并进入您的专有网络。然后,像以前一样,配置一个Cloud Nat,用于将外部IP映射为静态和公共IP
无服务器VPC访问与AppEngine和Cloud Function配合使用。Cloud Run应该在2020年遵守它。
最后一种选择:在这两种情况下,我们都使用Cloud Nat在带有静态IP的公共互联网上运行。你可以想象在你的专有网络和On Prem网络(你的数据库所在地(之间建立一个VPN,这样,你就没有白名单了,所有的通信都在同一个虚拟专用网络内
还有另一个选项,但有点棘手。您可以保留一个外部IP地址并配置一个外部HTTP(S(负载均衡器。
您需要执行以下几个步骤:
- 保留一个外部静态IP地址
- 创建Google管理的SSL证书或提供您的SSL证书
- 创建无服务器网络终结点组。负载平衡器将使用此无服务器NEG将请求定向到无服务器云运行服务重要:您的无服务器NEG和云运行服务必须位于同一区域
- 创建后端服务(例如,部署到Cloud Run的web应用程序(
- 将无服务器NEG作为后端添加到后端服务
- 创建URL映射以将请求路由到后端服务。如果您有多个后端服务,则可以使用主机规则根据主机名将请求定向到不同的服务,还可以设置路径匹配器根据请求路径将请求定向至不同的服务
- 创建HTTPS目标代理。此代理将传入请求路由到您的URL映射
- 创建全局转发规则,将所有HTTPS流量转发到HTTPS目标代理
- 将您的域连接到负载平衡器。添加一个或多个指向负载平衡器IP地址的A记录(并等待DNS传播(
- 使用Cloud Armor配置安全策略
多亏了Cloud Armor,您可以在网络边缘配置拒绝/允许规则(如IP白名单/黑名单(。
另请参阅codelab Cloud Armor NamedIP列表。