通过 kubernetes pod 连接到集群内部运行的 postgres

通过 kubernetes pod 连接到集群内部运行的 postgres

我有一个myapp-2390458f-kfjgd可以访问的kubernetes pod 和一个可以通过名称从 kubernetes 集群内部访问的kubectl实例,但无法在集群外部访问。PostgreSQLmypos.tgres.com

我正在尝试从我的笔记本电脑连接到PostgreSQL,但据我所知,kubectl port-forward在这种情况下无法工作,因为我只能将我的本地端口转发到某个 pod 的端口。但它不会将流量进一步转发到mypos.tgres.com

有没有办法将所有流量mypos.tgres.com从可从我的笔记本电脑访问的 pod 转发到实际的数据库实例?

可能的解决方案是什么?

PostgreSQL不是以 pod 的形式运行,而是在只能从 Kubernetes 集群的 pod 访问的内部网络上运行。Kubernetes 集群托管在我们自己的基础设施中,而不是在云中。

答案1

创建一个作为内部 Postgres 服务代理的 Pod;然后您可以kubectl port-forward通过该 Pod 从您的笔记本电脑访问 Postgres。

我们可以设置一个简单的代理,像这样:

kubectl run postgres-proxy \
  --image docker.io/alpine/socat \
  -- \
  tcp-listen:5432,fork,reuseaddr \
  tcp-connect:mypos.tgres.com:5432

现在您可以在本地机器上公开该代理:

kubectl port-forward pod/postgres-proxy 5432:5432

然后通过本地机器访问 postgres:

psql -h localhost ...

完成后删除代理 pod:

kubectl delete pod/postgres-proxy

相关内容