我正在使用库伯内特斯。我有两个豆荚。在一个容器中,它正在运行一台服务器。这是尝试在另一个容器中连接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。
我认为如果我提前手动重新启动更多次,也可能有所帮助。但绝对不可靠,像这样让库伯内特斯帮助重启。
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报
0/150
提交
取消