为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Kubernetes 中连接后greSQL

无法在 Kubernetes 中连接后greSQL

Go
缥缈止盈 2022-09-19 10:18:56
我正在使用库伯内特斯。我有两个豆荚。在一个容器中,它正在运行一台服务器。这是尝试在另一个容器中连接PostgreSQL服务的代码部分。import (    "context"    "github.com/jackc/pgx/v4/pgxpool"    "github.com/rs/zerolog/log")databaseURL := "postgres://admin:passw0rd@my-database-service.hm:40072/my_db"pg, err := pgxpool.Connect(context.Background(), databaseURL)if err != nil {    log.Error().Err(err).Msg("conn.Close")    return nil}目前,上面的代码给出了错误{“级别”:“错误”,“错误”:“无法连接到:拨号错误(拨打 tcp 10.43.140.140:40072:连接:连接被拒绝)”,“时间”:1627849943,“消息”:“conn.关闭“}host=my-database-service.hm user=admin database=my_db但是,在我ssh进入服务器容器后,我可以通过 成功连接PostgreSQL容器。psql/usr/src/app # psql --host=my-database-service.hm --port=40072 --dbname=my_db --username=admin --passwordPassword: psql (13.3)Type "help" for help.my_db=# 我试图重新启动我的服务器容器,以确保它在PostgreSQL数据库准备就绪后运行,但仍然得到同样的错误。任何进一步调试的建议都会有所帮助。谢谢!更新我实际上是在使用林克德。可能与https://linkerd.io/2.10/features/protocol-detection/我尝试将 PostgreSQL 更改为默认端口 5432,但仍有问题。如果找到解决方案,将更新。
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

经过一些实验,我可以确认我的问题与Linkerd无关。


我认为我的 PostgreSQL 容器端口/目标端口仍在使用默认的 5432。它通过端口40072在网络内部的TosterIP公开,这就是为什么我不需要在Linkerd中将端口标记为不透明。


事实证明,添加后,os.Exit(1)


pg, err := pgxpool.Connect(context.Background(), databaseURL)

if err != nil {

    log.Error().Err(err).Msg("conn.Close")

    os.Exit(1) // <- this helps

}

我的 Kubernetes 将帮助重新启动服务器 pod,当它最初失败等待 PostgreSQL 准备就绪。


重新启动几次后,服务器容器现在可以很好地连接 PostgreSQL。


我认为如果我提前手动重新启动更多次,也可能有所帮助。但绝对不可靠,像这样让库伯内特斯帮助重启。


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信