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

nvbavucw  于 2022-12-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(171)

我遇到了一个问题。在我的集群中,我有一个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

我做错了什么?

g6ll5ycj

g6ll5ycj1#

错误:操作超时:表示服务器未能在允许的时间段内发出完整响应。
检查以下解决方案:
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编号_1:字符串或编号_1:编号_2...已知主机文件=/dev/null字符串或编号_2

  • 某编号1:查看器端端口号
  • 字符串或编号1:数据库主机号或IP地址
  • number_2:数据库端端口号
  • 字符串或编号2:隧道服务器主机或IP地址
    如何手动设置端口:
    **注意:**不建议这样做,因为查看者仍有可能将端口重新设置。建议您在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进行检查:

  • tunnel_id:隧道的ID
  • 端口:新建本地主机端口
  • 主机:本地主机
    同时检查不正确的通道迁移:

以下类型的问题可能与新迁移的K8上的SSH隧道有关
1.未迁移隧道,或部分迁移隧道
2.使用不正确的信息迁移隧道
3. IP已更改,但未记录或向客户公布
4.公钥已更改(特定于迁移的隧道)

相关问题