Postgresql 连接到谷歌计算引擎上的postgres服务器

Postgresql 连接到谷歌计算引擎上的postgres服务器,postgresql,google-compute-engine,Postgresql,Google Compute Engine,我到处都在找这个,但是在一个半小时的搜索之后,我没有找到任何相关的东西 如何连接到google计算引擎上的数据库?i、 e我想从笔记本电脑上使用pgadmin3连接到运行在谷歌计算引擎上的postgres服务器 这可能吗?如果是这样,我该怎么做 提前谢谢 您需要: 确保Postgres正在侦听TCP流量(您可以通过连接到实例并运行netstat-ntpl来检查这一点)。通常,Postgres将监听端口5432 确保没有本地防火墙阻止实例上Postgres端口的通信(您可以运行iptables-

我到处都在找这个,但是在一个半小时的搜索之后,我没有找到任何相关的东西

如何连接到google计算引擎上的数据库?i、 e我想从笔记本电脑上使用pgadmin3连接到运行在谷歌计算引擎上的postgres服务器

这可能吗?如果是这样,我该怎么做

提前谢谢

您需要:

  • 确保Postgres正在侦听TCP流量(您可以通过连接到实例并运行
    netstat-ntpl
    来检查这一点)。通常,Postgres将监听端口5432
  • 确保没有本地防火墙阻止实例上Postgres端口的通信(您可以运行
    iptables-L
  • 确保没有GCE防火墙阻止从您的IP到Postgres端口上的实例的通信。您应该阅读,特别是“防火墙”部分
,否则连接请求将失败,即使所有防火墙规则都正确并且PostgreSQL server正在正确的端口上侦听

台阶 轮廓 无法创建链接,但这是一个相当长的答案,因此这可能会有所帮助

  • 在任何步骤中检查端口的工具
    0.1
    nc
    netcat

    0.2
    nmap

    0.3
    netstat

    0.4
    lsof
  • IP地址
    1.1笔记本电脑的公共IP地址
    1.2 GCE实例的IP地址
  • 防火墙规则
    2.1检查现有的
    2.2添加新的防火墙规则
  • 配置PostgreSQL以接受远程连接
    3.1查找上述配置文件
    3.2
    postgresql.conf

    3.3
    pg_hba.conf
  • 0用于在任何步骤中检查端口的工具 0.1
    nc
    netcat
    在哪里

    可能的结果:

    • 连接到4.3.2.1端口[tcp/postgresql]成功

    • nc:连接到4.3.2.1端口8000(tcp)失败:连接被拒绝
      防火墙打开端口,但服务未侦听或拒绝连接

    • 命令挂起 防火墙正在阻塞

    0.2
    nmap
    0.3
    netstat
    在哪里

    在运行PostgreSQL的实例上发布时,如果看不到下面的行,则表示PostgreSQL未配置为用于远程连接:

    tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      1001       238400     30826/postgres
    tcp6       0      0 :::5432                 :::*                    LISTEN      1001       238401     30826/postgres  
    
    0.4
    lsof
    检查实例上的服务是否正在运行

    $ sudo lsof -i -P -n | grep LISTEN
    
     systemd-r   457 systemd-resolve   13u  IPv4  14870      0t0  TCP 127.0.0.53:53 (LISTEN)
     sshd        733            root    3u  IPv4  19233      0t0  TCP *:22 (LISTEN)
     sshd        733            root    4u  IPv6  19244      0t0  TCP *:22 (LISTEN)
     postgres   2733        postgres    3u  IPv4  23655      0t0  TCP 127.0.0.1:5432 (LISTEN)
     python3   26083        a_user      4u  IPv4 392307      0t0  TCP *:8000 (LISTEN)
    
    1.IP地址 要从笔记本电脑连接,您需要笔记本电脑的公共IP地址,以及Google Compute Engine(GCE)实例的公共IP地址

    1.1笔记本电脑的公共IP地址 (来自)

    1.2 GCE实例的IP地址 如果还需要实例的名称,请执行以下操作:

    $ gcloud compute instances list  --format='table(name,status,tags.list())'
    NAME         STATUS   TAGS
    access-news  RUNNING  fingerprint=mdTPd8rXoQM=,items=[u'access-news', u'http-server', u'https-server']
    lynx-dev     RUNNING  fingerprint=CpSmrCTD0LE=,items=[u'http-server', u'https-server', u'lynx-dev']
    tr2          RUNNING  fingerprint=84JxACwWD7U=,items=[u'http-server', u'https-server', u'tr2']
    
    2.防火墙规则 仅处理以下GCE防火墙规则,但确保不会无意中阻塞通信

    另见

    2.1检查现有的 更全面的列表还包括网络标签(来自
    gcloud compute firewall rules list--help
    ):

    2.2添加新的防火墙规则 要打开从每个源到每个实例的默认PostgreSQL端口(5432),请执行以下操作:

    $ gcloud compute firewall-rules create \
        postgres-all                       \
        --network default                  \
        --priority 1000                    \
        --direction ingress                \
        --action allow                     \
        --rules tcp:5432                   \
    
    要将其限制在计算机(源:
    your_-IP
    )和GCE实例(目标:
    instance_-IP
    )之间,请执行以下操作:

    您可以使用源和目标网络标记或服务帐户,而不是源范围和目标范围。看

    3.配置PostgreSQL以接受远程连接 这是对的的更新

    默认情况下,PostgreSQL配置为绑定到“localhost”,因此需要更新以下配置文件:

  • postgresql.conf
    ,以及

  • pg_hba.conf

  • 3.1查找上述配置文件 可以从PostgreSQL本身查询这两个文件的位置(技巧来自:

    $sudo-u postgres psql-c“显示hba_文件”-c“显示配置_文件”
    
    3.2
    postgresql.conf
    配置文件附带了一些有用的提示,以使其正常工作:

    listen_addresses = 'localhost'          # what IP address(es) to listen on;
                                            # comma-separated list of addresses;
                                            # defaults to 'localhost'; use '*' for all
                                            # (change requires restart)
    
    要快速解决问题,只需将其更改为

    listen_addresses = '*'
    
    重新启动服务器(请参阅如何)。一旦PostgreSQL重新启动,它将开始侦听所有IP地址(请参见
    netstat-tuplen

    要重新启动PostgreSQL,请执行以下操作:

    $ sudo systemctl restart postgresql@11-main
    
    # or
    
    $ pg_ctl restart
    
    文档中说它“指定了服务器侦听来自客户端应用程序的连接的TCP/IP地址”,但仅此而已。它指定从哪些套接字接收数据包,但如果传入连接未经过身份验证(通过
    pg_hba.conf
    配置),则数据包将被拒绝(丢弃?)

    3.3
    pg_hba.conf
    From:“_客户端身份验证由一个配置文件控制,该文件传统上命名为pg_hba.conf,并存储在数据库群集的数据目录中。(hba代表基于主机的身份验证。)u”

    这是一个复杂的主题,因此阅读文档非常重要,但这足以在可信网络上进行开发:

    host    all   all   0.0.0.0/0   trust
    host    all   all   ::/0        trust
    

    此时需要重新启动。

    感谢您为我指明了正确的方向。只需要添加一个相关的防火墙并调整我的postgresql.conf和pg_hba.conf fileHi。我也面临同样的问题。我已经更改了配置文件,也更改了防火墙,但仍然无法连接。你能帮个忙吗?可能是
    $ gcloud compute instances list
    
    NAME         ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
    access-news  us-east1-d  n1-standard-2               10.142.0.5   34.73.156.19    RUNNING
    lynx-dev     us-east1-d  n1-standard-1               10.142.0.2   35.231.66.229   RUNNING
    tr2          us-east1-d  n1-standard-1               10.142.0.3   35.196.195.199  RUNNING
    
    $ gcloud compute instances list  --format='table(name,status,tags.list())'
    NAME         STATUS   TAGS
    access-news  RUNNING  fingerprint=mdTPd8rXoQM=,items=[u'access-news', u'http-server', u'https-server']
    lynx-dev     RUNNING  fingerprint=CpSmrCTD0LE=,items=[u'http-server', u'https-server', u'lynx-dev']
    tr2          RUNNING  fingerprint=84JxACwWD7U=,items=[u'http-server', u'https-server', u'tr2']
    
    $ gcloud compute firewall-rules list
    
    NAME                      NETWORK  DIRECTION  PRIORITY  ALLOW                         DENY  DISABLED
    default-allow-http        default  INGRESS    1000      tcp:80                              False
    default-allow-https       default  INGRESS    1000      tcp:443                             False
    default-allow-icmp        default  INGRESS    65534     icmp                                False
    default-allow-internal    default  INGRESS    65534     tcp:0-65535,udp:0-65535,icmp        False
    default-allow-rdp         default  INGRESS    65534     tcp:3389                            False
    default-allow-ssh         default  INGRESS    65534     tcp:22                              False
    pg-from-tag1-to-tag2      default  INGRESS    1000      tcp:5432                            False
    
    To show all fields of the firewall, please show in JSON format: --format=json
    To show all fields in table format, please see the examples in --help.
    
    $ gcloud compute firewall-rules list --format="table(     \
          name,                                               \
          network,                                            \
          direction,                                          \
          priority,                                           \
          sourceRanges.list():label=SRC_RANGES,               \
          destinationRanges.list():label=DEST_RANGES,         \
          allowed[].map().firewall_rule().list():label=ALLOW, \
          denied[].map().firewall_rule().list():label=DENY,   \
          sourceTags.list():label=SRC_TAGS,                   \
          sourceServiceAccounts.list():label=SRC_SVC_ACCT,    \
          targetTags.list():label=TARGET_TAGS,                \
          targetServiceAccounts.list():label=TARGET_SVC_ACCT, \
          disabled                                            \
      )"
    
    NAME                      NETWORK  DIRECTION  PRIORITY  SRC_RANGES    DEST_RANGES  ALLOW                         DENY  SRC_TAGS  SRC_SVC_ACCT  TARGET_TAGS   TARGET_SVC_ACCT  DISABLED
    default-allow-http        default  INGRESS    1000      0.0.0.0/0                  tcp:80                                                      http-server                    False
    default-allow-https       default  INGRESS    1000      0.0.0.0/0                  tcp:443                                                     https-server                   False
    default-allow-icmp        default  INGRESS    65534     0.0.0.0/0                  icmp                                                                                       False
    default-allow-internal    default  INGRESS    65534     10.128.0.0/9               tcp:0-65535,udp:0-65535,icmp                                                               False
    default-allow-rdp         default  INGRESS    65534     0.0.0.0/0                  tcp:3389                                                                                   False
    default-allow-ssh         default  INGRESS    65534     0.0.0.0/0                  tcp:22                                                                                     False
    pg-from-tag1-to-tag2      default  INGRESS    1000      4.3.2.1                    tcp:5432                            tag1                    tag2                           False
    
    $ gcloud compute firewall-rules create \
        postgres-all                       \
        --network default                  \
        --priority 1000                    \
        --direction ingress                \
        --action allow                     \
        --rules tcp:5432                   \
    
    $ gcloud compute firewall-rules create \
        postgres-from-you-to-instance      \
        --network default                  \
        --priority 1000                    \
        --direction ingress                \
        --action allow                     \
        --rules tcp:5432                   \
        --destination-ranges INSTANCES_IP  \
        --source-ranges YOUR_IP            \
    
    listen_addresses = 'localhost'          # what IP address(es) to listen on;
                                            # comma-separated list of addresses;
                                            # defaults to 'localhost'; use '*' for all
                                            # (change requires restart)
    
    listen_addresses = '*'
    
    $ sudo systemctl restart postgresql@11-main
    
    # or
    
    $ pg_ctl restart
    
    host    all   all   0.0.0.0/0   trust
    host    all   all   ::/0        trust