pubsub.NewClient 方法卡在 GKE golang

Posted

技术标签:

【中文标题】pubsub.NewClient 方法卡在 GKE golang【英文标题】:pubsub.NewClient method stuck on GKE golang 【发布时间】:2018-03-19 00:56:52 【问题描述】:

我正在开发一个使用 Google Pub/Sub 客户端库的 golang 应用。我正在使用 Google 容器引擎进行部署。我按照以下步骤进行部署 -

    使用 CGO_ENABLED=0 GOOS=linux go build -o bin/app app.go 构建 golang 二进制文件 使用如下所示的 dockerfile 构建 docker 映像。 创建 Kubernetes 部署。

Dockerfile -

FROM scratch 
ADD bin/app /
CMD ["/app"]

应用程序启动正常,我可以看到一些初始调试日志。但是,当我尝试使用client, err := pubsub.NewClient(ctx, projectId) 实例化发布/订阅客户端时,方法调用永远不会返回。我没有看到此语句之后立即打印的日志消息。

我在 GKE 集群上启用了“Cloud Pub/Sub”权限。此外,该应用程序在我的本地计算机上运行没有任何问题。

可能是什么问题?

【问题讨论】:

永不返回?没有错? @MIkCode 是的,该函数永远不会返回。如果我在那一行之后写fmt.Println("here"),“这里”永远不会打印。没有错。 【参考方案1】:

好的,我终于找到了问题及其解决方案。我的图像不包含发布/订阅客户端(当然还有许多其他库)进行通信所需的任何 SSL 证书。

将我本地机器的 /etc/ssl/certs/ca-certificates.crt 文件添加到 docker 镜像的 /etc/ssl/certs/ 位置解决了这个问题。

codeship 的这个很棒的 post 是我学习这个解决方案的地方。

【讨论】:

非常感谢您解决这个问题 - 为我节省了几个小时!

以上是关于pubsub.NewClient 方法卡在 GKE golang的主要内容,如果未能解决你的问题,请参考以下文章

GKE 节点池状态卡在 PROVISIONING

PubSub Golang 客户端的高发布延迟

监控 GKE 上运行的 Cronjob

GKE:具有 3 个副本的 Pubsub 和 Pod 部署

将现有 GKE 集群添加到 terraform stat 文件

如何使用 GUI 工具安全地连接到 GKE 中的数据库?