【问题标题】:Accessing database with pgAdmin in Kubernetes cluster在 Kubernetes 集群中使用 pgAdmin 访问数据库
【发布时间】:2021-01-29 22:00:13
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: postgresql amazon-web-services kubernetes amazon-eks


    【解决方案1】:

    kubectl 命令可以通过 kube-api forward TCP ports 进入 POD

    kubectl port-forward {postgres-pod-ID} 5432:5432
    

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

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

    【讨论】:

      【解决方案2】:

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

      1 -> 将db的Service type从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 实例)的公共 IPv4 地址连接到此远程数据库。

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

      端口: 31000

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 2019-03-21
        • 2020-07-03
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2019-08-15
        相关资源
        最近更新 更多