发版日志

v1.29.2-acp.1 (2026-08-14, GA)

跟踪上游 CloudNativePG v1.29.2 的补丁发版(上游发版日期为 2026-06-29)。

这是一个仅 operator发版:operator 和 bundle 镜像已重新构建,而每个 operand 镜像——PostgreSQL、PostGIS、pgvector、pgaudit、PgBouncer,以及 Barman Cloud plugin 及其 sidecar——都沿用与 v1.29.1-acp.1 完全相同的镜像标签

亮点

  • 两个上游安全修复,均位于 operator 代码中。

    • CVE-2026-55769 — operator 现在会在其打开的每个连接上固定设置 search_path = pg_catalog, public, pg_temp。此前,数据库所有者可以在 public schema 中植入重载的内置 operator,并修改 search_path,从而让 operator 的自省探针——它们以 cluster superuser 身份运行——在 pg_catalog 之前解析到这些重载项,形成与 CVE-2018-1058 同类的权限提升链条。 (#10774, GHSA-x8c2-3p4r-v9r6)
    • CVE-2026-55765 — operator 现在会在发出 CREATE/ALTER ROLE ... PASSWORD 之前,对明文角色密码进行 SCRAM-SHA-256 编码,因此 PostgreSQL 实际解析的字面量——以及 pg_stat_statementspgaudit 等扩展可能捕获到的内容——是 SCRAM verifier,而不是明文 secret。预先哈希过的(MD5 或 SCRAM)值会原样透传,而按 Secret 粒度的注解 cnpg.io/passwordPassthrough: "enabled" 可用于选择退出。 (#10724, GHSA-w3gf-xc94-wvmj)
  • OLM bundle 中授予了 endpointslices RBAC。 上游 v1.29.2 让 operator 监听支撑 CNPG-i plugin Services 的 EndpointSlices,这样一旦插件升级后的 pods 变为 Ready,operator 就能立即拾取,而不是等到下一次 resync。对应的权限原本缺失于 ClusterServiceVersion 中,没有它时,operator 在安装时会进入 CrashLoopBackOff。本次发版已授予该权限。

  • 默认 PostgreSQL 版本现为 18.4。 (#10719)

  • 现已支持 Kubernetes 1.36。 (#10900)

  • Cluster 现在是一个有效的 autoscaler 目标。 scale 子资源暴露了 status.selector,这使得 Vertical Pod Autoscaler 和 Horizontal Pod Autoscaler 可以将 Cluster 映射到其实例 pods,并将其作为 targetRef 使用。 (#8996)

  • cluster 引用现在在 DatabasePoolerPublicationSubscriptionScheduledBackup 资源上不可变。 将这些资源重定向到不同的 cluster 没有明确定义的语义,且此前会让 controllers 处于不一致状态;现在该更新会在 API server 侧被 CEL validation rule 拒绝。 (#10743)

  • 原生(in-tree)Barman Cloud 支持将于 CloudNativePG 1.31.0 中移除,而不是先前公布的 1.30.0。仍然建议迁移到 Barman Cloud Plugin——它自 v1.29.1-acp.1 起已随包提供。 (#11083)

本次发版中的上游变更

上游 v1.29.2 包含 2 项重要变更、4 项增强、2 项安全修复、3 项变更以及 32 项 bug 修复。除上述亮点外,在 ACP 部署中最可能产生影响的修复包括:

  • 当已存在的 cluster 启用了 WAL-archiver plugin 时,switchover 会发生死锁。primaryUpdateMethod: switchover 下,primary 无法滚动升级,因为完成一次干净降级所需的 archiver sidecar 仍然缺失。operator 现在会就地重建 primary Pod,以便注入 sidecar 并恢复归档。该检查也覆盖会将 archiver 作为原生 sidecar 注入的插件,例如 Barman Cloud plugin。 (#11032, #11059)
  • 当实例创建 Job 耗尽 backoff limit 时,cluster 会无限停留在 Setting up primary operator 现在会检测到该终态 Job 失败,标记 cluster 为不可恢复,并指出失败的 Job 名称以及其日志位置。 (#11035)
  • spec.postgresql.parameters 接受了并非有效 PostgreSQL 参数名的 key,这可能会向 postgresql.conf 注入任意指令。现在 key 名称会由 webhook 进行校验。 (#11029)
  • 非连续的 pod 名称(例如 -1-3),其原因是实例序号计数器在对应的 Job 和 PVC 创建之前就已前进。 (#10491)
  • 声明式 DatabasePublicationSubscription 对象在其 cluster 降级为 replica 之后,始终报告过期的 primary 侧状态 (#10871),并且在 replica cluster 上卡在 Terminating 中,因为 finalizer 从未释放 (#10853)。

完整的上游变更列表已发布于 cloudnative-pg/cloudnative-pg releases/tag/v1.29.2

安全与 CVE 状态

  • 本发版未发布 ERRATA。 没有任何 operand 镜像被重新构建,因此没有操作系统包级别的 CVE 在产品层面得到修复。operator 镜像在重建过程中确实吸收了基础包更新,但与其一同交付且未发生变化的 Barman Cloud plugin 和 sidecar 镜像仍继续包含相同的软件包,因此运行中部署的暴露面保持不变。
  • 亮点中提到的两个 CVE 是 operator 自身 Go 代码中的缺陷,而不是操作系统包中的缺陷。因此,它们不会出现在容器镜像 CVE 扫描中;而它们未列入任何 ERRATA,并不意味着本发版没有安全内容——实际上是有的。
  • 下方 v1.29.1-acp.1 中列出的剩余未修复 base-OS CVE 仍然适用,且未发生变化。 任何已交付镜像上都不再存在可修复的 HIGH/CRITICAL CVE。

扩展支持

v1.29.1-acp.1 相比没有变化——每个 operand 镜像都以相同标签交付,因此下方 v1.29.1-acp.1 发版日志中的按 PostgreSQL 主版本扩展矩阵同样适用于本次发版,且无需任何改动。

已知问题 / 限制

  • v1.29.1-acp.1 下列出的所有限制仍然适用,因为 operand 镜像完全相同:pgaudit 必须以声明式方式启用、残留的 Debian trixie 未修复 CVE,以及 PostGIS/GDAL 传递依赖带来的未修复 HIGH 问题。
  • 通过 Image Volume 扩展进行原地 major 升级在本发版的 ACP 上不可用。 上游 #10366 为使用 Image Volume 扩展的 cluster 启用了 pg_upgrade 原地 major 升级,但它面向的是 PostgreSQL 19 或更高版本,并且依赖 Kubernetes ImageVolume feature gate,而该 feature gate 在 ACP 上默认关闭。此处交付的最高 PostgreSQL operand 版本为 18.4。

验证摘要

  • 功能验证:在 ACP 4.3 / amd64 / PostgreSQL 18 的 HA cluster 上,从 v1.29.1-acp.1 进行新部署和原地升级——两者均通过,0 个产品 bug。升级轮次验证了 operator 已滚动到新镜像、上一版 ClusterServiceVersion 已被替换,并且升级前数据保持完整。
  • 持续集成:operator 端到端套件在精确标记的 commit 上通过。
  • 范围:这是一个仅 operator 的补丁发版,因此并未再次执行性能和稳定性认证——没有 operand 镜像发生变化,所以为 v1.29.1-acp.1 测得的数据平面特性继续适用。上述功能轮次运行于 ACP 4.3 / amd64 / PostgreSQL 18;其他架构和 PostgreSQL 主版本由于构建方式保持不变,而不是通过重新测量确认。

升级

支持并已验证从 v1.29.1-acp.1 进行原地升级。请参见 升级

v1.29.1-acp.1 (2026-06-11, GA)

Alauda 版 CloudNativePG 的首个 General Availability 发版,基于上游 CNPG v1.29.1。这是相较于 v1.29.0-acp.x preview 线的一个安全 + 能力发版:所有 operand 镜像都以已修复 CVE、加固合规的基础镜像重新构建,operand 内扩展集得到扩展,并且现在已内置 Barman Cloud 备份。

亮点

  • 现在已内置 Barman Cloud 备份(解决 Alpha 版本中的已知限制):plugin-barman-cloud operator plugin + sidecar(0.12.0)随 bundle 一并交付。 对象存储备份/恢复和 PITR 可直接开箱即用,同时还支持 CSI VolumeSnapshot 备份路径。
  • 扩展了 operand 内扩展standard PostgreSQL operands 现在除了 pgvector 0.8.2pgauditpg_failover_slots 之外,还编译内置 PostGIS 3.6.3zhparser 2.4 以及 TimescaleDB 2.27.2(Apache-2 OSS)。这些扩展无需启用 Kubernetes ImageVolume feature gate(ACP 默认关闭)即可使用——不需要 overlay 镜像。
  • IPv6 单栈修复:operator 现在在构建实例 URL 时会正确地为 IPv6 Pod 地址加括号(上游 #10682 的前移移植)。HA cluster 现在可以在 单栈 IPv6 的 ACP cluster 上正常收敛;此前 cluster 可能会冻结在单个实例上。
  • 安全与合规:通过一次不依赖 gnupg 的重建移除了构建时 gnupg 依赖(以及 CVE-2026-24882);红线加固(nologin 账户、无嗅探工具、无敏感构建产物、扁平化层)已应用到所有镜像。 任何已交付镜像上都没有可修复的 HIGH/CRITICAL CVE。
  • 多架构:operator、plugin、bundle 和 PostgreSQL 容器镜像均支持 amd64 + arm64。

按 PostgreSQL 主版本划分的扩展支持

PG 主版本pgvectorpgauditpostgis (3.6.3)zhparser (2.4)timescaledb (Apache-2 OSS 2.27.2)
14✗(不可用)
15
16
17
18

TimescaleDB 仅以 Apache-2(OSS) 版本交付(与现有 Zalando/Spilo 栈保持一致)——受 TSL 约束的功能(压缩/列存、continuous aggregates)被有意移除。Debian trixie 上没有适用于 PG 14 的 OSS TimescaleDB;请将 PG 14 的 TimescaleDB 工作负载迁移到 PG 15+

已知问题 / 限制

  • pgaudit 必须以声明式方式启用。 它是一个由 operator 管理、通过 shared_preload_libraries 加载的扩展——请通过 spec.postgresql.shared_preload_libraries + pgaudit.* 参数进行设置。手动执行 CREATE EXTENSION pgaudit 会在下一次重启时被 operator 移除。请参见 配置 → 扩展
  • 残留的 base-OS 未修复 CVE(Debian trixie,fix_available=false,已通过提交的安全例外被接受):ncurses(CVE-2025-69720)、libxml2(CVE-2026-6732)、perl/Archive::Tar(CVE-2026-42496 / 8376 / 42497 / 9538)。这些包不在 PostgreSQL 运行时路径上。
  • PostGIS GDAL 传递依赖的未修复 HIGH 问题:打包 PostGIS 会拉入完整的 GDAL driver 栈(libgdal36 → poppler/heif/curl/...),其中 codec 库里包含 Debian 尚未修复的 HIGH CVE(libheif1libpoppler147libgdal36libcurl*libexpat1libgif7libssh2-1t64)。已接受的理由是:PostGIS 核心地理空间/栅格路径不会调用 PDF/HEIF codec driver。 没有可修复的 HIGH/CRITICAL 问题。

验证摘要

  • 功能验证:R1 新部署(arm64 + 单栈 IPv6 + 双栈,TopoLVM)+ R2 原地升级(v1.29.0-acp.2v1.29.1-acp.1)——100% 通过,0 个产品 bug。已在真实单栈 IPv6 环境中验证 IPv6 修复(3/3 个实例收敛;前一个构建在同一环境下会冻结在 1/3)。
  • 性能:在全部 8 个场景中达到或优于现有的 Zalando operator。
  • 稳定性:在持续负载下进行了 24 小时 soak 测试——无内存泄漏、0 次重启/OOM/failover。
  • 高可用性:6/6 个健壮性场景(pod/PVC 删除、分区、重启、关机)——failover 并重新收敛,RPO = 0

升级

已验证可从 v1.29.0-acp.2 进行原地升级(operand 替换;数据完整、replica 和元数据正确、0 次崩溃)。请参见 升级

v1.29.0-acp.1 (2026-05-08, Alpha)

Alauda 版 CloudNativePG 的首个发版。基于上游 CNPG v1.29.0

亮点

  • 空气隔离环境支持:PG 14、15、16、17、18 的 PostgreSQL 容器镜像(standardminimal 两种变体)、pgaudit/pgvector/pgbouncer 扩展,均已镜像到 build-harbor.alauda.cn/middleware/cnpg/...
  • 镜像重写容忍:在 CSV 中内置 ENABLE_IMAGE_REWRITE_TOLERANCE=true,因此 admission 阶段的镜像重写(镜像仓库替换)不会触发 PostgreSQL primary pods 的虚假滚动升级。
  • 预置默认镜像POSTGRES_IMAGE_NAME=cnpg/postgresql:18.3-standard-trixiePGBOUNCER_IMAGE_NAME=cnpg/pgbouncer:1.25.1(rolling tag,可通过镜像仓库解析)。原生社区 quickstart 的 Cluster 和 Pooler CR 无需修改即可工作。
  • L5 RBACcpaas:middleware-cnpg:business-ns:{admin,edit,view,backup,restore} ClusterRole,以及 ClusterImageCatalog 的配套 cluster-scope:*-base 角色。聚合标签面向 ACP aggregate-to-namespace-admin / aggregate-to-namespace-developer
  • 多架构:operator、plugin、bundle 和 PostgreSQL 容器均支持 amd64 + arm64。

已知限制

  • 备份:本发版未内置 Barman Cloud plugin。Alpha 之后将以独立的兄弟包(cloudnative-pg-barman-cloud-plugin)形式交付。
  • 从带 rc 后缀的构建通过 OLM 升级:由于严格的 SemVer §11 排序,带有 rc.X.gSHA 后缀的 ArtifactVersion 在 semver 排序上高于其不带后缀的 release tag。从预发布构建升级需要使用 历史版本恢复流程

已验证的安装路径

  • 在 ACP IDP-style cluster 上全新安装:bundle 可通过 Subscription 干净部署,且无需固定 startingCSV。CSV 在 30 秒内进入 Succeeded。
  • 3 实例 Cluster CR 使用默认镜像(POSTGRES_IMAGE_NAME rolling tag)和裸 storageClass 引用后,可在约 2 分钟内达到“Cluster in healthy state”。
  • 通过 TCP 使用 psql -h <cluster>-rw 连接并自动生成 app-user 密码,可直接开箱即用(将 <cluster> 替换为 Cluster CR 名称)。
  • 故障切换(在 primary 上执行 kubectl delete pod):operator 会在数秒内将一个 replica 提升为 primary。