谷歌发布订阅。从 AppEngine 到 Kubernetes pod 以及从一个 Kubernetes pod 到另一个 Kubernetes pod 的通信

Posted

技术标签:

【中文标题】谷歌发布订阅。从 AppEngine 到 Kubernetes pod 以及从一个 Kubernetes pod 到另一个 Kubernetes pod 的通信【英文标题】:Google PubSub. Communication From AppEngine to Kubernetes pod and from one Kubernetes pod to another Kubernetes pod 【发布时间】:2020-08-12 18:35:18 【问题描述】:

在这两种情况下如何发送和接收消息?

我们正在将我们的应用从 appengine 迁移到 kubernetes。我们有两个以这种方式分布的微服务:

开发环境

服务 1:在 Kubernetes pod(名为 1 的集群)上运行。它在 AppEngine 上运行 服务 2:在 Kubernetes pod(名为 1 的集群)上运行。它在 AppEngine 上运行

问题是服务 1 不断向 AppEngine 上的服务 2 发送 pubsub 消息。它应该向运行在 Kubernetes 上的服务 2 发送 pubsub 消息

生产环境

服务 1:在 AppEngine 上运行,但很快它将在 Kubernetes pod(名为 1 的集群) 服务 2:在 AppEngine 上运行,但很快它将在 Kubernetes pod(名为 1 的集群)

在生产环境中,现在服务 1 和 2 通过 pubsub 进行通信。将生产环境中的两种服务迁移到 Kubernetes pod 的最佳方式是哪种(以及以什么顺序)?

我正在考虑将服务 1 和 2 同时移动到 Kubernetes 并开始使用 http rest 在它们之间发送和接收消息(这意味着停止使用 Google PubSub),但我不确定。我看到的另一个问题是推送端点需要 https,而我的 kubernetes 服务的外部 ip 是 http

【问题讨论】:

【参考方案1】:

解决办法是:

1) 将 pubsub 订阅更改为 pull 类型

2) 创建服务帐号凭据

3) 适配的服务代码(现在在 Kubernetes 中运行),以便它实际拉取 pubsub 消息

【讨论】:

【参考方案2】:

PubSub 消息被发送到一个主题。该主题的每个侦听器(例如 GAE 服务 2 和 k8s 服务 2)都会收到发送的消息。

如果您想根据来源(GAE 和 k8s)区分消息,最简单的方法是创建另一个主题。并且只在 k8s 服务中配置这个新主题。

但是,如果服务也这样做,我看不出共享 pubsub 主题可能是什么问题。

【讨论】:

感谢您的回答。问题是我没有看到 k8s 服务 2 接收 pubsub 消息 啊,好的。这个tutorial 在Kubernetes 中为主题echo 设置了一个回显服务。在代码 main.py here 上,您可以将主题名称更改为您的主题名称以测试连接。 谢谢,但我看到的另一个问题是推送端点需要 https,而我的 kubernetes 服务的外部 IP 是 http

以上是关于谷歌发布订阅。从 AppEngine 到 Kubernetes pod 以及从一个 Kubernetes pod 到另一个 Kubernetes pod 的通信的主要内容,如果未能解决你的问题,请参考以下文章

将数据从谷歌数据存储复制到 CSV

谷歌 AppEngine 数据库

谷歌 Appengine 数据存储 - python

在谷歌应用引擎中将数据流式传输到 bigquery - java

Google PubSub:使用 AppEngine 推送端点订阅时出现 SSL 错误

谷歌 PubSub 存在拉式订阅者设计缺陷?