我使用https://console.cloud.google.com/launcher/details/bitnami-launchpad/redis-ha
创建了Redis实例,网络接口为:
我正在尝试从Firebase触发器连接到此Redis实例。
问题是:从云功能连接到计算实例需要什么防火墙规则?
请提供尽可能多的详细信息,例如IP范围,入口/出口等,以及是否必须将Redis客户端连接到内部IP或外部IP上的实例。
这是代码:
const redis = require('redis');
let redisInstance = redis.createClient({
/* surely external IP needn't be used
here as it's all GCP infra? */
host: '10.1.2.3',
port: 6379
})
redisInstance.on('connect', () => {
console.log(`connected`);
});
redisInstance.on('error', (err) => {
console.log(`Connection error ${err}`);
});
日志中的错误是
连接错误错误:Redis与10.1.2.3:6379的连接失败-连接ETIMEDOUT 10.1.2.3:6379
我看过Google Cloud Function cannot connect to Redis,但在设置规则时对选项的了解还不够具体。
我尝试使用以下设置来设置防火墙规则:
关于服务帐户的说明:
这条相同的防火墙规则已经生效了几个小时,我还重新部署了用于测试Redis的触发器,但仍然得到ETIMEDOUT
我打电话给GCP Gold支持人员,问题对于操作员来说并不明显,因此他们将开箱,调查并留下一些笔记。
使用许可的防火墙规则(源0.0.0.0/0
,目标“所有目标”)并连接到Redis实例的外部IP地址是可行的(当然!)。但是,我现在在电话中多次提到我不希望Redis实例可以向Internet开放,并且如果存在某种涉及网桥/ VPN的解决方案,那么我可以连接到10.x.x.x
云功能提供的地址。
接线员说,他们将在2天之内回复我。
我已经自我解答了it doesn't seem to be possible,以便通过云功能连接到Compute Engine内部IP。
答案 0 :(得分:3)
当前似乎无法从Google Cloud Funtions连接到Google Compute Engine内部IP,因此我(以及我的金牌支持运营商)所有的努力都徒劳无功。
答案 1 :(得分:1)
如the question you referred to所述,创建new firewall rule时,您将源过滤器字段从 IP范围更改为服务帐户。在接下来的步骤中,您无需指定任何IP,只需指定Cloud Functions服务帐户的名称即可。