Kubernetes 无法连接到主机上运行的数据库



我有一个问题。在我的集群中,我有一个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。公钥已更改(特定于已迁移的隧道)

相关内容

  • 没有找到相关文章

最新更新