bitnami 的pgpool连接postgresql-ha出错SCRAM

pgpool是postgresql-ha高可靠集群的代理工具,提供了负载均衡、连接池、自动故障转移、在线恢复、复制、看门狗等功能,bitnami提供了postgresql数据库的helm的安装包,可以很容易进行postgresql高可靠k8s环境的安装,但bitnami提供的镜像安全漏洞很多,如下图:

不得不使用ubuntu 20重新进行构建镜像,费用了九牛二虎之力构建的镜像部署后,postgresql-ha可以正常启动,但pgpool无法正常启动,总报failed to authenticate with backend using SCRAM 导致pgpool总是重启,在网上也没找到这种错误的解决方法。

使用bitnami/postgresql-ha原镜像都没问题,可一换成自己构建的镜像就出这个错,不得不怀疑我构建的镜像有问题,但能有什么问题呢,测试三个节点都正常,百思不得其解。看来得深入的了解pgpool的配置的,使用SCRAM进行搜索,发现升级PostgreSQL密码到SCRAM的方法 - 墨天轮介绍SCRAM,原来postgresql客户端认证有两种方式:MD5与scram-sha-256,通过以下命令可以查看到postgresql使用哪种认证方式:

postgres=# SELECT rolname, rolpassword ~ '^SCRAM-SHA-256\$' AS has_upgraded
postgres-# FROM pg_authid
postgres-# WHERE rolcanlogin;
 rolname  | has_upgraded 
----------+--------------
 postgres | t
 repmgr   | t
(2 rows)

如果是t,说明使用scram-sha-256密码加密方式,可以进一步使用下面的命令验证一下

postgres=# select passwd from pg_shadow where usename = 'postgres';
                                                                passwd                                                                 
---------------------------------------------------------------------------------------------------------------------------------------
 SCRAM-SHA-256$4096:iAmKIA8/wN/yEXLBzxjBFA==$mS54MmmMdXnnkR8y6ZZ2zsbkOyQokTVzk0zZvSN1NSs=:SNsbmxL+dIuZkfl9+F1v9XAZwJjDB1f9/wy6rC0WG24=
(1 row)

进一步证实了的确是scram-sha-256方式认证的。

再看一下bitnami/postgresql-ha镜像里的这两项参数

postgres=# SELECT rolname, rolpassword ~ '^SCRAM-SHA-256\$' AS has_upgraded
postgres-# FROM pg_authid
postgres-# WHERE rolcanlogin;
 rolname  | has_upgraded 
----------+--------------
 postgres | f
 repmgr   | f
(2 rows)

哦哦哦,这里是f,给发非scram-sha-256方式,再查查密码

postgres=# select passwd from pg_shadow where usename = 'postgres';
               passwd                
-------------------------------------
 md5a3556571e93b0d20722ba62be61e8c2d
(1 row)

看看看,人家是用md5的。

找到这,情况比较明朗了,看来自己构建的容器没问题,安全性更高了,只是pgpool还是使用默认的方式md5,所以验证不能过,看看是不是这样,经过一翻研究,发现pgpool的密码是放在conf/pool_pass的文件里,进入容器中看看

I have no name!@postgresql-ha-pgpool-6d76b7d57b-q47bw:/opt/bitnami/pgpool/conf$ ls
pgpool.conf  pool_hba.conf  pool_passwd
I have no name!@postgresql-ha-pgpool-6d76b7d57b-q47bw:/opt/bitnami/pgpool/conf$ cat pool_passwd 
postgres:md5a3556571e93b0d20722ba62be61e8c2d

的确是md5方式,到此,情况明了了,可是如何让他变成scram-sha-256认证方式呢?那就看bitnami/pgpool说明文档中找吧,很可惜,没找到与scram相关的配置。难道bitnami/pgpool不支持scram认证方式吗?再用scram为关键字从bitnami/pgpool的脚本中找,果然在libpgpool.sh的脚本中找到了

 可这些代码只是校验用的,并不是改变认证方式的。没什么用啊!!!再找找,找到了

 pgpool_generate_password_file(),生成密码文件,老外代码写的就是好,脚本文件都写得很明了,看来跟PGPOOL_AUTHENTICATION_METHOD这个变量有关。找到这,基本找到解决方案了,在创建容器时,设置这个变量就好了,bitnami/pgpool没有提供直接的设置值的方法,但提供了pgpool.extraEnvVars这个设置环境变量的功能,执行helm安装时,设置这个变量就行了,执行helm install时,加上这个参数

 --set pgpool.extraEnvVars\[0\].name="PGPOOL\_AUTHENTICATION\_METHOD",pgpool.extraEnvVars\[0\].value="scram\-sha\-256"

容器可以正常了启动了。再进入到pgpool容器中,看一下pool_passwd文件

I have no name!@postgresql-ha-pgpool-848bbcfcdb-rlhpn:/opt/bitnami/pgpool/conf$ cat pool_passwd 
postgres:AESusCdlqVhMOLDhpD6RdbWtA==

变成AES加密的了。使用客户端连接pgpool的svc,完美,一点问题没有。

### 安装 pgpoolBitnami 环境中的方法 在 Bitnami 环境下安装 `pgpool` 可能会遇到一些特定挑战,尤其是当涉及到认证机制如 SCRAM-SHA-256 时。对于希望将默认的 MD5 认证更改为 SCRAM-SHA-256 的用户来说,在官方文档中未能直接找到有关配置 SCRAM 的指导确实令人困惑[^1]。 然而,通过深入研究可以发现,在某些情况下,即使官方文档未提及,也可以通过对现有文件进行修改来实现这一目标。例如,在脚本 `libpgpool.sh` 中发现了与 SCRAM 相关的内容,这表明尽管缺乏明确记录,但仍有可能调整设置以启用该功能。 为了成功部署并配置 pgpool: #### 修改 pg_hba.conf 文件 确保 PostgreSQLpgpool 使用相同的认证方式非常重要。如果打算切换至 SCRAM-SHA-256,则需编辑 `/opt/bitnami/postgresql/data/pg_hba.conf` 或相应位置下的 `pg_hba.conf` 文件,更改或添加如下行: ```plaintext host all all 0.0.0.0/0 scram-sha-256 ``` #### 更新 pgpool 配置 接着应检查和更新 pgpool 自身的相关配置参数。虽然标准文档可能没有提供具体步骤,但可以通过查看源码或其他社区资源了解如何自定义这些选项。特别是要注意 `auth_method` 参数以及任何涉及密码加密的方法。 #### 测试连接安全性 完成上述更改之后,务必测试新设定的安全性和功能性。尝试从不同客户端建立连接,并验证是否能够正常工作而不提示错误消息。 ```bash psql -h localhost -p 9999 -U your_user -W ``` 以上操作可以帮助解决因认证模式差异而导致的问题,并使系统更加安全可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值