Encrypting Ceph traffic in transit with msgr2 secure mode

Ceph msgr2 secure mode encrypts post-authentication traffic between daemons and clients. This page covers crc versus secure modes, CPU cost, client support and how to confirm what is actually encrypted.

On this page

Encrypting Ceph traffic in transit with msgr2 secure mode: when you need it

Msgr2 secure mode encrypts all Ceph traffic after authentication, using AES-GCM and adding integrity checks so that payloads cannot be read or altered on the wire. The Ceph messenger v2 protocol runs on port 3300, and the Ceph msgr2 documentation describes secure mode as covering everything exchanged once a connection has authenticated. Teams need it when Ceph daemons or clients exchange data across links they do not fully control, such as shared switching in a colocation facility, routed networks between sites, or a tenant network that other parties can sniff. It matters most for multi-tenant clusters and for regulated data that must be protected in transit under your own encryption policy. It does not encrypt data at rest on OSD drives, does not protect the monitors' stored maps or keyrings on hosts, and does not replace network segmentation or access control. Encryption at rest is a separate decision covered elsewhere in this guide.

Before you change anything, confirm which mode each daemon and client actually negotiates. Ask your team to review the msgr2 settings in the cluster configuration, such as the ms_cluster_mode and ms_service_mode options, and to check the connection mode for each client type in use, including kernel clients, librbd and RGW. Clients that only support the legacy crc mode will either fail to connect or silently fall back, depending on your settings, so an inventory of client versions comes before the switch. Confirm the expected behavior against the Ceph msgr2 documentation for your release, because option names and defaults change across versions. Encryption also costs CPU on every connection, so plan a benchmark on representative hardware to measure the overhead for your workload. Finally, verify the result on the wire, not only in configuration, by sampling live connections and checking that the negotiated mode is secure.

Which msgr2 mode fits each traffic path

This table compares crc and secure msgr2 modes and the per-path settings that choose between them for cluster, client and monitor traffic. Read each row against the traffic it governs, then check the compatibility and CPU columns before changing a mode. The main takeaway is that secure mode is a per-path decision, and each path needs its own client support check and benchmark.

Mode or settingWhat it doesWhen it fitsTrade-off
crc modeChecks message integrity but does not encrypt traffic after authentication.Isolated networks where encryption is not required and CPU headroom is tight.Lowest CPU cost, but traffic remains readable on the wire.
Secure modeEncrypts all post-authentication traffic with AES-GCM and adds integrity checks.Paths that cross shared, routed or tenant networks, or carry regulated data.Adds CPU work per message; benchmark on your hardware before rollout.
Cluster traffic (OSD to OSD, heartbeats)Governed by the cluster-side mode settings for daemon-to-daemon traffic.Secure where the cluster network is shared or outside a physically controlled segment.Recovery and backfill move the most data, so CPU cost is most visible here.
Client traffic (RBD, CephFS, RGW)Governed by the client-side mode settings for connections that clients initiate.Secure for clients on routed, shared or tenant networks.Confirm each client type (kernel, librbd, RGW) supports the mode before enforcing it.
Mixed-client fleetAccepts a preference list such as secure with crc fallback, so older clients still connect.Migration windows when some clients cannot yet negotiate secure mode.Fallback allows unencrypted sessions; track which connections still negotiate crc.
Monitor connectionsUses separate mode settings for monitor-to-monitor and monitor-to-client traffic.Secure where client authentication and cluster maps need protection.Monitors serve every client, so a mismatch affects the whole cluster; test in staging first.
Per-path mode optionsSet the preferred mode for each traffic class, including monitor variants.Set every path explicitly so the effective mode is recorded and reviewable.Confirm exact option names and defaults for your Ceph release before changing them.

What secure mode costs in CPU and latency

Secure mode adds AES-GCM work to every post-authentication message, so the cost lands on whichever hosts carry the most traffic. The cards below cover where that cost appears, why it grows with hardware speed and network load, and how to measure the change before and after you enable it.

