etcd Encryption
Install and operate etcd Encryption Manager in to automate etcd data encryption key rotation within your clusters.
It ensures that sensitive data stored in etcd, such as secrets and configmaps, is encrypted using a secure algorithm, enhancing your cluster's security.
TOC
Key StrategiesInstallationWorkload / DCS Clusters (random strategy)Global Clusters (Deterministic Mode)PrerequisitesPlugin ParametersPreparing the Root SecretAdvanced (chart values, not exposed in the plugin form)How it WorksDefault ConfigurationOperations GuideConfiguration FilesChecking StatusKey Strategies
The plugin supports two key strategies. Pick the one that matches your cluster role.
In deterministic mode, the runtime Active / Standby role is detected automatically; it is not a manual install parameter.
Installation
The plugin supports two installation paths depending on the target cluster:
- Workload / DCS clusters — use the default
randomkey strategy. - Global clusters — must use the
deterministickey strategy (see Global Clusters (Deterministic Mode) below).
See Cluster Plugin for the general plugin installation workflow.
Workload / DCS Clusters (random strategy)
- Supported cluster types: On-Premises, DCS.
- No additional installation parameters are required — install via the standard Cluster Plugin workflow.
Global Clusters (Deterministic Mode)
For a Global DR pair, install the plugin on both the Active and Standby clusters in deterministic mode, and configure identical replication_group_id and root_secret_name (with matching root key material) on both sides. Asymmetric or mismatched configuration causes the Standby to derive different per-revision keys than the Active and breaks failover.
Prerequisites
- The cluster must be a
globalcluster. Whenglobal.cluster.nameisglobal, the chart enforcesetcdEncryption.keyStrategy=deterministic; the plugin UI also defaults the field todeterministicfor clusters labeledis-global=true.
The etcd Synchronizer plugin must be installed at version v4.3.7 or later before installing the etcd Encryption Manager in deterministic mode. Earlier versions do not replicate the shared SeedBundle, so the Standby cluster cannot derive matching keys.
Plugin Parameters
The plugin form exposes the following parameters for deterministic installation. Defaults reflect the current plugin-config.yaml shipped with the chart.
The rootSecretRef.namespace is fixed to kube-system and is not exposed in the form.
key_strategy
For global clusters this must be deterministic.
replication_group_id
Recommendations:
- For DR clusters built with the etcd Synchronizer, both sides of the same DR group must share the same
replication_group_id. - To avoid leaking real business, environment, or cluster identity, do not reuse the cluster name even when the UI prefills it. Plan a separate opaque identifier ahead of installation.
- A UUID-style identifier may be a good fit, for example
6f1b9e2c-7c3a-4a9c-8b72-2fd0f8f3c1ab.
To generate a UUID-style value from the command line:
Generate the value once, then configure the same replication_group_id on the Active and Standby clusters of the DR group. Generating different values on each side will produce divergent encryption keys.
root_secret_name
The plugin form exposes only the Secret name; the namespace is always kube-system at render time.
Preparing the Root Secret
The deterministic root Secret must exist in kube-system before installing the plugin. Prepare it in two steps:
-
Generate 32 bytes of cryptographically strong random material into
./root-key.bin. The bytes must come from a high-entropy source — typically the operating system CSPRNG.openssl randis a safe default; equivalent OS-CSPRNG-backed commands such ashead -c 32 /dev/urandom > ./root-key.binalso work. Do not use shell$RANDOM, language-levelrand(), or any time-seeded generator. -
Create the Secret in
kube-systemfrom that file:
If you use a different Secret name, replace etcd-derivation-root above with the value you will enter as root_secret_name.
Generate ./root-key.bin once, then transport the same file to every cluster in the replication group and run the kubectl create secret step on each. Do not regenerate the key material per cluster — different root key bytes will produce divergent encryption keys.
Advanced (chart values, not exposed in the plugin form)
Show advanced chart values
The following fields exist in the chart but are not surfaced as plugin install parameters. They retain their chart defaults unless you install via YAML / Helm overrides.
How it Works
Upon installation, an etcd-encryption-manager controller is deployed in the kube-system namespace, which:
- Periodically rotates etcd data encryption keys.
- Retains the 8 most recent keys for rollback compatibility.
- Updates encryption configurations on all control nodes.
- Triggers
kube-apiserverto hot reload new keys. - Automatically migrates resources to re-encrypt data with new keys.
Cluster stability is maintained throughout these operations.
When the plugin is installed in deterministic mode on a global DR pair, the controller additionally:
- Detects whether it is acting as Active or Standby at runtime — this is not a manual configuration.
- On the Active side, generates the SeedBundle and lets the etcd Synchronizer replicate it to the Standby.
- On the Standby side, derives the same per-revision keys from the shared SeedBundle and the root Secret, so a failover produces identical encryption keys without manual key copy.
Default Configuration
Operations Guide
Configuration Files
Checking Status
Run the following command to check the current rotation status:
Example output: