尝试打开 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 数据库端口。
实现此目的最简单、最好的方法是在 Pod 中使用
socat
。
alpine/socat
容器镜像 来创建 pod。然后使用 port-forward 进入此 pod,这会将连接转发到目标数据库。
步骤如下:
my-postgresql-socat.yaml
:apiVersion: v1
kind: Pod
metadata:
name: my-postgresql-socat
labels:
name: my-postgresql-socat
spec:
containers:
- name: my-postgresql-socat
image: alpine/socat
command: ["socat", "-dd", "tcp4-listen:5432,fork,reuseaddr", "tcp4:my-postgresql-host:5432"]
resources:
limits:
memory: "64Mi"
cpu: "50m"
ports:
- containerPort: 5432
kubectl apply -f my-postgresql-socat.yaml
kubectl port-forward my-postgresql-socat 5432:5432
您现在可以通过
localhost:5432
访问您的数据库
kubectl delete pod my-postgresql-socat
试试这个:
kubectl port-forward -n <namespace-name> pod/pod-5bf5c7df9b-xcjsf 5432:5432
注意差异:
default
pod/
此外,最佳实践是端口转发到服务而不是 Pod。例如:
kubectl port-forward -n namespace svc/service-name 5432:5432
,因为 Pod 名称发生了变化,但服务名称没有变化。并且,请记住,服务端口通常是 5432,但 pod 可能不会侦听该端口。
我希望这有帮助。我在 CodeZero 工作,我们允许您通过我们的传送功能轻松连接集群资源。请访问 https://codezero.io
查看您还可以使用CodeZero CLI(czctl)传送到集群中,然后您可以在本地访问kubernetes资源:
czctl start
czctl namespace teleport <namespace-name>
然后,只要集群中有一个服务指向 Postgres,您就可以访问该服务,就像它在您的计算机本地运行一样。例如:
创建一个名为
my-postgres-db
的服务,它指向您的 Postgress Pod/Deployment/ReplicaSet Pod。然后你就可以使用进行连接
psql -h my-postgres-db ...