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原鏡像都沒問題,可一換成自己構建的鏡像就出這個錯,不得不懷疑我構建的鏡像有問題,但能有什么問題呢,測試三個節點都正常,百思不得其解??磥淼蒙钊氲牧私鈖gpool的配置的,使用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 | trepmgr | 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 | frepmgr | 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,完美,一點問題沒有。
總結
以上是生活随笔為你收集整理的bitnami 的pgpool连接postgresql-ha出错SCRAM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【QT项目:视频播放器——Qt open
- 下一篇: 微信小程序使用组件实现移动端软键盘