Where the CPU cost lands

Every OSD, monitor and client that speaks msgr2 encrypts and decrypts its own traffic, so the work is spread across OSD hosts, monitor hosts and any hypervisor or gateway that mounts RBD or CephFS. Map which hosts carry the most traffic before you enable secure mode. A monitor host with light load may barely notice the change, while a busy OSD host or a hypervisor running many VMs may not. Check each host class separately.

Why dense NVMe changes the math

Fast media raises the bill. A host with many NVMe OSDs can push far more data per second than a spinning-disk host, so the encryption work per second grows with throughput. If the CPU that handles networking is already close to saturation during recovery or rebalancing, secure mode can slow those operations as well as client I/O. Ask whether your OSD hosts have spare cores at peak throughput, not just at average load.

High-throughput networks and small I/O

Higher network speeds mean more messages per second to encrypt, and small I/O sizes add per-message overhead even when bandwidth looks low. Latency-sensitive workloads such as databases on RBD are often more affected by per-request delay than by raw throughput. Measure small-block latency as well as large-block bandwidth, because the two can move in different directions.

Benchmark before enabling

Run a baseline on the same hardware, pool layout and client configuration you plan to use in production, with secure mode off. Record throughput, IOPS and latency at the percentiles your workloads care about, along with CPU utilization on OSD and client hosts. Keep the test method identical for the post-change run so the comparison is meaningful.

Measure again after the change

Repeat the same benchmark with secure mode on, then compare CPU use and latency on each host class. Include a recovery or backfill scenario, because that is when internal traffic is heaviest. Keep the results with the change record so operators can explain later performance shifts. Ask your partner or internal team to confirm the benchmark tools and parameters in writing before the test starts.

Enabling msgr2 secure mode on a cephadm cluster

This sequence moves cluster daemons first and then clients onto msgr2 secure mode, in stages, with a check after each one. The result is encrypted daemon and client sessions, with a documented way to step back at every stage. Confirm the exact option names, values and commands against the release in use before running any of them.

  1. Confirm release and msgr2 availability

    Confirm the cluster runs an actively maintained release, such as the Squid or Tentacle lines listed on the Ceph active releases page, and that every daemon runs the same version. Check that monitors advertise msgr2 addresses on port 3300, which has been available since Nautilus. Save the version summary and the monitor address listing as the baseline. This step is done when every daemon reports one release and the monitor addresses include v2 entries on port 3300. Confirm the commands for your release in the Ceph documentation first.

  2. Inventory clients and library versions

    List every client that connects to the cluster: kernel RBD and CephFS mounts, librados and librbd applications, RGW gateways, hypervisors and Kubernetes CSI drivers. Record the library or kernel version each one uses, since an older client may not negotiate secure mode. Note which clients you can restart quickly and which need a maintenance window. The output is a table of client, version, owner and restart method, and it sets the order of the client stage. Ask the vendor or project of each client for its minimum version supporting secure mode.

  3. Set permissive service and client modes

    Before enforcing anything, allow both modes so existing sessions keep working. Set the service mode to accept both secure and crc, and leave the client mode permissive. The option names to confirm for your release are ms_service_mode and ms_client_mode, applied through the cluster configuration store. Read back the stored values and confirm that the health status has not changed. This stage is the cheapest point to catch a typo or an unexpected refusal from a client.

  4. Set cluster mode and restart daemons

    Set the cluster messenger mode (ms_cluster_mode) to secure, along with the monitor-related settings your release documents, so daemon-to-daemon traffic on the cluster network is encrypted. Restart daemons one host at a time, beginning with monitors and managers, then OSD hosts. Wait for placement groups to return to active and clean before moving to the next host, because a restart during recovery widens the window of reduced redundancy. The stage is done when every daemon has rejoined on secure sessions.

  5. Verify sessions after each host

    After each host restart, check that its daemons rejoined the cluster, that health shows no new warnings and that placement groups are active and clean. Inspect a sample of daemon connections and confirm they report secure mode in the connection details for your release. Record the result for each host in the change log. Stop the rollout if any host fails either check, because the next host should not be restarted until the cluster is steady again.

  6. Enable secure mode for clients

    Set the client messenger mode (ms_client_mode) to secure, starting with a single test client that you can restart and observe closely. Then move the remaining clients in groups, following the restart method recorded in the inventory, and restart RGW gateways and hypervisor-attached clients as your release documents. Verify each group with a connection check and an application-level read and write test. Kernel mounts may need a remount rather than a restart, so confirm that behavior for your kernel version.

  7. Remove crc from service mode

    Once every client in the inventory has been verified on secure sessions, tighten the service mode so that only secure connections are accepted. This is the stage that refuses any client still using crc, so do it only when the inventory shows none remaining. Watch the monitor and daemon logs and the client error reports for refused connections for a period you define in your change plan. The stage is done when no client is refused and the inventory matches the connections observed.

  8. Keep a tested rollback path

    Prepare the rollback before the first change: revert the client mode, then the service mode, then the cluster mode, each to the permissive or crc value your release supports, and restart daemons and clients by host with the same checks used forward. Test the procedure on a non-production cluster where you can, or on one host first, so the steps are known to work. Keep the baseline output from the first step to compare against. The rollback is complete when the cluster and clients return to their baseline connection behavior and health status.

