bitnami 的pgpool连接postgresql-ha出错SCRAM
pgpool是postgresql-ha高可靠集群的代理工具,提供了負(fù)載均衡、連接池、自動故障轉(zhuǎn)移、在線恢復(fù)、復(fù)制、看門狗等功能,bitnami提供了postgresql數(shù)據(jù)庫的helm的安裝包,可以很容易進(jìn)行postgresql高可靠k8s環(huán)境的安裝,但bitnami提供的鏡像安全漏洞很多,如下圖:
不得不使用ubuntu 20重新進(jìn)行構(gòu)建鏡像,費用了九牛二虎之力構(gòu)建的鏡像部署后,postgresql-ha可以正常啟動,但pgpool無法正常啟動,總報failed to authenticate with backend using SCRAM?導(dǎo)致pgpool總是重啟,在網(wǎng)上也沒找到這種錯誤的解決方法。
使用bitnami/postgresql-ha原鏡像都沒問題,可一換成自己構(gòu)建的鏡像就出這個錯,不得不懷疑我構(gòu)建的鏡像有問題,但能有什么問題呢,測試三個節(jié)點都正常,百思不得其解。看來得深入的了解pgpool的配置的,使用SCRAM進(jìn)行搜索,發(fā)現(xiàn)升級PostgreSQL密碼到SCRAM的方法 - 墨天輪介紹SCRAM,原來postgresql客戶端認(rèn)證有兩種方式:MD5與scram-sha-256,通過以下命令可以查看到postgresql使用哪種認(rèn)證方式:
postgres=# SELECT rolname, rolpassword ~ '^SCRAM-SHA-256\$' AS has_upgraded postgres-# FROM pg_authid postgres-# WHERE rolcanlogin;rolname | has_upgraded ----------+--------------postgres | trepmgr | t (2 rows)如果是t,說明使用scram-sha-256密碼加密方式,可以進(jìn)一步使用下面的命令驗證一下
postgres=# select passwd from pg_shadow where usename = 'postgres';passwd ---------------------------------------------------------------------------------------------------------------------------------------SCRAM-SHA-256$4096:iAmKIA8/wN/yEXLBzxjBFA==$mS54MmmMdXnnkR8y6ZZ2zsbkOyQokTVzk0zZvSN1NSs=:SNsbmxL+dIuZkfl9+F1v9XAZwJjDB1f9/wy6rC0WG24= (1 row)進(jìn)一步證實了的確是scram-sha-256方式認(rèn)證的。
再看一下bitnami/postgresql-ha鏡像里的這兩項參數(shù)
postgres=# SELECT rolname, rolpassword ~ '^SCRAM-SHA-256\$' AS has_upgraded postgres-# FROM pg_authid postgres-# WHERE rolcanlogin;rolname | has_upgraded ----------+--------------postgres | frepmgr | f (2 rows)哦哦哦,這里是f,給發(fā)非scram-sha-256方式,再查查密碼
postgres=# select passwd from pg_shadow where usename = 'postgres';passwd -------------------------------------md5a3556571e93b0d20722ba62be61e8c2d (1 row)看看看,人家是用md5的。
找到這,情況比較明朗了,看來自己構(gòu)建的容器沒問題,安全性更高了,只是pgpool還是使用默認(rèn)的方式md5,所以驗證不能過,看看是不是這樣,經(jīng)過一翻研究,發(fā)現(xiàn)pgpool的密碼是放在conf/pool_pass的文件里,進(jìn)入容器中看看
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認(rèn)證方式呢?那就看bitnami/pgpool說明文檔中找吧,很可惜,沒找到與scram相關(guān)的配置。難道bitnami/pgpool不支持scram認(rèn)證方式嗎?再用scram為關(guān)鍵字從bitnami/pgpool的腳本中找,果然在libpgpool.sh的腳本中找到了
?可這些代碼只是校驗用的,并不是改變認(rèn)證方式的。沒什么用啊!!!再找找,找到了
?pgpool_generate_password_file(),生成密碼文件,老外代碼寫的就是好,腳本文件都寫得很明了,看來跟PGPOOL_AUTHENTICATION_METHOD這個變量有關(guān)。找到這,基本找到解決方案了,在創(chuàng)建容器時,設(shè)置這個變量就好了,bitnami/pgpool沒有提供直接的設(shè)置值的方法,但提供了pgpool.extraEnvVars這個設(shè)置環(huán)境變量的功能,執(zhí)行helm安裝時,設(shè)置這個變量就行了,執(zhí)行helm install時,加上這個參數(shù)
--set pgpool.extraEnvVars\[0\].name="PGPOOL\_AUTHENTICATION\_METHOD",pgpool.extraEnvVars\[0\].value="scram\-sha\-256"容器可以正常了啟動了。再進(jìn)入到pgpool容器中,看一下pool_passwd文件
I have no name!@postgresql-ha-pgpool-848bbcfcdb-rlhpn:/opt/bitnami/pgpool/conf$ cat pool_passwd postgres:AESusCdlqVhMOLDhpD6RdbWtA==變成AES加密的了。使用客戶端連接pgpool的svc,完美,一點問題沒有。
總結(jié)
以上是生活随笔為你收集整理的bitnami 的pgpool连接postgresql-ha出错SCRAM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【QT项目:视频播放器——Qt open
- 下一篇: 微信小程序使用组件实现移动端软键盘