在Compute Engine内部IP上连接到Redis时,Google Cloud功能超时

时间:2018-06-21 12:42:40

标签: firebase redis google-cloud-platform google-cloud-functions

我使用https://console.cloud.google.com/launcher/details/bitnami-launchpad/redis-ha

创建了Redis实例

,网络接口为:

enter image description here

我正在尝试从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,但在设置规则时对选项的了解还不够具体。

我尝试过的

我尝试使用以下设置来设置防火墙规则:

  • ingress
  • 网络:默认
  • 源过滤器:我的Firebase服务帐户
  • 协议/端口:全部
  • 目标:全部

关于服务帐户的说明:

  • 由Firebase创建
  • 在IAM中具有 Editor 角色
  • 从我的Firebase触发器中可以与BigQuery和其他Firebase服务一起使用

这条相同的防火墙规则已经生效了几个小时,我还重新部署了用于测试Redis的触发器,但仍然得到ETIMEDOUT

enter image description here

更新

2018-06-25上午

我打电话给GCP Gold支持人员,问题对于操作员来说并不明显,因此他们将开箱,调查并留下一些笔记。

2018-06-25下午

使用许可的防火墙规则(源0.0.0.0/0,目标“所有目标”)并连接到Redis实例的外部IP地址是可行的(当然!)。但是,我现在在电话中多次提到我不希望Redis实例可以向Internet开放,并且如果存在某种涉及网桥/ VPN的解决方案,那么我可以连接到10.x.x.x云功能提供的地址。

接线员说,他们将在2天之内回复我。

2018-06-25下午晚些时候

我已经自我解答了it doesn't seem to be possible,以便通过云功能连接到Compute Engine内部IP。

2 个答案:

答案 0 :(得分:3)

当前似乎无法从Google Cloud Funtions连接到Google Compute Engine内部IP,因此我(以及我的金牌支持运营商)所有的努力都徒劳无功。

这是(公开)问题:https://issuetracker.google.com/issues/36859738

答案 1 :(得分:1)

the question you referred to所述,创建new firewall rule时,您将源过滤器字段从 IP范围更改为服务帐户。在接下来的步骤中,您无需指定任何IP,只需指定Cloud Functions服务帐户的名称即可。