尝试打开Postgres端口5432
,以便可以从我的本地计算机访问。该端口仅从kubernetes pod打开。
127.0.0.1:5432 <====> kubernetes-pod <=====> Postgres Server
基本上,我想让端口5432可以通过我的本地机器访问,该端口只能从kubernetes-pod访问。我该怎么做
我试过了,我认为这将工作,如果postgres服务器运行在同一个pod上,这不是在我的情况下:
kubectl port-forward pod-5bf5c7df9b-xcjsf 5433:5432
注意:PostgreSQL服务器作为独立的数据库服务器运行,只有pod可以访问端口,我想从我的本地机器访问PostgreSQL数据库端口。
2条答案
按热度按时间k2arahey1#
实现这一点的最简单和最好的方法是在pod中使用
socat
。您可以使用
alpine/socat
container image创建pod。然后在这个pod中使用port-forward,它会将连接转发到目标数据库。步骤如下:
1.创建一个文件
my-postgresql-socat.yaml
:1.创建pod,
1.运行本地端口转发:
您现在可以通过
localhost:5432
访问数据库1.完成后,删除pod:
g6baxovj2#
试试这个:
kubectl port-forward -n <namespace-name> pod/pod-5bf5c7df9b-xcjsf 5432:5432
请注意差异:
1.如果不是
default
,则需要指定空间1.我通常在pod名称前面加上
pod/
1.本地端口5432连接到端口5432上的k8s群集
此外,最佳实践是将端口转发到服务而不是pod。举例来说:
kubectl port-forward -n namespace svc/service-name 5432:5432
,因为pod名称更改,但服务名称不变。而且,请记住,服务端口通常是5432,但pod可能不会在该端口上侦听。我希望这能帮上忙。我为CodeZero工作,我们允许您使用我们的远程传输功能轻松连接集群资源。查看https://codezero.io
您也可以使用CodeZero CLI(czctl)来传送到集群中,然后您可以在本地访问kubernetes资源:
然后,只要你在集群中有一个指向Postgres的服务,你就可以访问这个服务,就像它在你的计算机上本地运行一样。举例来说:
创建一个名为
my-postgres-db
的Service,指向你的Postgress Pod/Deployment/ReplicaSet Pod。然后,您可以使用psql -h my-postgres-db ...