我遇到了一个问题。在我的集群中,我有一个Ruby-On-Rails应用程序,我想将它Map到托管计算机上的数据库(未容器化)。它是一个Postgres数据库,当我运行时,它侦听以下端口:
sudo netstat -tulpn | grep LISTEN
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1109/postgres
然后,我创建了一个服务,它将DB_HOSTMap到本地计算机,如下所示:
apiVersion: v1
kind: Service
metadata:
name: external-postgres-svc
namespace: myapp-nm
spec:
ports:
- port: 5432
targetPort: 5432
protocol: TCP
我还添加了一个端点:
apiVersion: v1
kind: Endpoints
metadata:
name: external-postgres-svc
namespace: myapp-nm
subsets:
- addresses:
- ip: "10.0.2.2"
ports:
- port: 5432
在我的配置图中,我有以下配置:
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config
namespace: myapp-nm
data:
db_host: "external-postgres-svc.myapp-nm.svc"
db_port: "5432"
db_username: "myuser"
db_password: "mypass"
但是当所有资源都创建好并且迁移作业运行时,它永远无法完成。大约2-3分钟后,它崩溃并给出错误:
connection to server at port 5432 failed: Operation timed out
我又补充道:
listen_addresses = '*'
到/etc/postgresql/14/main/postgresql.conf
,我补充道:
host all all 0.0.0.0/0 md5
到/etc/postgresql/14/main/pg_hba.conf
,所以我认为它应该监听传入的流量。我还运行了
sudo ufw allow 5432/TCP
允许我的计算机上的防火墙端口,我检查了用户是否正确,确实正确,那么问题出在哪里呢?
如果我不在群集中,我可以使用
ip
port
username
password
我做错了什么?
1条答案
按热度按时间g6ll5ycj1#
错误:操作超时:表示服务器未能在允许的时间段内发出完整响应。
检查以下解决方案:
1)检查/etc目录是否由另一个用户拥有,/etc目录是否需要设置为root用户并打开5432端口。(在/etc/hosts中添加主机的主机名和IP详细资料。如果是多节点集群,则必须使用所有集群节点的详细资料更新每台计算机上的**/etc/hosts**)。
**2)**再次检查是否没有到数据库服务器的路由,因为它被防火墙阻止了。确保在防火墙中设置了允许Ruby-On-Rails应用程序连接的规则。
3)如果您不是仅在本地进行连接,请检查postgresql.conf文件中的设置:
保存配置并重新启动服务。
**4)检查隧道问题:**验证ssh进程的属性是否与客户提供的属性匹配:查看ps aux的输出|grep ssh,相关部分为:-L编号_1:字符串或编号_1:编号_2...已知主机文件=/dev/null字符串或编号_2
如何手动设置端口:
**注意:**不建议这样做,因为查看者仍有可能将端口重新设置。建议您在DB上打开所需的端口。
通过Looker数据库连接UI创建隧道
创建隧道后,通过API(PATCH /api/4.0/connections/:connection_name)更新隧道
设置所需的本地主机端口
确保使用API GET /api/4.0/ssh_tunnel/:ssh_tunnel_id设置了db_connection和以下字段,或者从go-ssh-sidecar进行检查:
同时检查不正确的通道迁移:
以下类型的问题可能与新迁移的K8上的SSH隧道有关
1.未迁移隧道,或部分迁移隧道
2.使用不正确的信息迁移隧道
3. IP已更改,但未记录或向客户公布
4.公钥已更改(特定于迁移的隧道)