Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
b038b9d
K8SPSMDB-1533 Documented naming conventions for Helm install (#330)
nastena1606 Jun 1, 2026
6265087
K8SPSMDB-680 Documented disabling localhost authentication bypass (…
nastena1606 Jun 2, 2026
08c639a
K8SPSMDB-1635 Documented the option to configure PMM auth mechanism (…
nastena1606 Jun 22, 2026
1e6df8b
K8SPSMDB-1669 IRSA doc improvements (#329)
nastena1606 Jun 22, 2026
b66aa35
K8SPSMDB-1571 Documented the ability to configure reconciliation inte…
nastena1606 Jul 6, 2026
709fe8c
K8SPSMDB-1458 Added TLS certificate management policy documentation a…
nastena1606 Jul 10, 2026
908f1c3
K8SPSMDB-1546 Documented the query data source for PMM (#351)
nastena1606 Jul 10, 2026
e91debb
K8SPSMDB-1572 Documented the revisionHistoryLimit option, added a sec…
nastena1606 Jul 10, 2026
5bb9eac
K8SPSMDB-1608 Documented the ExternalDNS configuration (#340)
nastena1606 Jul 13, 2026
2d8b8f2
K8SPSMDB-1543 Documented user deletion policy (#365)
nastena1606 Jul 20, 2026
71d418f
K8SPSMDB-1519 Documented the support of Alibaba OSS (#358)
nastena1606 Jul 23, 2026
7355e81
K8SPSMDB-1530 Updated the API doc to address requested use cases (#367)
nastena1606 Jul 23, 2026
f07460f
K8SPSMDB-1363 Documented the support of PVC snapshots (#333)
nastena1606 Jul 23, 2026
0eff8fa
K8SPSMDB-1413 Documented the use of ClusterIssuer (#349)
nastena1606 Jul 23, 2026
da00283
K8SPSMDB-1596 Documented how to install on Rancher (#360)
nastena1606 Jul 23, 2026
b291564
K8SPSMDB-1537-Documented the new Secret type - connection secret (#350)
nastena1606 Jul 23, 2026
a684e5a
K8sPSMDB-1701, K8sPSMDB-1728 custom readiness liveness probes for pm…
nastena1606 Jul 23, 2026
1c777d3
K8SPSMDB-1602 Documented Workload Identity support for GCS (#353)
nastena1606 Jul 23, 2026
2977eae
K8 spsmdb 1610 doc pscm support (#352)
nastena1606 Jul 23, 2026
3b6d4f5
K8SPSMDB-1634 Removed Red Hat Marketplace from docs (#368)
nastena1606 Jul 23, 2026
c94881d
K8SPSMDB-1654 Documented support for vector search (#361)
nastena1606 Jul 23, 2026
b0d05c8
Merge branch 'main' into 1.23.0
nastena1606 Jul 23, 2026
dbe20c1
K8SPSMDB-1761 Release notes 1.23.0 (#364)
nastena1606 Jul 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/RN/Kubernetes-Operator-for-PSMONGODB-RN1.22.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ Learn more about the workflow and the setup in our [documentation](../system-use

The Operator deprecates the support of Percona Server for MongoDB 6.0 as this major version entered end-of-life stage. You can still run Percona Server for MongoDB 6.0 in the Operator and existing functionality remains compatible. However, we will no longer test new features and improvements against this version.

Percona Server for MongoDB 6.0 will be removed from the Operator in version 1.23.0.
Percona Server for MongoDB 6.0 will be removed from the Operator in version 1.24.0.

### Deprecated support for PMM2

Expand Down
479 changes: 479 additions & 0 deletions docs/RN/Kubernetes-Operator-for-PSMONGODB-RN1.23.0.md

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions docs/RN/index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Percona Operator for MongoDB Release Notes

- [Percona Operator for MongoDB 1.23.0 ({{date.1_23_0}})](Kubernetes-Operator-for-PSMONGODB-RN1.23.0.md)
- [Percona Operator for MongoDB 1.22.0 ({{date.1_22_0}})](Kubernetes-Operator-for-PSMONGODB-RN1.22.0.md)
- [Percona Operator for MongoDB 1.21.2 ({{date.1_21_2}})](Kubernetes-Operator-for-PSMONGODB-RN1.21.2.md)
- [Percona Operator for MongoDB 1.21.1 ({{date.1_21_1}})](Kubernetes-Operator-for-PSMONGODB-RN1.21.1.md)
Expand Down
1 change: 1 addition & 0 deletions docs/System-Requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,6 @@ Choose how you wish to install the Operator:
* [on Google Kubernetes Engine (GKE)](gke.md)
* [on Amazon Elastic Kubernetes Service (AWS EKS)](eks.md)
* [on Microsoft Azure Kubernetes Service (AKS)](aks.md)
* [on Rancher Kubernetes Engine (RKE2)](rke2.md)
* [on Openshift](openshift.md)
* [in a Kubernetes-based environment](kubernetes.md)
69 changes: 49 additions & 20 deletions docs/TLS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ Percona Operator for MongoDB uses Transport Layer Security (TLS) cryptographic p
* External - to enable client applications communicate with the cluster
* Internal - for communication between Percona Server for MongoDB instances in the cluster. The internal certificate is also used as an authorization method.

These certificates are stored in Secrets. Default Secret names are `<cluster-name>-ssl` and `<cluster-name>-ssl-internal`. These Secrets are referenced in the `secrets.ssl` and `secrets.sslInternal` Custom Resource options.

You control TLS usage with the `tls.mode` option in the Custom Resource. This setting defines how Percona Server for MongoDB cluster handles TLS for both internal and external connections. You can choose from the following modes:

- `allowTLS`: The cluster accepts both TLS and non-TLS incoming connections, but does not use TLS for internal communication.
Expand All @@ -24,24 +26,59 @@ spec:

## TLS Certificates

TLS security can be configured in several ways:
You can configure TLS security in several ways:

| Approach | Best for | Renewal |
| -------- | -------- | ------- |
| Operator-generated certificates (default) | Quick start, development | Manual |
| cert-manager with Operator-managed issuers | Automated TLS without external PKI | Automatic (cert-manager) |
| cert-manager with your existing `Issuer` or `ClusterIssuer` | Production clusters that use the organization's PKI (Smallstep, ACME, etc.) | Automatic (cert-manager) |
| Manual Secrets | Full control, air-gapped or custom PKI workflows | Manual |

* By default, the Operator generates long-term certificates automatically during the cluster creation if there are no
certificate secrets available and no cert-manager is installed. When generating certificates, the Operator creates two Secrets objects named `<cluster-name>-ssl` and `<cluster-name>-ssl-internal`. These Secrets are referenced in the `secrets.ssl` and `secrets.sslInternal` options in the Custom Resource.

* The Operator generates long-term certificates automatically during the cluster creation if there are no
certificate secrets available. When generating certificates, the Operator creates two Secrets objects named `<cluster-name>-ssl` and `<cluster-name>-ssl-internal`. These Secrets are also referenced in the `secrets.ssl` and `secrets.sslInternal` options in the Custom Resource.
Operator-generated certificates are not renewed automatically. You must renew them manually if you need new certificates.

This is the default behavior. If you need new certificates, and you must renew them manually.
To allow certificates automatically generated by the Operator, the [tls.allowInvalidCertificates](operator.md#tlsallowinvalidcertificates)
Custom Resource option is set to `true` by default. You can set it to `false` when using other certificate generation methods, such as cert-manager with a trusted CA.

To allow certificates automatically generated by the Operator, the [tls.allowInvalidCertificates](operator.md#tlsallowinvalidcertificates)
Custom Resource option is set to `true` by default. You can set it to `false` when using other certificate generation methods, such as using cert-manager.
* The Operator can use an installed *cert-manager* to automatically generate and
renew short-term TLS certificates. By default it creates namespace-scoped issuers
in the database namespace. Starting with Operator 1.23.0, you can also point it
at an existing cluster-wide [`ClusterIssuer`](tls-cert-manager.md#use-an-existing-clusterissuer)
so MongoDB certificates are signed by your organization's CA.
* You can [generate TLS certificates manually](tls-manual.md) and pass them to the Operator as Kubernetes Secrets.

* The Operator can use a specifically installed *cert-manager*, which will
automatically generate and renew short-term TLS certificates
* You can generate TLS certificates manually.

**For testing purposes**, you can use pre-generated certificates available in the
**For testing purposes**, you can use pre-generated certificates available in the
`deploy/ssl-secrets.yaml` file. But we strongly recommend
**to not use them on any production system**!

### Certificate management policy

Starting with Operator version 1.23.0, you can control what happens when TLS Secrets are missing via the `spec.tls.certManagementPolicy` option in the Custom Resource:

* `auto` (default) — If Secrets are not found, the Operator creates new certificates automatically (self-signed or via cert-manager). New certificates can replace a lost user-managed Secret with a **new CA**, which triggers a rolling restart of all database Pods, and can disconnect clients that trust the original CA.
* `userProvidedOnly` — The Operator skips auto-creation or replacement of unavailable TLS certificates, so that you control the certificate lifecycle management (manually, via External Secrets, GitOps, or your own cert-manager workflow). If a Secret is missing, Pods keep running with existing certificates where possible, and the Operator sets the `TLSSecretsReady=False` condition until you restore the Secret.

| Your setup | Recommended policy |
|------------|-------------------|
| Operator self-signed or Operator-driven cert-manager | `auto` |
| Manual, External Secrets, or GitOps-managed TLS Secrets in production | `userProvidedOnly` |

Example:

```yaml
spec:
tls:
mode: preferTLS
certManagementPolicy: userProvidedOnly
secrets:
ssl: my-cluster-name-ssl
sslInternal: my-cluster-name-ssl-internal
```

See [Configure the TLS certificate management policy](tls-cert-management-policy.md) for setup steps, monitoring, recovery, and policy switching.

## TLS configuration

Expand All @@ -50,17 +87,9 @@ The following sections provide guidelines how to:
* [Configure TLS security with the Operator using cert-manager](tls-cert-manager.md)
* [Generate certificates manually](tls-manual.md)
* [Update certificates](tls-update.md)
* [Configure the TLS certificate management policy](tls-cert-management-policy.md)
* [Disable TLS temporarily](tls-disable.md)

To use TLS for external traffic, you need to additionally configure your client application. See [this blog post :octicons-link-external-16:](https://www.percona.com/blog/authenticating-your-clients-to-mongodb-on-kubernetes-using-x509-certificates/) for detailed instruction with examples. Also, you can check the [official MongoDB documentation :octicons-link-external-16:](https://www.mongodb.com/docs/manual/tutorial/configure-ssl-clients/).

For clients outside of your Kubernetes-based environment, you must also [expose your cluster](expose.md).









5 changes: 4 additions & 1 deletion docs/annotations.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ Use **Annotations** when:
| `percona.com/ssl-hash` | Pods | Stores the hash of the most recent TLS configuration |
| `percona.com/ssl-internal-hash` | Pods | Stores the hash of the most recent TLS configuration for internal communication |
| `percona.com/passwords-updated`| Secrets | Indicates when passwords were last updated in the Secret |
| `percona.com/external-dns-managed` | Services | Set by the Operator when External DNS `/hostname` and `/ttl` annotations are generated from values defined in `expose.externalDNS`. Marks ownership of those annotations. Do not set or remove it manually. See [How the Operator manages External DNS annotations](expose.md#how-the-operator-manages-external-dns-annotations). | `"true"` |
| `kubectl.kubernetes.io/restartedAt` | PVC | Records the most recent timestamp when the associated resource was intentionally restarted. This annotation is typically used to trigger rolling restarts of StatefulSets, ensuring Pods or PVCs are refreshed according to Kubernetes best practices. | `2026-02-01T12:34:56Z` |

## Setting labels and annotations in the Custom Resource
Expand Down Expand Up @@ -182,4 +183,6 @@ spec:
...
```

The label and annotation values must exactly match the ones defined for the Service to be kept.
The label and annotation values must exactly match the ones defined for the Service to be kept.

External DNS annotations follow separate ownership rules. The Operator manages `external-dns.alpha.kubernetes.io/hostname` and `/ttl` only on Services marked with `percona.com/external-dns-managed`. Manual External DNS annotations on unmarked Services, and other External DNS keys such as `/target` or `/alias`, are preserved and do not need to be listed in `ignoreAnnotations`. See [How the Operator manages External DNS annotations](expose.md#how-the-operator-manages-external-dns-annotations) for details.
Loading