我有一个作为 Compute Engine VM 运行的 DB 服务器和一个在 Cloud Run 上运行的 API。两者都属于同一个项目。我希望 DB VM 只能从 Cloud Run 代码访问。
起初我以为这应该可以工作,因为防火墙有一个“默认允许内部”规则,应该适用于项目中的每台机器。但是我仍然遇到连接失败的问题。
然后我尝试添加一条新的入口规则,该规则针对服务帐户并允许来自服务帐户的连接。这也不起作用。
我修改了规则以允许来自我的个人 IP 的连接,只是为了确认 DB VM 正在运行、我的防火墙规则正常运行,并且一切都按预期运行。
最后,我研究了通过“源标签”进行过滤,但该选项不可选,而且我似乎无法将源标签添加到 Cloud Run 实例。
我是否可以实现限制对 DB VM 的访问以仅允许来自 Cloud Run 机器的传入连接的目标?
答案1
您可以配置无服务器 VPC 访问以将 Cloud Run 与 Compute Engine VM 连接起来,更新于 2020 年 9 月。 https://cloud.google.com/vpc/docs/configure-serverless-vpc-access
答案2
Cloud Run(全托管)服务没有获取静态 IP可以将其列入白名单。此外,请查看文档尚不支持的服务:
下表列出了 Cloud Run(完全托管)尚不支持的服务。请注意,Google Cloud 上的 Cloud Run for Anthos 可以使用 Google Kubernetes Engine 可以使用的任何服务。
因此,正如您所看到的,没有简单的方法可以连接在 Cloud Run(完全托管)和您的 VPC 网络上运行的服务和。
在 Cloud Run(完全托管)中为您的服务获取外部 IP 的一些解决方法:
通过运行 ssh 客户端创建 SOCKS 代理,该客户端将流量路由到具有静态外部 IP 地址的 GCE VM 实例,如下所示例子
通过具有静态 IP 的代理从 Cloud Run(完全托管)发送出站请求,以下是 Python 中的示例:
import requests
import sys
from flask import Flask
import os
app = Flask(__name__)
@app.route("/")
def hello():
proxy = os.environ.get('PROXY')
proxyDict = {
"http": proxy,
"https": proxy
}
r = requests.get('http://ifconfig.me/ip', proxies=proxyDict)
return 'You connected from IP address: ' + r.text
使用PROXY
包含代理的 IP 或 URL 的环境变量(请参阅此处设置环境变量)
对于此代理,您可以:
编辑查看 Google 公共问题跟踪器功能要求欢迎随时加入、评论和跟踪进度。