kubernetes kubectl端口转发到远程postgres端口

lztngnrs  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(155)

尝试打开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数据库端口。

k2arahey

k2arahey1#

实现这一点的最简单和最好的方法是在pod中使用socat
您可以使用alpine/socat container image创建pod。然后在这个pod中使用port-forward,它会将连接转发到目标数据库。
步骤如下:
1.创建一个文件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

1.创建pod,

kubectl apply -f my-postgresql-socat.yaml

1.运行本地端口转发:

kubectl port-forward my-postgresql-socat 5432:5432

您现在可以通过localhost:5432访问数据库
1.完成后,删除pod:

kubectl delete pod my-postgresql-socat
g6baxovj

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资源:

czctl start
czctl namespace teleport <namespace-name>

然后,只要你在集群中有一个指向Postgres的服务,你就可以访问这个服务,就像它在你的计算机上本地运行一样。举例来说:
创建一个名为my-postgres-db的Service,指向你的Postgress Pod/Deployment/ReplicaSet Pod。然后,您可以使用
psql -h my-postgres-db ...

相关问题