Skip to content

Commit e34b8e4

Browse files
committed
docs: import CloudNativePG v1.27.4
1 parent 941e525 commit e34b8e4

28 files changed

+670
-194
lines changed

website/versioned_docs/version-1.27/bootstrap.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ file on the source PostgreSQL instance:
614614
host replication streaming_replica all md5
615615
```
616616

617-
The following manifest creates a new PostgreSQL 18.1 cluster,
617+
The following manifest creates a new PostgreSQL 18.3 cluster,
618618
called `target-db`, using the `pg_basebackup` bootstrap method
619619
to clone an external PostgreSQL cluster defined as `source-db`
620620
(in the `externalClusters` array). As you can see, the `source-db`
@@ -629,7 +629,7 @@ metadata:
629629
name: target-db
630630
spec:
631631
instances: 3
632-
imageName: ghcr.io/cloudnative-pg/postgresql:18.1-system-trixie
632+
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
633633
634634
bootstrap:
635635
pg_basebackup:
@@ -649,7 +649,7 @@ spec:
649649
```
650650

651651
All the requirements must be met for the clone operation to work, including
652-
the same PostgreSQL version (in our case 18.1).
652+
the same PostgreSQL version (in our case 18.3).
653653

654654
#### TLS certificate authentication
655655

@@ -665,7 +665,7 @@ in the same Kubernetes cluster.
665665
outside the Kubernetes cluster.
666666
:::
667667

668-
The manifest defines a new PostgreSQL 18.1 cluster called `cluster-clone-tls`,
668+
The manifest defines a new PostgreSQL 18.3 cluster called `cluster-clone-tls`,
669669
which is bootstrapped using the `pg_basebackup` method from the `cluster-example`
670670
external cluster. The host is identified by the read/write service
671671
in the same cluster, while the `streaming_replica` user is authenticated
@@ -680,7 +680,7 @@ metadata:
680680
name: cluster-clone-tls
681681
spec:
682682
instances: 3
683-
imageName: ghcr.io/cloudnative-pg/postgresql:18.1-system-trixie
683+
imageName: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
684684
685685
bootstrap:
686686
pg_basebackup:

