我有一个问题。在我的集群中,我有一个Ruby-On-Rails应用程序,我想将其映射到托管机器(非容器化)上的数据库。它是一个Postgres数据库,当我运行时监听以下端口:
sudo netstat -tulpn | grep LISTEN
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1109/postgres
然后我创建了一个服务,将DB_HOST映射到本地机器,如下所示:
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
在我的configmap中,我有以下配置:
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
我做错了什么?
Error: Operation Timed Out:指示您的服务器未能在允许的时间段内发出完整的响应。
检查以下解决方案:
1)检查/etc目录/etc目录为其他用户所有,需要以root用户设置,并开放5432端口。(在/etc/hosts中添加主机名和IP详细信息。对于多节点集群,/etc/hosts在每台机器上必须更新所有集群节点的详细信息)。
2)再次检查是否没有到数据库服务器的路由,因为它被防火墙阻止了。确保您在防火墙中设置了一条规则,允许Ruby-On-Rails应用程序连接。
3)如果您不是在本地进行连接,请检查设置,在postgresql.conf文件中:
Connection Settings - #listen_addresses = 'localhost' >>>> This should be = '*' instead of localhost
保存配置文件并重启服务。
4)检查隧道问题:验证ssh进程的属性是否与客户提供的匹配:查看ps aux | grep ssh的输出,相关部分为:-L number_1:string_or_number_1:number_2…KnownHostsFile =/dev/null string_or_number_2
*some_number1:对方端口号
*string_or_number_1:数据库主机号或IP地址
*number_2:数据库端口号
*string_or_number_2:隧道服务器主机或IP地址
如何手动设置端口:
注意:不建议这样做,因为查看器仍有可能重新设置端口。建议您在DB上打开所需的端口。
通过Looker数据库连接UI创建隧道
隧道创建后通过API(PATCH/API/4.0/connections/:connection_name)更新隧道
设置所需的local_host_port
确保db_connection和以下字段的设置使用API GET/API/4.0/ssh_tunnel/:ssh_tunnel_id或检查go-ssh-sidecar:
*tunnel_id:隧道id
*port: new local_host_port
*主持人:localhost
也检查不正确的隧道迁移:
以下类型的问题可能与新迁移的K8s上的SSH隧道有关
1。隧道未迁移或隧道部分迁移
2。错误信息迁移隧道
3。ip已更改,且未记录或通知客户
4。公钥已更改(特定于已迁移的隧道)