Skip to content

Commit 447a2d5

Browse files
committed
docs: import CloudNativePG v1.28.2
1 parent e34b8e4 commit 447a2d5

29 files changed

+833
-213
lines changed

website/versioned_docs/version-1.28/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.28/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
@@ -978,15 +979,37 @@ PostgreSQL extensions to the Cluster.
978979

979980
_Appears in:_
980981

982+
- [CatalogImage](#catalogimage)
981983
- [PostgresConfiguration](#postgresconfiguration)
982984

983985
| Field | Description | Required | Default | Validation |
984986
| --- | --- | --- | --- | --- |
985987
| `name` _string_ | The name of the extension, required | True | | MinLength: 1 <br />Pattern: `^[a-z0-9]([-a-z0-9_]*[a-z0-9])?$` <br /> |
986-
| `image` _[ImageVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#imagevolumesource-v1-core)_ | The image containing the extension, required | True | | |
988+
| `image` _[ImageVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#imagevolumesource-v1-core)_ | The image containing the extension. | | | |
987989
| `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". | | | |
988990
| `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". | | | |
989991
| `ld_library_path` _string array_ | The list of directories inside the image which should be added to ld_library_path. | | | |
992+
| `bin_path` _string array_ | A list of directories within the image to be appended to the<br />PostgreSQL process's `PATH` environment variable. | | | |
993+
| `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. | | | |
994+
995+
996+
#### ExtensionEnvVar
997+
998+
999+
1000+
ExtensionEnvVar defines an environment variable for a specific extension
1001+
image volume.
1002+
1003+
1004+
1005+
_Appears in:_
1006+
1007+
- [ExtensionConfiguration](#extensionconfiguration)
1008+
1009+
| Field | Description | Required | Default | Validation |
1010+
| --- | --- | --- | --- | --- |
1011+
| `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 /> |
1012+
| `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 /> |
9901013

9911014

9921015
#### ExtensionSpec
@@ -1955,8 +1978,9 @@ _Appears in:_
19551978

19561979
_Underlying type:_ _string_
19571980

1958-
PrimaryUpdateMethod contains the method to use when upgrading
1959-
the primary server of the cluster as part of rolling updates
1981+
PrimaryUpdateMethod defines the method to use when upgrading
1982+
the primary instance of the cluster as part of rolling updates.
1983+
The default method is "restart"
19601984

19611985

19621986

website/versioned_docs/version-1.28/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.28/connection_pooling.md

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

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

387388
These are the PgBouncer options you can customize, with links to the PgBouncer
@@ -394,7 +395,9 @@ are the ones directly set by PgBouncer.
394395
- [`cancel_wait_timeout`](https://www.pgbouncer.org/config.html#cancel_wait_timeout)
395396
- [`client_idle_timeout`](https://www.pgbouncer.org/config.html#client_idle_timeout)
396397
- [`client_login_timeout`](https://www.pgbouncer.org/config.html#client_login_timeout)
398+
- [`client_tls_ciphers`](https://www.pgbouncer.org/config.html#client_tls_ciphers)
397399
- [`client_tls_sslmode`](https://www.pgbouncer.org/config.html#client_tls_sslmode)
400+
- [`client_tls13_ciphers`](https://www.pgbouncer.org/config.html#client_tls13_ciphers) (1.25+)
398401
- [`default_pool_size`](https://www.pgbouncer.org/config.html#default_pool_size)
399402
- [`disable_pqexec`](https://www.pgbouncer.org/config.html#disable_pqexec)
400403
- [`dns_max_ttl`](https://www.pgbouncer.org/config.html#dns_max_ttl)
@@ -432,6 +435,7 @@ are the ones directly set by PgBouncer.
432435
- [`server_reset_query_always`](https://www.pgbouncer.org/config.html#server_reset_query_always)
433436
- [`server_round_robin`](https://www.pgbouncer.org/config.html#server_round_robin)
434437
- [`server_tls_ciphers`](https://www.pgbouncer.org/config.html#server_tls_ciphers)
438+
- [`server_tls13_ciphers`](https://www.pgbouncer.org/config.html#server_tls13_ciphers) (1.25+)
435439
- [`server_tls_protocols`](https://www.pgbouncer.org/config.html#server_tls_protocols)
436440
- [`server_tls_sslmode`](https://www.pgbouncer.org/config.html#server_tls_sslmode)
437441
- [`stats_period`](https://www.pgbouncer.org/config.html#stats_period)

website/versioned_docs/version-1.28/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.28/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.28/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.28/imagevolume_extensions.md

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

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

website/versioned_docs/version-1.28/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.28/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.28/releases/cnpg-1.28.1.yaml)
17+
You can install the [latest operator manifest](https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.28/releases/cnpg-1.28.2.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.28/releases/cnpg-1.28.1.yaml
22+
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.28/releases/cnpg-1.28.2.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
@@ -358,3 +358,110 @@ that apply declarative changes to enable or disable hibernation.
358358
The `hibernate status` command has been removed, as its purpose is now
359359
fulfilled by the standard `status` command.
360360

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

0 commit comments

Comments
 (0)