website/versioned_docs/version-1.27/cloudnative-pg.v1.md

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,7 @@ _Appears in:_
443443
| --- | --- | --- | --- | --- |
444444
| `image` _string_ | The image reference | True | | |
445445
| `major` _integer_ | The PostgreSQL major version of the image. Must be unique within the catalog. | True | | Minimum: 10 <br /> |
446+
| `extensions` _[ExtensionConfiguration](#extensionconfiguration) array_ | The configuration of the extensions to be added | | | |
446447

447448

448449
#### CertificatesConfiguration
@@ -967,15 +968,37 @@ PostgreSQL extensions to the Cluster.
967968

968969
_Appears in:_
969970

971+
- [CatalogImage](#catalogimage)
970972
- [PostgresConfiguration](#postgresconfiguration)
971973

972974
| Field | Description | Required | Default | Validation |
973975
| --- | --- | --- | --- | --- |
974976
| `name` _string_ | The name of the extension, required | True | | MinLength: 1 <br />Pattern: `^[a-z0-9]([-a-z0-9_]*[a-z0-9])?$` <br /> |
975-
| `image` _[ImageVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#imagevolumesource-v1-core)_ | The image containing the extension, required | True | | |
977+
| `image` _[ImageVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#imagevolumesource-v1-core)_ | The image containing the extension. | | | |
976978
| `extension_control_path` _string array_ | The list of directories inside the image which should be added to extension_control_path.<br />If not defined, defaults to "/share". | | | |
977979
| `dynamic_library_path` _string array_ | The list of directories inside the image which should be added to dynamic_library_path.<br />If not defined, defaults to "/lib". | | | |
978980
| `ld_library_path` _string array_ | The list of directories inside the image which should be added to ld_library_path. | | | |
981+
| `bin_path` _string array_ | A list of directories within the image to be appended to the<br />PostgreSQL process's `PATH` environment variable. | | | |
982+
| `env` _[ExtensionEnvVar](#extensionenvvar) array_ | Env is a list of custom environment variables to be set in the<br />PostgreSQL process for this extension. It is the responsibility of the<br />cluster administrator to ensure the variables are correct for the<br />specific extension. Note that changes to these variables require<br />a manual cluster restart to take effect. | | | |
983+
984+
985+
#### ExtensionEnvVar
986+
987+
988+
989+
ExtensionEnvVar defines an environment variable for a specific extension
990+
image volume.
991+
992+
993+
994+
_Appears in:_
995+
996+
- [ExtensionConfiguration](#extensionconfiguration)
997+
998+
| Field | Description | Required | Default | Validation |
999+
| --- | --- | --- | --- | --- |
1000+
| `name` _string_ | Name of the environment variable to be injected into the<br />PostgreSQL process. | True | | MinLength: 1 <br />Pattern: `^[a-zA-Z_][a-zA-Z0-9_]*$` <br /> |
1001+
| `value` _string_ | Value of the environment variable. CloudNativePG performs a direct<br />replacement of this value, with support for placeholder expansion.<br />The $\{`image_root`\} placeholder resolves to the absolute mount path<br />of the extension's volume (e.g., `/extensions/my-extension`). This<br />is particularly useful for allowing applications or libraries to<br />locate specific directories within the mounted image.<br />Unrecognized placeholders are rejected. To include a literal $\{...\}<br />in the value, escape it as $$\{...\}. | True | | MinLength: 1 <br /> |
9791002

9801003

9811004
#### ExtensionSpec
@@ -1892,8 +1915,9 @@ _Appears in:_
18921915

18931916
_Underlying type:_ _string_
18941917

1895-
PrimaryUpdateMethod contains the method to use when upgrading
1896-
the primary server of the cluster as part of rolling updates
1918+
PrimaryUpdateMethod defines the method to use when upgrading
1919+
the primary instance of the cluster as part of rolling updates.
1920+
The default method is "restart"
18971921

18981922

18991923

website/versioned_docs/version-1.27/cnpg_i.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ CNPG-I is inspired by the Kubernetes
4141
The operator communicates with registered plugins using **gRPC**, following the
4242
[CNPG-I protocol](https://github.com/cloudnative-pg/cnpg-i/blob/main/docs/protocol.md).
4343

44-
CloudNativePG discovers plugins **at startup**. You can register them in one of two ways:
44+
You can register plugins in one of two ways:
4545

4646
- Sidecar container – run the plugin inside the operator’s Deployment
4747
- Standalone Deployment – run the plugin as a separate workload in the same
@@ -51,7 +51,9 @@ In both cases, the plugin must be packaged as a container image.
5151

5252
### Sidecar Container
5353

54-
When running as a sidecar, the plugin must expose its gRPC server via a **Unix
54+
Sidecar plugins are discovered once at operator startup.
55+
56+
The plugin must expose its gRPC server via a **Unix
5557
domain socket**. This socket must be placed in a directory shared with the
5658
operator container, mounted at the path set in `PLUGIN_SOCKET_DIR` (default:
5759
`/plugin`).
@@ -89,11 +91,8 @@ spec:
8991
Running a plugin as its own Deployment decouples its lifecycle from the
9092
operator’s and allows independent scaling. In this setup, the plugin exposes a
9193
TCP gRPC endpoint behind a Service, with **mTLS** for secure communication.
92-
93-
:::warning
94-
CloudNativePG does **not** discover plugins dynamically. If you deploy a new
95-
plugin, you must **restart the operator** to detect it.
96-
:::
94+
Standalone plugins are discovered dynamically by watching for Services with the
95+
required labels and annotations — no operator restart is needed.
9796
9897
Example Deployment:
9998

website/versioned_docs/version-1.27/connection_pooling.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,8 +356,9 @@ The operator manages most of the [configuration options for PgBouncer](https://w
356356
allowing you to modify only a subset of them.
357357

358358
:::warning
359-
You are responsible for correctly setting the value of each option, as the
360-
operator doesn't validate them.
359+
The operator passes these settings directly to PgBouncer without validation.
360+
To prevent configuration errors or crash loops, ensure each parameter is
361+
supported by your specific PgBouncer image version.
361362
:::
362363

363364
These are the PgBouncer options you can customize, with links to the PgBouncer
@@ -370,7 +371,9 @@ are the ones directly set by PgBouncer.
370371
- [`cancel_wait_timeout`](https://www.pgbouncer.org/config.html#cancel_wait_timeout)
371372
- [`client_idle_timeout`](https://www.pgbouncer.org/config.html#client_idle_timeout)
372373
- [`client_login_timeout`](https://www.pgbouncer.org/config.html#client_login_timeout)
374+
- [`client_tls_ciphers`](https://www.pgbouncer.org/config.html#client_tls_ciphers)
373375
- [`client_tls_sslmode`](https://www.pgbouncer.org/config.html#client_tls_sslmode)
376+
- [`client_tls13_ciphers`](https://www.pgbouncer.org/config.html#client_tls13_ciphers) (1.25+)
374377
- [`default_pool_size`](https://www.pgbouncer.org/config.html#default_pool_size)
375378
- [`disable_pqexec`](https://www.pgbouncer.org/config.html#disable_pqexec)
376379
- [`dns_max_ttl`](https://www.pgbouncer.org/config.html#dns_max_ttl)
@@ -408,6 +411,7 @@ are the ones directly set by PgBouncer.
408411
- [`server_reset_query_always`](https://www.pgbouncer.org/config.html#server_reset_query_always)
409412
- [`server_round_robin`](https://www.pgbouncer.org/config.html#server_round_robin)
410413
- [`server_tls_ciphers`](https://www.pgbouncer.org/config.html#server_tls_ciphers)
414+
- [`server_tls13_ciphers`](https://www.pgbouncer.org/config.html#server_tls13_ciphers) (1.25+)
411415
- [`server_tls_protocols`](https://www.pgbouncer.org/config.html#server_tls_protocols)
412416
- [`server_tls_sslmode`](https://www.pgbouncer.org/config.html#server_tls_sslmode)
413417
- [`stats_period`](https://www.pgbouncer.org/config.html#stats_period)

website/versioned_docs/version-1.27/declarative_hibernation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ $ kubectl cnpg status <cluster-name>
5757
Cluster Summary
5858
Name: cluster-example
5959
Namespace: default
60-
PostgreSQL Image: ghcr.io/cloudnative-pg/postgresql:18.1-system-trixie
60+
PostgreSQL Image: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
6161
Primary instance: cluster-example-2
6262
Status: Cluster in healthy state
6363
Instances: 3

website/versioned_docs/version-1.27/declarative_role_management.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,23 @@ stringData:
179179
password: SCRAM-SHA-256$<iteration count>:<salt>$<StoredKey>:<ServerKey>
180180
```
181181

182+
### Safety when transmitting cleartext passwords
183+
184+
While role passwords are safely managed in Kubernetes using Secrets,
185+
there is still a risk on the PostgreSQL side. If creating/altering a role with
186+
password, PostgreSQL may print the password as part of the query statement
187+
in some `postgres` logs, as mentioned in the [PostgreSQL documentation](https://www.postgresql.org/docs/current/sql-createrole.html):
188+
189+
> The password will be transmitted to the server in cleartext, and it might
190+
> also be logged in the client's command history or the server log
191+
192+
CloudNativePG adds a safety layer by temporarily suppressing both statement
193+
logging (`log_statement`) and error statement logging
194+
(`log_min_error_statement`) for any CREATE or ALTER operation on a role with
195+
password, thus preventing leakage in both success and failure scenarios.
196+
The Status section of the cluster does not print the query statement for any
197+
managed role operation.
198+
182199
## Unrealizable role configurations
183200

184201
In PostgreSQL, in some cases, commands cannot be honored by the database and

website/versioned_docs/version-1.27/image_catalog.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ spec:
4444
- major: 17
4545
image: ghcr.io/cloudnative-pg/postgresql:17.6-system-trixie
4646
- major: 18
47-
image: ghcr.io/cloudnative-pg/postgresql:18.1-system-trixie
47+
image: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
4848
```
4949
5050
**Example of a Cluster-Wide Catalog using `ClusterImageCatalog` Resource:**
@@ -63,7 +63,7 @@ spec:
6363
- major: 17
6464
image: ghcr.io/cloudnative-pg/postgresql:17.6-system-trixie
6565
- major: 18
66-
image: ghcr.io/cloudnative-pg/postgresql:18.1-system-trixie
66+
image: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie
6767
```
6868

6969
A `Cluster` resource has the flexibility to reference either an `ImageCatalog`

website/versioned_docs/version-1.27/imagevolume_extensions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Extension images must be built according to the
4848
To use image volume extensions with CloudNativePG, you need:
4949

5050
- **PostgreSQL 18 or later**, with support for `extension_control_path`.
51-
- **Kubernetes 1.33**, with the `ImageVolume` feature gate enabled.
51+
- **Kubernetes 1.35** or later (1.33 and 1.34 with the `ImageVolume` feature gate enabled).
5252
- **Container runtime with `ImageVolume` support**:
5353
- `containerd` v2.1.0 or later, or
5454
- `CRI-O` v1.31 or later.

website/versioned_docs/version-1.27/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ container images for both the operator and PostgreSQL (the operand).
6464

6565
The CloudNativePG operator container images are available on the
6666
[`cloudnative-pg` project's GitHub Container Registry](https://github.com/cloudnative-pg/cloudnative-pg/pkgs/container/cloudnative-pg)
67-
in three different flavors:
67+
in two different flavors:
6868

6969
- Debian 12 distroless
7070
- Red Hat UBI 9 micro (suffix `-ubi9`)
@@ -99,7 +99,7 @@ Three image flavors are available, each extending the previous one:
9999
Barman Cloud plugin, or another supported backup solution.
100100
:::
101101

102-
By default, this version of CloudNativePG deploys `ghcr.io/cloudnative-pg/postgresql:18.1-system-trixie`.
102+
By default, this version of CloudNativePG deploys `ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie`.
103103

104104
All images are signed and shipped with SBOM and provenance attestations.
105105
Weekly automated builds ensure that critical vulnerabilities (CVEs) are promptly fixed.

website/versioned_docs/version-1.27/installation_upgrade.md

Lines changed: 111 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ title: Installation and upgrades
1414
The operator can be installed like any other resource in Kubernetes,
1515
through a YAML manifest applied via `kubectl`.
1616

17-
You can install the [latest operator manifest](https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.27/releases/cnpg-1.27.3.yaml)
17+
You can install the [latest operator manifest](https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.27/releases/cnpg-1.27.4.yaml)
1818
for this minor release as follows:
1919

2020
```sh
2121
kubectl apply --server-side -f \
22-
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.27/releases/cnpg-1.27.3.yaml
22+
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.27/releases/cnpg-1.27.4.yaml
2323
```
2424

2525
You can verify that with:
@@ -32,7 +32,7 @@ kubectl rollout status deployment \
3232
### Using the `cnpg` plugin for `kubectl`
3333

3434
You can use the `cnpg` plugin to override the default configuration options
35-
that are in the static manifests.
35+
that are in the static manifests.
3636

3737
For example, to generate the default latest manifest but change the watch
3838
namespaces to only be a specific namespace, you could run:
@@ -44,7 +44,7 @@ kubectl cnpg install generate \
4444
```
4545

4646
Please refer to ["`cnpg` plugin"](./kubectl-plugin.md#generation-of-installation-manifests) documentation
47-
for a more comprehensive example.
47+
for a more comprehensive example.
4848

4949
:::warning
5050
If you are deploying CloudNativePG on GKE and get an error (`... failed to
@@ -361,3 +361,110 @@ that apply declarative changes to enable or disable hibernation.
361361
The `hibernate status` command has been removed, as its purpose is now
362362
fulfilled by the standard `status` command.
363363

364+
## Verifying release assets
365+
366+
CloudNativePG cryptographically signs all official release assets. Verifying these
367+
signatures ensures the assets originate from the official repository and were
368+
published through our automated release workflow.
369+
370+
:::info
371+
Refer to the ["Release integrity and supply chain" section](security.md#release-integrity-and-supply-chain)
372+
for more information.
373+
:::
374+
375+
### Prerequisites
376+
377+
- **Signature verification:** [cosign](https://github.com/sigstore/cosign) CLI
378+
- **SBOM and Provenance:** [Docker Buildx](https://docs.docker.com/build/install-buildx/)
379+
(included in Docker Desktop and modern Docker versions)
380+
381+
### Verifying the Operator YAML Deployment
382+
383+
When installing via a direct YAML manifest, you should verify the manifest file
384+
using the corresponding bundle (the `.sigstore.json` file) provided on the
385+
[GitHub Release page](https://github.com/cloudnative-pg/cloudnative-pg/releases).
386+
387+
Run the following command:
388+
389+
```bash
390+
cosign verify-blob \
391+
cnpg-{version}.yaml \
392+
--bundle cnpg-{version}.sigstore.json \
393+
--certificate-identity-regexp "^https://github.com/cloudnative-pg/cloudnative-pg/.github/workflows/release-publish.yml@refs/tags/v" \
394+
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"
395+
```
396+
397+
#### Verifying SLSA provenance
398+
399+
To verify a release binary, download both the artifact and the provenance file
400+
(`multiple.intoto.jsonl`) from the
401+
[GitHub release](https://github.com/cloudnative-pg/cloudnative-pg/releases),
402+
then run:
403+
404+
```shell
405+
slsa-verifier verify-artifact <ARTIFACT> \
406+
--provenance-path multiple.intoto.jsonl \
407+
--source-uri github.com/cloudnative-pg/cloudnative-pg
408+
```
409+
410+
### Verifying the operator container images
411+
412+
Run the following command to verify the signature of the CloudNativePG operator
413+
images:
414+
415+
```bash
416+
cosign verify ghcr.io/cloudnative-pg/cloudnative-pg:{tag} \
417+
--certificate-identity-regexp="^https://github.com/cloudnative-pg/cloudnative-pg/.github/workflows/release-publish.yml@refs/tags/v" \
418+
--certificate-oidc-issuer="https://token.actions.githubusercontent.com"
419+
```
420+
421+
We provide OCI attestations for full transparency. To inspect the Software Bill
422+
of Materials (SBOM) or build provenance, use the `docker buildx imagetools`
423+
command:
424+
425+
To view the Software Bill of Materials (SBOM) in SPDX format:
426+
427+
```bash
428+
docker buildx imagetools inspect ghcr.io/cloudnative-pg/cloudnative-pg:{tag} \
429+
--format '{{ json (index .SBOM "linux/amd64").SPDX }}'
430+
```
431+
432+
To inspect the SLSA Provenance (build details):
433+
434+
```bash
435+
docker buildx imagetools inspect ghcr.io/cloudnative-pg/cloudnative-pg:{tag} \
436+
--format '{{ json (index .Provenance "linux/amd64").SLSA }}'
437+
```
438+
439+
:::info
440+
Refer to ["Verifying SLSA provenance"](security.md#verifying-slsa-provenance)
441+
for SLSA Build Level 3 compliance verification.
442+
:::
443+
444+
### Verifying PostgreSQL operand images
445+
446+
CloudNativePG maintains container images for all supported PostgreSQL versions
447+
as part of the [`postgres-containers` project](https://github.com/cloudnative-pg/postgres-containers)
448+
(also called operand images).
449+
450+
To verify the signature of a specific operand image:
451+
452+
```bash
453+
cosign verify ghcr.io/cloudnative-pg/postgresql:{tag} \
454+
--certificate-identity-regexp="^https://github.com/cloudnative-pg/postgres-containers/" \
455+
--certificate-oidc-issuer="https://token.actions.githubusercontent.com"
456+
```
457+
458+
To view the Software Bill of Materials (SBOM) in SPDX format:
459+
460+
```bash
461+
docker buildx imagetools inspect ghcr.io/cloudnative-pg/postgresql:{tag} \
462+
--format '{{ json (index .SBOM "linux/amd64").SPDX }}'
463+
```
464+
465+
To inspect the SLSA Provenance (Build details):
466+
467+
```bash
468+
docker buildx imagetools inspect ghcr.io/cloudnative-pg/postgresql:{tag} \
469+
--format '{{ json (index .Provenance "linux/amd64").SLSA }}'
470+
```

0 commit comments

Comments
 (0)