在 Kubernetes 集群中使用 pgAdmin 访问数据库

Accessing database with pgAdmin in Kubernetes cluster

在我当前的非 Kubernetes 环境中,如果我需要访问 Postgres 数据库,我只需设置一个 SSH 隧道:

ssh -L 5432:localhost:5432 user@domain.com

我正在尝试弄清楚如何在我在 EKS 中设置的测试 Kubernetes 集群中执行类似的操作,这不会涉及很大的安全风险。例如,在入口控制中创建到数据库端口的路径是一个 糟糕 的想法。

集群将设置在 Postgres 位于 pod 中的位置,但所有数据都在持久卷声明中,因此当 pod 被销毁时数据仍然存在。

在这种设置中如何使用 pgAdmin 访问数据库?

kubectl 命令可以通过 kube-api

forward TCP ports 进入 POD
kubectl port-forward {postgres-pod-ID} 5432:5432

如果您没有使用 cluster-admin 用户,则需要将该用户绑定到允许其在 pods 命名空间中 create pods/portforward 的角色。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: pg-portforward
rules:
  - apiGroups: [""]
    resources: ["pods/portforward"]
    verbs: ["create"]

我有类似的设置。我的 postgreSQL 数据库部署在 AWS 云中 kubernetes 集群 运行 的一个 pod 中。以下是我在本地计算机上从 pgAdmin 运行 访问此远程数据库所执行的步骤(遵循 this video)。

1 -> 将数据库的服务类型从 ClusterIP 修改为 NodePort,如下所示。

apiVersion: v1
kind: Service
metadata:
  name: db

spec:
  selector:
    app: db
  ports:
    - name: dbport
      port: 5432
      nodePort: 31000
  type: NodePort

2-> 将新规则添加到您的 Kubernetes 集群的任何节点(EC2 实例)的安全组,如下所示。

3-> 使用节点(EC2 实例)的 public IPv4 地址连接到此远程数据库。

HostAddress: 节点 ec2 实例的 IPv4 地址。

端口:31000