How to check what is actually encrypted

A secure mode setting in configuration shows intent, not what each live session negotiated. Verify both. Start by reading the effective values for the three messenger mode options, ms_cluster_mode (daemon to daemon), ms_service_mode (clients to daemons) and ms_client_mode (client connections), using ceph config get and ceph config dump for the relevant daemon types. Then confirm the running daemons report the same values, because a changed option may not apply until a daemon restarts. Confirm for your release which keys exist, what each accepted value means and whether a restart is required, using the Messenger v2 documentation as the reference.

Packet capture on a test network is the only check that shows what crosses the wire. Run a capture on a test client pointed at a monitor's msgr2 port, 3300, and look at the connection setup. Secure mode shows an encrypted exchange after authentication, while a connection in crc mode exposes readable payload, such as object names or pool data. Legacy msgr1 connections on port 6789 cannot use secure mode, so a mixed fleet produces both kinds of session. Sample each client type you run (kernel RBD, librbd, RGW and cephadm hosts), because a capture from one client says nothing about another.

Turn the check into a repeatable record. Note the release, the effective settings, the client types tested and the capture results, then repeat the check after upgrades, client changes and daemon restarts. Ask whoever runs the cluster to confirm which clients still connect over legacy protocols, and plan how those clients will be upgraded or isolated. Run captures only on a test network with permission, because payloads can contain sensitive data.

Which Ceph clients and tools support secure mode

Do kernel RBD and CephFS clients support msgr2 secure mode?

Support depends on the kernel build you run, so confirm it with your distribution's release notes and the Ceph msgr2 documentation before you enable secure mode for those mounts. Kernel clients speak msgr2 only when the kernel includes that protocol support, and the mode they negotiate is controlled by the cluster's messenger settings. Check the kernel version on every host that maps RBD images or mounts CephFS, including hypervisors and backup nodes that people often forget. Test one mount end to end on a non-production pool, then confirm the connection mode on the live session before you change defaults for the whole fleet.

Which librados and librbd clients can use encrypted msgr2 connections?

User-space clients built on librados and librbd can use msgr2 secure mode, but the exact set depends on the Ceph release each application links against. Confirm the library version that each application, hypervisor plugin or backup tool loads, not only the Ceph packages installed on the host. Bundled or statically linked libraries are a common gap, because an application can keep an older library after the operating system package is upgraded. Ask each application owner which library they use, run a connection test with secure mode enforced, and record the result alongside the client version so the evidence survives later upgrades.

Do RGW, MDS and OSD daemons encrypt their traffic with msgr2?

