kubectl 端口转发到远程 postgres 端口

use*_*503 6 portforwarding kubernetes

尝试打开 Postgres 端口5432,以便可以从我的本地计算机访问它。该端口仅从 kubernetes pod 开放。

127.0.0.1:5432 <====> kubernetes-pod <=====> Postgres Server
Run Code Online (Sandbox Code Playgroud)

基本上我想通过本地计算机访问端口 5432,该端口只能从 kubernetes-pod 访问。我怎么做。

我尝试过,如果 postgres 服务器在同一个 pod 上运行(但我的情况除外),我认为这会起作用:

kubectl port-forward pod-5bf5c7df9b-xcjsf 5433:5432
Run Code Online (Sandbox Code Playgroud)

注意:PostgreSQL 服务器作为独立数据库服务器运行,只有 pod 可以访问该端口,我想从本地计算机访问 PostgreSQL 数据库端口。

koe*_*koe 9

实现此目的最简单、最好的方法是socat在 Pod 中使用。

您可以使用alpine/socat容器镜像来创建 Pod。然后使用 port-forward 进入此 pod,这会将连接转发到目标数据库。

步骤如下:

  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
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个 Pod
kubectl apply -f my-postgresql-socat.yaml
Run Code Online (Sandbox Code Playgroud)
  1. 运行本地端口转发:
kubectl port-forward my-postgresql-socat 5432:5432
Run Code Online (Sandbox Code Playgroud)

您现在可以通过以下方式访问您的数据库localhost:5432

  1. 完成后,删除 pod:
kubectl delete pod my-postgresql-socat
Run Code Online (Sandbox Code Playgroud)