Gabriele Bartolini:CNPG 配方 27 - 在 Kubernetes 上使用 CloudNativePG PostgreSQL 后端运行 OpenBao

Gabriele Bartolini:CNPG 配方 27 - 在 Kubernetes 上使用 CloudNativePG PostgreSQL 后端运行 OpenBao

💡 原文英文,约3900词,阅读约需14分钟。
📝

内容提要

本文介绍如何在Kubernetes上使用CloudNativePG(CNPG)作为OpenBao的PostgreSQL存储后端,实现无密码的TLS客户端证书认证。通过部署三实例CNPG集群、创建数据库角色和表结构,并配置OpenBao的Helm图表,实现高可用和同步复制。文章涵盖初始化、解封、读写测试及证书续期等操作,强调全开源、无供应商锁定。

🔎

延伸解读

无密码认证的落地细节

文章强调整个栈无密码,但并非简单不设密码,而是通过 DatabaseRole 的 clientCertificate 生成客户端证书,并在 pg_hba.conf 中显式配置 cert 认证规则。若缺少这些规则,角色会回退到默认的 scram-sha-256,因无密码导致连接失败。此外,Secret 卷挂载需设置 defaultMode: 0640,否则 libpq 会因私钥文件权限过宽而拒绝连接。

OpenBao 的存储后端与 HA 机制

OpenBao 使用 PostgreSQL 作为存储后端,需预建两张表:openbao_kv_store 和 openbao_ha_locks,并设置 skip_create_table=true,因为运行时角色无 CREATE 权限。HA 通过 ha_enabled=true 和锁表实现,三个 OpenBao 副本各自独立,需逐个解封。存储后端在启动时建立连接池,不会自动重读证书,证书轮换后需滚动重启 OpenBao 才能生效。

高可用与灾备的边界

该方案在单集群内实现了高可用:CNPG 三实例同步复制保证零数据丢失,OpenBao 三副本配合反亲和性分散在不同节点。但文章明确指出,这仅是单集群部署,生产环境还需配置自动备份(如 Barman Cloud Plugin)和跨集群灾备(如 CNPG 的分布式拓扑),才能满足真实的 RTO/RPO 目标。

Q&A

如何在Kubernetes上使用CloudNativePG作为OpenBao的存储后端?

部署一个三实例的CNPG集群,创建数据库角色和表结构,然后通过Helm配置OpenBao,使用PostgreSQL存储后端,并设置TLS客户端证书认证。

CloudNativePG和OpenBao是什么关系?

CloudNativePG是一个Kubernetes operator,用于管理PostgreSQL集群;OpenBao是一个开源密钥管理工具,可以使用PostgreSQL作为其存储后端。两者结合可以实现高可用、无密码的密钥管理。

如何实现无密码的TLS客户端证书认证?

通过CNPG的DatabaseRole CRD创建角色并启用clientCertificate,生成客户端证书,然后在pg_hba中配置cert认证规则,确保连接使用证书而非密码。

OpenBao的PostgreSQL存储后端需要哪些表?

需要两个表:openbao_kv_store用于存储键值数据,openbao_ha_locks用于高可用锁。

如何初始化OpenBao并解封?

在openbao-0上执行bao operator init生成解封密钥和根令牌,然后对每个pod分别执行bao operator unseal三次,输入三个解封密钥。

OpenBao的证书如何续期?

CNPG会自动续期客户端证书,但OpenBao不会自动加载新证书,需要手动滚动重启OpenBao pods。

如何配置OpenBao的Helm图表以使用CNPG?

在values文件中设置storage为postgresql,指定连接URL,并设置skip_create_table为true,同时禁用dataStorage,并挂载客户端证书和CA。

如何实现高可用和同步复制?

使用三实例CNPG集群,配置同步复制(method: any, number: 1),并启用pod反亲和性,确保实例分布在不同节点。

🏷️

标签

➡️

继续阅读