Ceph daemons talk to each other over the messenger, so msgr2 secure mode can apply to monitor, OSD, manager and metadata traffic, and the cluster network settings decide which connections are affected. The Object Gateway (RGW) is different at the client-facing edge: S3 and Swift requests arrive over HTTP or HTTPS on the gateway, so you must configure TLS on that endpoint separately. Inside the cluster, RGW still connects to RADOS through the messenger, so check that its client mode matches your policy. Confirm each daemon type, its configuration section and the protocol each listener uses, because a secure internal path does not protect a plaintext client endpoint.

How do mixed client versions affect a secure mode rollout?

Mixed client versions are the main reason rollouts stall, because a client that cannot negotiate secure mode will either fail to connect or fall back, depending on the mode you set. Start by inventorying every client family and version, including kernel mounts, hypervisors, container images and backup agents. Then set the permissive setting first, observe which sessions are still unencrypted, and upgrade or reconfigure those clients before you require secure mode. Keep a dated list of clients that remain on older versions, because that list defines the window where traffic is not encrypted and it is the first thing an auditor will ask about.

What happens when a client cannot negotiate secure mode?

The result depends on the mode you configure, and the safest test is to find out on a non-production cluster before you enforce anything. In a permissive configuration, a client that cannot use secure mode may still connect without encryption, which keeps services running but leaves that traffic exposed. In a strict configuration, the same client is refused, which protects the data path but can cause an outage if an unnoticed client depends on the cluster. Document the exact setting for each daemon type and client class, schedule a rollback step, and confirm that monitoring alerts on refused connections so the failure is visible to the operations team.

How can I confirm which connections are actually encrypted?

Confirm encryption on live sessions, not only in configuration files, because a setting can exist while some clients still connect in another mode. Use the monitoring and session commands documented for your Ceph release to list active connections and the protocol and mode each one negotiated. Sample connections from every client class, including kernel mounts, RGW and backup tools, and keep the output as evidence with the date and cluster version. Repeat the check after upgrades and after onboarding new applications, since a single new client with an old library can reintroduce unencrypted traffic.

What should I ask a partner to include in a client compatibility review?

Ask for a written inventory of every client family, its version and its owner, plus a test plan that shows the connection mode each class negotiates under permissive and strict settings. The review should cover kernel RBD and CephFS hosts, librados and librbd applications, RGW and other daemons, and a rollback procedure. Ask who is responsible for changing each client, because application teams often own the library upgrades. DeployOpen plans, implements and documents this kind of work in infrastructure you control and works from a fixed scope agreed in writing, so the quote follows from the inventory and the number of client classes involved.

Will secure mode slow down my clients, and how do I measure it?

Secure mode adds encryption work to each connection, so the effect depends on your hardware, workload pattern and the client's CPU budget, and no general figure applies to every cluster. The Ceph messenger v2 documentation describes AES-GCM encryption with integrity checks, but it does not give a universal overhead number, so measure it. Benchmark a representative client on the same hardware with secure mode off and on, using your own block sizes and concurrency, and compare latency and CPU use. Ask any partner to show these results for your environment before the change goes to production.

Security and operational risks to plan for

Turning on msgr2 secure mode changes how every daemon and client connects, so the risks sit in the surrounding work: keys, mixed-mode rollouts, upgrades and the boundary of what encryption in transit actually protects. Each card below is a decision or check your team owns before, during and after the change.

Key and certificate handling

Cephx keys authenticate daemons and clients, and msgr2 secure mode protects the session those keys establish, so key distribution is part of the same change. Confirm who holds the keyrings on each host, where client keyrings are copied, and how a compromised key would be rotated across monitors, OSDs and gateways. If you terminate TLS in front of RGW or the dashboard, those certificates need their own renewal owner and expiry alerts, separate from msgr2.

Partial rollout leaves crc links

Secure mode is set per daemon and per client, so a cluster can run with some links encrypted and others still using crc. A client or host that was missed will keep connecting without encryption, and nothing about normal operation will show it. Build an inventory of every consumer, including hypervisors, Kubernetes nodes, backup agents and scripts, before you count the change as complete.

