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
注意区别:
- 如果没有则需要指定命名空间
default
- 我通常在 pod 名称前加上
pod/
- 本地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,它将连接转发到目标数据库。
步骤如下:
- 创建文件
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
- 运行 本地端口转发:
oc port-forward my-postgresql-socat 5432:5432
您现在可以通过 localhost:5432
访问您的数据库
- 完成后,删除 pod:
kubectl delete pod my-postgresql-socat
正在尝试打开 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
注意区别:
- 如果没有则需要指定命名空间
default
- 我通常在 pod 名称前加上
pod/
- 本地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,它将连接转发到目标数据库。
步骤如下:
- 创建文件
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
- 运行 本地端口转发:
oc port-forward my-postgresql-socat 5432:5432
您现在可以通过 localhost:5432
- 完成后,删除 pod:
kubectl delete pod my-postgresql-socat