kubectl 端口转发到远程 postgres 端口

kubectl port forwarding to remote postgres port

正在尝试打开 Postgres 端口 5432 以便可以从我的本地计算机访问它。该端口仅从 kubernetes pods.

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

试试这个: kubectl port-forward -n <namespace-name> pod/pod-5bf5c7df9b-xcjsf 5432:5432

注意区别:

  1. 如果没有则需要指定命名空间default
  2. 我通常在 pod 名称前加上 pod/
  3. 本地5432端口连接k8s集群5432端口

此外,最好的做法是将端口转发到服务而不是 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 pods。然后你可以使用

连接

psql -h my-postgres-db ...

完成此操作的最简单和最好的方法是在广告连播中使用 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. 使用
  2. 创建广告连播
kubectl apply -f my-postgresql-socat.yaml
  1. 运行 本地端口转发:
oc port-forward my-postgresql-socat 5432:5432

您现在可以通过 localhost:5432

访问您的数据库
  1. 完成后,删除 pod:
kubectl delete pod my-postgresql-socat