Failed negotiations after upgrades

Client libraries and kernel drivers update on their own schedules, and a client that cannot negotiate the required mode will fail to connect rather than fall back quietly. Watch monitor and OSD logs and client error rates for negotiation failures after every host, client or Ceph upgrade. Treat a rise in connection errors as a possible msgr2 mismatch until the logs show otherwise.

CPU cost on busy nodes

Encrypting and authenticating every message adds CPU work on both ends of each connection, and that cost grows with traffic volume. Measure CPU on OSD hosts, gateways and hypervisors under peak client load before and after the change, not only at idle. Ask your hardware vendor and Ceph partner to confirm headroom for your I/O pattern rather than assuming it.

Encryption in transit is not at rest

Msgr2 secure mode protects data while it moves across the network, but it does not encrypt data stored on OSD drives. Data at rest needs its own decision, such as drive-level or OSD-level encryption, with its own key custody and recovery process. Record both controls separately in your design so an auditor or incident responder does not read one as covering the other.

Monitoring and evidence of encryption

A setting in configuration does not prove that every live connection is encrypted. Plan a recurring check that inspects active sessions or logs for the negotiated mode, and keep the output as evidence for change reviews and assessments. Assign an owner for that check and decide what happens when it finds a crc link.

Questions teams ask before enabling msgr2 secure mode

What drives the cost of enabling msgr2 secure mode?

The cost is mostly labor: inventory, benchmarking, change planning, client testing and the maintenance windows that rollout requires. Secure mode adds CPU work for encrypting traffic, so the main technical driver is how much CPU headroom your OSD, monitor and gateway hosts already have at peak. Clusters with spare capacity usually see a smaller effort than clusters already running hot. Client upgrades are often the largest variable, because every application, hypervisor and gateway that connects must support the mode you choose. Ask any partner to split the quote into discovery, benchmarking, client testing, the change itself and post-change verification, and to state which items are one-time and which recur, such as re-verification after upgrades.

How long does a msgr2 secure mode rollout take?

The rollout length depends mainly on cluster size, the number of distinct client types and how many change windows your operations calendar allows. A small cluster with a few well-understood clients is faster to change than a multi-site estate with many hypervisors, gateways and custom applications, because each client path needs its own test and sign-off. Larger clusters also take longer to roll through in stages so that you can watch health and latency between steps. No fixed duration applies to every environment, so ask for a schedule built from your own inventory and change calendar rather than a generic estimate.

Can our own team enable msgr2 secure mode without a partner?

Yes, if your team already operates the cluster, has a non-production environment that matches production closely enough to benchmark, and owns every client that connects to it. The configuration change itself is small, but the work around it is not: you need an accurate list of clients and their versions, a measured baseline for CPU and latency, a tested rollback path and staff available during the windows. Teams that lack one of these pieces, or that run storage for several internal owners, often find a fixed-scope engagement cheaper than pulling their own engineers off other work for the duration. DeployOpen plans, implements and documents this work inside your infrastructure, and the written scope sets what is included.

What does the work need from our team before it starts?

Three inputs matter most. First, an inventory of every component that talks to the cluster, including monitors, OSDs, managers, Object Gateway instances, RBD clients, CephFS mounts and any applications using librados directly, with the Ceph version and client library version of each. Second, a benchmark environment that resembles production in hardware, network and data layout, so CPU and latency results are meaningful. Third, agreed maintenance windows and named owners who can approve changes and make decisions during each window. Your team should also confirm which Ceph release line you run, because the supported behavior of each release is part of the planning.

What CPU cost should we expect from secure mode?

Secure mode encrypts all post-authentication traffic with AES-GCM and adds integrity checks, so it uses more CPU than the default crc mode. How much more depends on hardware, the CPU instruction support on each host, network throughput and the I/O pattern of your workloads. Do not rely on a general percentage. Benchmark representative client traffic on hardware that matches production, measure OSD and gateway CPU at peak, and compare latency and throughput before and after. Pay attention to hosts that already run near their limits during recovery or scrubbing, because those periods are when extra CPU load is most likely to hurt client I/O.

