无法在 Kubernetes 中连接后greSQL

我正在使用库伯内特斯。我有两个豆荚。


在一个容器中,它正在运行一台服务器。这是尝试在另一个容器中连接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 --password

Password: 

psql (13.3)

Type "help" for help.


my_db=# 

我试图重新启动我的服务器容器,以确保它在PostgreSQL数据库准备就绪后运行,但仍然得到同样的错误。


任何进一步调试的建议都会有所帮助。谢谢!


更新


我实际上是在使用林克德。可能与


https://linkerd.io/2.10/features/protocol-detection/


我尝试将 PostgreSQL 更改为默认端口 5432,但仍有问题。如果找到解决方案,将更新。


缥缈止盈
浏览 96回答 1
1回答

一只萌萌小番薯

经过一些实验,我可以确认我的问题与Linkerd无关。我认为我的 PostgreSQL 容器端口/目标端口仍在使用默认的 5432。它通过端口40072在网络内部的TosterIP公开,这就是为什么我不需要在Linkerd中将端口标记为不透明。事实证明,添加后,os.Exit(1)pg, err := pgxpool.Connect(context.Background(), databaseURL)if err != nil {&nbsp; &nbsp; log.Error().Err(err).Msg("conn.Close")&nbsp; &nbsp; os.Exit(1) // <- this helps}我的 Kubernetes 将帮助重新启动服务器 pod,当它最初失败等待 PostgreSQL 准备就绪。重新启动几次后,服务器容器现在可以很好地连接 PostgreSQL。我认为如果我提前手动重新启动更多次,也可能有所帮助。但绝对不可靠,像这样让库伯内特斯帮助重启。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go