访问appengine flex实例上的公开端口

时间:2017-04-09 12:17:01

标签: google-app-engine

如何访问appengine flex实例上的公开端口?作为一个例子,我尝试在手动缩放的1实例项目上设置redis。我知道由于重启等原因,gae flex对redis来说并不合理,但我以此为例。

Dockerfile:

FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]

的app.yaml:

runtime: custom
env: flex
service: redis
manual_scaling:
  instances: 1
network:
  forwarded_ports:
    - 6379
health_check:
  enable_health_check: False

Docker镜像在本地运行良好。 部署工作正常,根据日志,似乎启动了redis服务器。 我现在希望能够通过redis-cli通过

访问已部署的redis服务器
redis-cli -g <instanceid>-dot-<versionid>-dot-redis-<myproject>.appspot.com ping

但没有。不是来自外部,也不是来自项目内部(通过nodejs / redis)。较短的版本,没有instanceid或versionid也不起作用。

对于较短版本的网址,命令只会挂起。对于完整的URL,我得到“无法连接到Redis at ... nodename或servname提供,或者不知道”

我的端口转发配置错了吗? url格式应该根据https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed

工作

我可以使用错误的instanceid吗?我使用控制台所说的id(也是日志中显示的内容)

1 个答案:

答案 0 :(得分:2)

我在App Engine上工作。您真的不想使用App Engine尝试运行像redis这样的东西。 App Engine实际上是用于无状态HTTP服务。你应该避免这种情况有几个原因:

  • 我们不提供第3层或第4层负载平衡。今天所有App Engine负载平衡都是第7层,这意味着您只能获得HTTP(S)。
  • 请求是负载平衡的,因为我们可以随时关闭实例。您不能依赖实例的生命周期,因为我们会重新启动它们以进行修补,维护或缩小事件。
  • 没有L3负载平衡,并且专注于各个实例的负载均衡服务 - 我们不提供解决单个实例的方法。今天,每个实例获得一个短暂的公共IP,但在未来可能实际上会改变(到NAT)。

TL; DR:App Engine不太适合这种事情。我会考虑使用Redis Labs或使用redis image in the launcher