Postgresql 连接到谷歌计算引擎上的postgres服务器
我到处都在找这个,但是在一个半小时的搜索之后,我没有找到任何相关的东西 如何连接到google计算引擎上的数据库?i、 e我想从笔记本电脑上使用pgadmin3连接到运行在谷歌计算引擎上的postgres服务器 这可能吗?如果是这样,我该怎么做 提前谢谢 您需要:Postgresql 连接到谷歌计算引擎上的postgres服务器,postgresql,google-compute-engine,Postgresql,Google Compute Engine,我到处都在找这个,但是在一个半小时的搜索之后,我没有找到任何相关的东西 如何连接到google计算引擎上的数据库?i、 e我想从笔记本电脑上使用pgadmin3连接到运行在谷歌计算引擎上的postgres服务器 这可能吗?如果是这样,我该怎么做 提前谢谢 您需要: 确保Postgres正在侦听TCP流量(您可以通过连接到实例并运行netstat-ntpl来检查这一点)。通常,Postgres将监听端口5432 确保没有本地防火墙阻止实例上Postgres端口的通信(您可以运行iptables-
- 确保Postgres正在侦听TCP流量(您可以通过连接到实例并运行
来检查这一点)。通常,Postgres将监听端口5432netstat-ntpl
- 确保没有本地防火墙阻止实例上Postgres端口的通信(您可以运行
)iptables-L
- 确保没有GCE防火墙阻止从您的IP到Postgres端口上的实例的通信。您应该阅读,特别是“防火墙”部分
0.1
nc
或netcat
0.2
nmap
0.3
netstat
0.4
lsof
1.1笔记本电脑的公共IP地址
1.2 GCE实例的IP地址
2.1检查现有的
2.2添加新的防火墙规则
3.1查找上述配置文件
3.2
postgresql.conf
3.3
pg_hba.conf
nc
或netcat
在哪里
可能的结果:
连接到4.3.2.1端口[tcp/postgresql]成功代码> 耶
防火墙打开端口,但服务未侦听或拒绝连接nc:连接到4.3.2.1端口8000(tcp)失败:连接被拒绝
- 命令挂起 防火墙正在阻塞
nmap
0.3netstat
在哪里
在运行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.4lsof
检查实例上的服务是否正在运行
$ 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防火墙规则,但确保不会无意中阻塞通信
另见
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
$sudo-u postgres psql-c“显示hba_文件”-c“显示配置_文件”
3.2postgresql.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.3pg_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