How do we check that traffic is actually encrypted after the change?

Do not assume the setting took effect. Confirm the configured connection modes in the cluster configuration, check that each daemon and client negotiates secure mode after reconnecting, and test from the network side by capturing traffic between a client and an OSD or monitor on port 3300 and confirming the payload is not readable. Repeat the check for every client type, including older clients that may fall back to a weaker mode or fail to connect. Record the results as evidence, because auditors and security reviewers will ask how you verified the setting, not only what you configured. Ask any partner to include this verification step in the written deliverables.

Which compliance evidence does msgr2 secure mode help with?

Secure mode supports controls about protecting data in transit inside the storage cluster, but it does not make a system compliant on its own. It is one input to a wider set of requirements covering cryptography, access and logging. DeployOpen prepares systems, controls and evidence for compliance assessments, but it does not issue audit reports, attestations or certifications. Independent auditors and certification bodies make those determinations. Ask your assessor which evidence they expect for in-transit protection, such as configuration records, verification output and change approvals, and confirm that the scope of encryption matches the systems you need to cover.

Where the official Ceph documentation covers msgr2

Start with the Ceph messenger v2 documentation before changing any setting, because it defines what secure mode encrypts, which ports carry msgr2 traffic and how the two connection modes differ. Read it alongside your cluster's exact release, since the secure mode behavior you rely on must match the Ceph version you run. The Ceph messenger v2 documentation is the primary reference for the protocol itself, and the secure mode description there is the baseline for the verification steps later on this page.

Use the Ceph releases page to confirm that your release is still actively maintained before you plan a change to its transport settings. Record the release name and point version, then check its listed end-of-life date against your change window. If that date falls inside the next maintenance cycle, schedule an upgrade first, because encryption settings on an unsupported release may not receive fixes if problems appear later. Ask your Ceph administrators to confirm the running version with ceph versions rather than relying on a planning document.

On a cephadm-managed cluster, apply configuration through the cephadm documentation and the cluster configuration database rather than editing files on individual hosts, since cephadm owns the daemon configuration and may overwrite manual changes. The cephadm documentation explains how to set options centrally and how to confirm what each daemon has actually loaded. Plan a rolling restart of monitors, managers and OSDs for the change, and confirm the effective values per daemon before declaring the change complete.

How DeployOpen works on this

DeployOpen treats msgr2 secure mode as a change to a running storage fabric, not a single setting. We scope the cluster, its clients and the upgrade path first, then build, verify and hand over the change in your own infrastructure, with the written scope agreed before work starts.

How we scope

  • Inventory every daemon, client and tool that connects to the cluster and records its Ceph release and connection method.
  • Decide per traffic path whether secure mode applies to cluster-internal messenger traffic, client connections or both.
  • Write the scope so it names the clients to be tested, the maintenance windows and the rollback conditions before any change.

How we build

  • Set the messenger ms_cluster_mode and ms_service_mode settings in a staged order that keeps crc-mode clients connecting during transition.
  • Benchmark CPU use and client latency with secure mode enabled on representative hardware and record the results against a baseline.
  • Confirm which clients negotiate secure mode by checking live connections on port 3300 rather than assuming the configuration applied.

How we hand over

  • Deliver the configuration as cephadm-managed settings, with a written record of every change, its owner and its rollback step.
  • Document a verification runbook that shows how your team confirms encryption on each traffic path after future upgrades.
  • Walk your storage and security staff through the client compatibility matrix, including any legacy clients that still need a plan.

How we support

  • Review the messenger settings again whenever you move to a new Ceph release, since client support can change between versions.
  • Track clients that remain on crc mode and agree a retirement plan with the teams that own them.
  • Ongoing support, upgrades and continuous testing are available as a retainer, scoped separately from the initial fixed-scope work.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.