排查 Private Service Connect 错误
无法连接到目标数据库:EOF
运行连接测试会返回 [DATABASE] unable to connect to the destination database: EOF
错误消息。
可能原因:服务连接配置不正确。
可尝试的操作:确保在服务附件 Terraform 配置文件中将 enable_proxy_protocol
设置为 false
。只有 NGINX 和 Apache 等 HTTP 服务器支持代理协议。
使用 gcloud
创建 Private Service Connect 设置时,代理协议默认处于停用状态。
连接超时,连接被拒绝
运行连接测试失败或超时。这很可能是由于 Private Service Connect 设置中的路由配置错误所致。造成这种情况的原因有多种。
可能的原因:缺少一条防火墙规则,该规则允许 Private Service Connect NAT CIDR 范围访问堡垒所在的 Private Service Connect 子网,尤其是堡垒虚拟机 nic0
接口。
可尝试的做法:确保您的组织政策不会限制内部防火墙规则,例如在设置 Private Service Connect 提供方的示例 Terraform 脚本中定义的 psc_sp_in_fw
防火墙规则。
可能的原因:代理服务器已关闭。所提供的端口上没有监听器,因此连接会挂起。
可尝试的操作:您可以尝试与堡垒虚拟机建立 SSH 连接,然后使用以下命令搜索代理:
netstat -tunalp | grep PORT
分析对该命令的响应:
如果您收到空响应,则表示代理服务器已关闭。请尝试运行以下命令:
sudo su; cd /
,然后运行sudo dpkg -s dante-server
检查 Dante 服务器是否已安装:如果代理已安装,您会收到以下消息:
Status: install ok installed
如果未安装代理,可能是因为缺少路由器。添加路由器,然后检查您是否可以通过运行
apt-get install dante-server
下载代理。
如果代理正在运行并监听所提供的端口,请尝试执行以下操作以建立与该代理的连接:
安装 PostgreSQL 客户端:
sudo apt-get install postgresql-client
。连接到 PostgreSQL 数据库:
psql -h 127.0.0.1 -p PORT -U DBUSERNAME -W
(系统会提示您输入密码)。替换以下内容:
PORT
:数据库端口号。DBUSERNAME
:用于连接到 PostgreSQL 数据库的用户名。
安装 telnet 客户端:
sudo apt-get install telnet
连接到 telnet 客户端:
telnet 127.0.0.1 PORT
将
PORT
替换为数据库端口号。
根据命令的结果:
如果命令无法打开连接,请尝试查看代理日志以查找根本原因。根本原因可能因 AlloyDB for PostgreSQL 集群设置而异。
如果使用 telnet 打开连接,但在原生客户端中挂起,可能存在的问题是堡垒 IP 地址路由。在虚拟机的终端中,输入
ip route
。看看您能否找到使用辅助nic
(nic1
,即DB_SUBNETWORK_GATEWAY
IP 地址)将连接路由到 AlloyDB for PostgreSQL 集群专用 IP 地址的路由规则。
可能的原因:服务附件不接受来自 Database Migration Service 的端点连接。服务关联包含已接受的项目列表,其中不包含 Database Migration Service 项目。
可尝试的操作:如需解决此问题,请尝试以下任一操作:
在 Google Cloud 控制台中,前往 Private Service Connect。
在已发布的服务标签页中,接受 Database Migration Service 针对您的服务附件(如果处于待处理状态)发来的连接请求。
将发出请求的项目添加到服务连接的许可名单项目中(如果被拒绝)。
如需详细了解如何在 Terraform 中添加许可名单中的项目,请参阅 Terraform 文档。
如需详细了解如何在
gcloud
中添加许可名单中的项目,请参阅 gcloud 参考文档。
如果这不能解决问题,请重新创建连接个人资料。
删除与 Private Service Connect 连接相关联的连接配置文件,然后重新创建该连接配置文件。