我有一个myapp-2390458f-kfjgd
可以访问的kubernetes pod 和一个可以通过名称从 kubernetes 集群内部访问的kubectl
实例,但无法在集群外部访问。PostgreSQL
mypos.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