<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Engineering Archives | Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/blog/category/engineering/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.clever.cloud/blog/category/engineering/</link>
	<description>From Code to Product</description>
	<lastBuildDate>Fri, 05 Jun 2026 06:58:52 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://cdn.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>Engineering Archives | Clever Cloud</title>
	<link>https://www.clever.cloud/blog/category/engineering/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Sōzu 2.0 — turning a reverse proxy into a programmable edge</title>
		<link>https://www.clever.cloud/blog/engineering/2026/05/29/sozu-2-0-reverse-proxy-programmable-edge/</link>
		
		<dc:creator><![CDATA[Florentin Dubois]]></dc:creator>
		<pubDate>Fri, 29 May 2026 15:16:11 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Sozu]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24440</guid>

					<description><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05.29 Clever Cloud Bannière Blog Sōzu 2.0 EN" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en.png 2499w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-1368x607.png 1368w" sizes="(max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>This release is a milestone: the underlying machine is now ready for the product features we have been waiting to build on top of it. Rather than a list of patches, we've grouped the work into six themes; for each, we say two things — what shipped, and what it makes possible, for the people running their applications on the platform and for the operators who run Sōzu on their own infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">1. A from-scratch HTTP/2 multiplexer</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu's HTTP/1 stack had already been rewritten around <strong>kawa</strong>, our pivot format: a single internal representation of the HTTP message, independent of its protocol version — the same idea as HAProxy's HTX. The HTTP/2 multiplexer is its natural extension: it adds session management and stream multiplexing on top of kawa.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It supports the full protocol matrix (H1↔H1, H1↔H2, H2↔H1, H2↔H2), with shared stream state, HPACK compression via loona-hpack, backend H2 connection pooling, <a href="https://datatracker.ietf.org/doc/html/rfc9218">RFC 9218</a> Extensible Priorities for stream prioritisation, and per-listener ALPN negotiation so each TLS connection lands on the right code path. Around 181 end-to-end tests and two cargo-fuzz targets keep the parser and the HPACK decoder honest — including regression guards that pin large-response integrity byte-for-byte across an H1-backend → H2-frontend path, the exact boundary where edge-triggered epoll readiness bugs hide.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For Clever Cloud customers, the practical impact is simple: <strong>every application served by the platform now speaks HTTP/2 by default, on the frontend</strong> — no opt-in, no code change, no configuration. Enabling HTTP/2 all the way to the backend stays a per-cluster choice — a <em>cluster</em>, in Sōzu's model, is one of your applications; turned on end-to-end, it unlocks gRPC across the whole chain. Page loads finish in fewer TCP connections; browsers can coalesce requests across hostnames that share a certificate (we honour <a href="https://datatracker.ietf.org/doc/html/rfc7540">RFC 7540 §9.1.1</a> SAN coalescing, so when the certificate, authority and connection conditions line up, Firefox and Chrome can reuse a single connection across your cdn.example.com and assets.example.com instead of opening parallel ones). It is, in the best sense, a quiet platform upgrade.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also the structural prerequisite for what comes after — HTTP/3 over QUIC and stronger streaming foundations at the edge. The mux rewrite is the part of the roadmap that had to land first.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">2. Security as a baseline, not a toggle</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The second half of the H2 rewrite is the part nobody asks for until it's missing: flood and DoS hardening. Sōzu 2.0 ships built-in mitigations for <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-44487"><strong>CVE-2023-44487</strong></a><strong> (Rapid Reset)</strong>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-27316"><strong>CVE-2024-27316</strong></a><strong> (CONTINUATION flood)</strong>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-8671"><strong>CVE-2025-8671</strong></a><strong> (MadeYouReset)</strong>, and the PING / SETTINGS / empty-DATA flood family from <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9512">CVE-2019-9512</a>/<a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9515">CVE-2019-9515</a>/<a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9518">CVE-2019-9518</a>. Each mitigation surfaces a dedicated counter — twelve metrics under h2.flood.violation.* — so a SIEM can window the trip rate without parsing logs. Seventeen HPACK rejection reasons are surfaced the same way; that is the first operator-visible signal for request-smuggling probes against the H2 stack.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The rest of the security work fans out across the proxy: a per-(cluster, source-IP) connection cap with 429 Too Many Requests; opt-in eviction of the oldest sessions when the accept queue saturates; hardening across the command channel, the HTTP/1 parser, the pattern-trie router (closing a routing-bypass through unanchored regex) and the wildcard matcher; audit-log sanitisation against <a href="https://nvd.nist.gov/vuln/detail/CVE-2021-42574">Trojan-Source</a> and SIEM column-smuggling; and a TLS certificate hot-rotation that <strong>never drops the working certificate on failure</strong>, even if the new one is malformed. Four dependency advisories cleared in the same window.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Every privileged mutation now lands in a structured audit log: each control-plane action is recorded as a Command(verb=…, actor_uid=…, actor_user=…, result=…) line — who did what, from where, and whether it succeeded. Two dedicated sinks ship it out: audit_logs_target for the human-readable stream, and audit_logs_json_target for one stable-schema JSON object per line, so the trail tails straight into a SIEM (Wazuh, Elastic, Loki, Splunk) without a bespoke parser — in a shape designed for PCI-DSS 10.5.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The product framing is straightforward: <strong>our job is to operate the platform and shield your applications as soon as we can</strong>. When the next H/2 vulnerability in this class lands at 9pm on a Friday, it does not have to translate into a patch-and-redeploy weekend across thousands of applications — attacks of this class are largely absorbed or mitigated at the proxy, surfaced as a counter on a dashboard, while applications keep serving traffic. Trust-by-default is not a marketing claim; it is the cumulative effect of dozens of small, defensive fixes shipped at the layer where the security boundary actually lives.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">3. Visibility on every layer</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The largest single user-facing addition in 2.0 is <strong>sozu top</strong> — an operator TUI (behind the tui Cargo feature) that gives you a live btop/htop-style view across seven panes: Overview, Clusters, Backends, Listeners, H2, Certificates, Events. Colour-blind-safe palette, customisable themes — the essentials fit in a terminal, no external dashboard required.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Underneath the TUI, the metric surface itself was rewritten. The mux exposes per-frame-type counters and a breakdown by <a href="https://datatracker.ietf.org/doc/html/rfc9113">RFC 9113</a> error code, TLS handshake telemetry, per-status HTTP counters, and new worker lifecycle gauges. The access log gains TLS and forwarding fields (version, cipher, SNI, ALPN, XFF chain), x_request_id propagation end-to-end, and client and server RTT — enough to follow a request from one hop to the next.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>A new command, SetMetricDetail, lets an operator raise metric cardinality on demand via a time-bounded lease that expires: production stays low-cardinality by default, and deep inspection becomes a one-off decision rather than a config rewrite.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For Clever Cloud, this is the foundation of the <strong>next chapter of customer-facing observability</strong> — per-application latency percentiles, per-cluster availability, TLS handshake breakdowns, request IDs you can follow across hops. The metrics now exist at the proxy. The next step is to surface them in the Clever Cloud console where they belong, alongside the build and deploy views — so you do not need an external APM to understand the traffic your application actually sees.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">4. Traffic policies that you can finally toggle</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu 2.0 reshapes the entire frontend-policy surface (#1231): <strong>typed HSTS</strong> (<a href="https://datatracker.ietf.org/doc/html/rfc6797">RFC 6797</a>) configurable per listener and per frontend; <strong>URL rewrite</strong> (host, path, port) with regex capture propagation from the routing trie into rewrite templates; <strong>request- and response-header rewriting</strong> per frontend — add, set, or delete any header (an empty value deletes it, HAProxy del-header parity), with listener-scoped X-Real-IP injection and anti-spoof elision of client-supplied values on top; <strong>HTTP 301 / 302 / 308 redirects</strong> through a typed RedirectPolicy enum; and <strong>HTTP Basic authentication</strong> per frontend, with SHA-256-hashed credentials and a constant-time compare via the subtle crate (the credential boundary is hardened against timing side-channels — the audit caught it at review time).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is the part of the release where the product opportunity is most visible. Today, doing a clean domain migration on a managed platform typically requires either a backend that knows how to redirect or a separately deployed redirect service; putting a staging URL behind a password typically requires an authentication add-on. <strong>In Sōzu 2.0, these become knobs at the proxy.</strong> The plumbing exists; what remains is to expose those knobs in the Clever Cloud console — as a checkbox on a domain, or a one-click toggle for preview environments. That is the no-code traffic-control surface we want to build next.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">5. Operations as the customer benefit</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A rewrite this deep only ships safely if the fleet keeps moving underneath it. Day-to-day operations got a lot of attention in 2.0.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>sozu listener {http,https,tcp} update is a new field-masked patch verb that tunes non-bind-only listener settings on a running proxy without cycling sockets — H/2 flood thresholds, SNI binding, ALPN preference, idle timeouts, HSTS, custom answers. <strong>CVE mitigations can now be tightened under attack without cycling listener sockets.</strong> Active backend health checks run inside the existing mio event loop (no async runtime, no extra threads) with HTTP/1.1 and HTTP/2 probes, jittered intervals, and a fail-open path that routes through Normal-status backends whose retry policy allows it. systemd integration (closes #228) now does the right thing: Type=notify units, READY=1 only after the initial workers spawn and the saved state replays, STOPPING=1 on graceful shutdown, MAINPID=&lt;new&gt; across hot upgrades.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Releases themselves changed shape. Pushing a tag now produces <strong>ten pre-built tarballs</strong> (three Linux targets crossed with up to four crypto providers), signed keyless via sigstore (cosign + GitHub OIDC), with SLSA build provenance and a SOURCE.txt corresponding-source pointer satisfying AGPL §6 / LGPL §4 — closing the gap noted in #1089. ACME fullchain.pem files now load cleanly even when the client emitted the leaf at the start (Certbot, lego, acme.sh); a six-year-old worker-auto-restart binary race (#515) is fixed by pinning the original inode through /proc/self/fd. The LoadState IPC verb stays forward-compatible with sozu-command-lib 1.1.1 clients, so the ecosystem of integrations does not break on the upgrade.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At Clever Cloud's scale, the cost of an operational incident isn't a ticket — it is compounding latency for thousands of applications, and the engineers' time we owe to building the next thing. <strong>Sōzu 2.0 is the proxy that is quiet to operate, and that quietness is what customers experience as uptime.</strong> It's also what makes Sōzu credible as something you can run on your own infrastructure: signed binaries, hot reloads, ACME quirks ironed out, systemd integration done properly.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">6. Crypto that's ready for tomorrow</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The TLS stack got a quieter but equally important rework (#1191). Sōzu now supports <strong>four pluggable crypto providers</strong> for rustls — crypto-ring (the default), crypto-aws-lc-rs, crypto-openssl, and fips (which implies aws-lc-rs in FIPS mode). All four are exercised by CI, and the precedence chain fips &gt; ring &gt; aws-lc-rs &gt; openssl resolves the active provider deterministically when several features are enabled together.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>What we are most happy about, though, is the default groups_list: <strong>X25519MLKEM768</strong><strong> is now the first-preference key-exchange group</strong> where the provider supports it. That is the post-quantum hybrid being standardised through the IETF (<a href="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem">draft-ietf-tls-ecdhe-mlkem</a>) and already registered in the IANA TLS registry; what it means in practice is that an X25519-only client and a PQ-capable client both negotiate the most robust mutually supported exchange, with no operator action.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When the post-quantum migration becomes a regulatory requirement — on a timeline the industry is still debating — <strong>the groundwork on Clever Cloud will already be in place</strong>: every TLS 1.3 client that offers the hybrid negotiates it today, with no operator action. We made the choice quietly, and we made it the default.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">From reverse proxy to programmable edge</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu has always been an <strong>infrastructure load balancer</strong>: well beyond HTTP, it also balances raw TCP, with a zero-copy forwarding path via splice(2) on Linux for TCP listeners. With 2.0 it moves closer to an <strong>API gateway</strong> and becomes the substrate of a <strong>programmable edge</strong> — and "programmable" is the operative word. Each capability described above (HTTP/2 by default, anti-abuse controls, observability, traffic policies, crypto agility, operational quietness) is a knob. The next year of Clever Cloud's roadmap is about exposing those knobs as product features: through the console, through the API, through the workflows you already use to deploy your applications.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is what we mean when we say Sōzu 2.0 is a first step of something greater. Two-point-zero is not the destination — it is the platform we now build on top of. Managed HTTP/2 everywhere is the first building block. The next is a console where you toggle HSTS, password-protect a preview environment, or redirect a migrated domain. The destination — a fully programmable edge with policy primitives you can compose — is what we are building toward over the coming release cycle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Two more pieces are already on the bench. First, a <strong>UDP load-balancing</strong> layer — in the spirit of IPVS, but with Sōzu's hot-reload model — paired with <strong>TCP health checks</strong> that probe the liveness of the UDP backends; this cements the infrastructure-load-balancer role further. Second, <strong>HTTPS-reachable backends</strong>, which firm up upstream connectivity and open the road to the API gateway.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sōzu is open source under AGPL-3.0 (the command library is LGPL-3.0). The 2.0 release binaries are signed via sigstore and ship SLSA provenance; if you operate your own edge, this release is yours to use, audit, and extend. The code, the issue tracker, and the conversations live at <a href="https://github.com/sozu-proxy/sozu">github.com/sozu-proxy/sozu</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Thank you to the contributors who made this release happen — and to everyone running Sōzu in production, whose feedback shapes where it goes next.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>References</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Standards and specifications</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>RFC 6797</strong> — HTTP Strict Transport Security (HSTS). <a href="https://datatracker.ietf.org/doc/html/rfc6797">https://datatracker.ietf.org/doc/html/rfc6797</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 7540</strong> — Hypertext Transfer Protocol Version 2 (HTTP/2). Now obsoleted by RFC 9113, but §9.1.1 on connection coalescing remains the citation reused by RFC 9113. <a href="https://datatracker.ietf.org/doc/html/rfc7540">https://datatracker.ietf.org/doc/html/rfc7540</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 9113</strong> — HTTP/2 (current). §5 streams, §6 frames, §6.8 GOAWAY, §7 error codes, §8.1 HTTP semantics. <a href="https://datatracker.ietf.org/doc/html/rfc9113">https://datatracker.ietf.org/doc/html/rfc9113</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 9218</strong> — Extensible Prioritization Scheme for HTTP. <a href="https://datatracker.ietf.org/doc/html/rfc9218">https://datatracker.ietf.org/doc/html/rfc9218</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>draft-ietf-tls-ecdhe-mlkem</strong> — Hybrid key exchange in TLS 1.3: X25519MLKEM768 (IETF Internet-Draft, IANA-registered; the post-quantum hybrid Sōzu prefers by default). <a href="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem">https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">CVEs</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>CVE-2019-9512</strong> — HTTP/2 Ping Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9512">https://nvd.nist.gov/vuln/detail/CVE-2019-9512</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2019-9515</strong> — HTTP/2 Settings Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9515">https://nvd.nist.gov/vuln/detail/CVE-2019-9515</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2019-9518</strong> — HTTP/2 Empty Frames Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9518">https://nvd.nist.gov/vuln/detail/CVE-2019-9518</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2021-42574</strong> — Trojan Source (bidirectional override). <a href="https://nvd.nist.gov/vuln/detail/CVE-2021-42574">https://nvd.nist.gov/vuln/detail/CVE-2021-42574</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2023-44487</strong> — HTTP/2 Rapid Reset. <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-44487">https://nvd.nist.gov/vuln/detail/CVE-2023-44487</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2024-27316</strong> — HTTP/2 CONTINUATION Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-27316">https://nvd.nist.gov/vuln/detail/CVE-2024-27316</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2025-8671</strong> — MadeYouReset (HTTP/2). <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-8671">https://nvd.nist.gov/vuln/detail/CVE-2025-8671</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Further reading</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cloudflare Learning Center</strong> — <em>What is HSTS?</em>. Accessible primer on HSTS, the max-age / includeSubDomains / preload semantics, and the HSTS preload list policy. <a href="https://www.cloudflare.com/learning/ssl/what-is-hsts/">https://www.cloudflare.com/learning/ssl/what-is-hsts/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Cloudflare</strong> — <em>HTTP/2 Rapid Reset: deconstructing the record-breaking attack</em>. The canonical write-up of the October 2023 coordinated disclosure, including attack mechanics and the 398 M rps peak captured live. <a href="https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/">https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>HAProxy Technologies</strong> — <em>HAProxy is Not Affected by the HTTP/2 Rapid Reset Attack (CVE-2023-44487)</em>. HAProxy's structural argument for why their stream lifecycle naturally absorbs Rapid Reset; a useful contrast against Sōzu's flood-counter approach. <a href="https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487">https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Cloudflare blog — Post-quantum series</strong>. Multi-year coverage by Bas Westerbaan and colleagues on PQ key exchange and hybrid groups; lineage of the X25519MLKEM768 hybrid Sōzu now negotiates by default. <a href="https://blog.cloudflare.com/tag/post-quantum/">https://blog.cloudflare.com/tag/post-quantum/</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->]]></description>
										<content:encoded><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05.29 Clever Cloud Bannière Blog Sōzu 2.0 EN" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en.png 2499w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-en-1368x607.png 1368w" sizes="(max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>This release is a milestone: the underlying machine is now ready for the product features we have been waiting to build on top of it. Rather than a list of patches, we've grouped the work into six themes; for each, we say two things — what shipped, and what it makes possible, for the people running their applications on the platform and for the operators who run Sōzu on their own infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">1. A from-scratch HTTP/2 multiplexer</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu's HTTP/1 stack had already been rewritten around <strong>kawa</strong>, our pivot format: a single internal representation of the HTTP message, independent of its protocol version — the same idea as HAProxy's HTX. The HTTP/2 multiplexer is its natural extension: it adds session management and stream multiplexing on top of kawa.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It supports the full protocol matrix (H1↔H1, H1↔H2, H2↔H1, H2↔H2), with shared stream state, HPACK compression via loona-hpack, backend H2 connection pooling, <a href="https://datatracker.ietf.org/doc/html/rfc9218">RFC 9218</a> Extensible Priorities for stream prioritisation, and per-listener ALPN negotiation so each TLS connection lands on the right code path. Around 181 end-to-end tests and two cargo-fuzz targets keep the parser and the HPACK decoder honest — including regression guards that pin large-response integrity byte-for-byte across an H1-backend → H2-frontend path, the exact boundary where edge-triggered epoll readiness bugs hide.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For Clever Cloud customers, the practical impact is simple: <strong>every application served by the platform now speaks HTTP/2 by default, on the frontend</strong> — no opt-in, no code change, no configuration. Enabling HTTP/2 all the way to the backend stays a per-cluster choice — a <em>cluster</em>, in Sōzu's model, is one of your applications; turned on end-to-end, it unlocks gRPC across the whole chain. Page loads finish in fewer TCP connections; browsers can coalesce requests across hostnames that share a certificate (we honour <a href="https://datatracker.ietf.org/doc/html/rfc7540">RFC 7540 §9.1.1</a> SAN coalescing, so when the certificate, authority and connection conditions line up, Firefox and Chrome can reuse a single connection across your cdn.example.com and assets.example.com instead of opening parallel ones). It is, in the best sense, a quiet platform upgrade.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also the structural prerequisite for what comes after — HTTP/3 over QUIC and stronger streaming foundations at the edge. The mux rewrite is the part of the roadmap that had to land first.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">2. Security as a baseline, not a toggle</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The second half of the H2 rewrite is the part nobody asks for until it's missing: flood and DoS hardening. Sōzu 2.0 ships built-in mitigations for <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-44487"><strong>CVE-2023-44487</strong></a><strong> (Rapid Reset)</strong>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-27316"><strong>CVE-2024-27316</strong></a><strong> (CONTINUATION flood)</strong>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-8671"><strong>CVE-2025-8671</strong></a><strong> (MadeYouReset)</strong>, and the PING / SETTINGS / empty-DATA flood family from <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9512">CVE-2019-9512</a>/<a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9515">CVE-2019-9515</a>/<a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9518">CVE-2019-9518</a>. Each mitigation surfaces a dedicated counter — twelve metrics under h2.flood.violation.* — so a SIEM can window the trip rate without parsing logs. Seventeen HPACK rejection reasons are surfaced the same way; that is the first operator-visible signal for request-smuggling probes against the H2 stack.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The rest of the security work fans out across the proxy: a per-(cluster, source-IP) connection cap with 429 Too Many Requests; opt-in eviction of the oldest sessions when the accept queue saturates; hardening across the command channel, the HTTP/1 parser, the pattern-trie router (closing a routing-bypass through unanchored regex) and the wildcard matcher; audit-log sanitisation against <a href="https://nvd.nist.gov/vuln/detail/CVE-2021-42574">Trojan-Source</a> and SIEM column-smuggling; and a TLS certificate hot-rotation that <strong>never drops the working certificate on failure</strong>, even if the new one is malformed. Four dependency advisories cleared in the same window.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Every privileged mutation now lands in a structured audit log: each control-plane action is recorded as a Command(verb=…, actor_uid=…, actor_user=…, result=…) line — who did what, from where, and whether it succeeded. Two dedicated sinks ship it out: audit_logs_target for the human-readable stream, and audit_logs_json_target for one stable-schema JSON object per line, so the trail tails straight into a SIEM (Wazuh, Elastic, Loki, Splunk) without a bespoke parser — in a shape designed for PCI-DSS 10.5.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The product framing is straightforward: <strong>our job is to operate the platform and shield your applications as soon as we can</strong>. When the next H/2 vulnerability in this class lands at 9pm on a Friday, it does not have to translate into a patch-and-redeploy weekend across thousands of applications — attacks of this class are largely absorbed or mitigated at the proxy, surfaced as a counter on a dashboard, while applications keep serving traffic. Trust-by-default is not a marketing claim; it is the cumulative effect of dozens of small, defensive fixes shipped at the layer where the security boundary actually lives.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">3. Visibility on every layer</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The largest single user-facing addition in 2.0 is <strong>sozu top</strong> — an operator TUI (behind the tui Cargo feature) that gives you a live btop/htop-style view across seven panes: Overview, Clusters, Backends, Listeners, H2, Certificates, Events. Colour-blind-safe palette, customisable themes — the essentials fit in a terminal, no external dashboard required.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Underneath the TUI, the metric surface itself was rewritten. The mux exposes per-frame-type counters and a breakdown by <a href="https://datatracker.ietf.org/doc/html/rfc9113">RFC 9113</a> error code, TLS handshake telemetry, per-status HTTP counters, and new worker lifecycle gauges. The access log gains TLS and forwarding fields (version, cipher, SNI, ALPN, XFF chain), x_request_id propagation end-to-end, and client and server RTT — enough to follow a request from one hop to the next.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>A new command, SetMetricDetail, lets an operator raise metric cardinality on demand via a time-bounded lease that expires: production stays low-cardinality by default, and deep inspection becomes a one-off decision rather than a config rewrite.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For Clever Cloud, this is the foundation of the <strong>next chapter of customer-facing observability</strong> — per-application latency percentiles, per-cluster availability, TLS handshake breakdowns, request IDs you can follow across hops. The metrics now exist at the proxy. The next step is to surface them in the Clever Cloud console where they belong, alongside the build and deploy views — so you do not need an external APM to understand the traffic your application actually sees.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">4. Traffic policies that you can finally toggle</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu 2.0 reshapes the entire frontend-policy surface (#1231): <strong>typed HSTS</strong> (<a href="https://datatracker.ietf.org/doc/html/rfc6797">RFC 6797</a>) configurable per listener and per frontend; <strong>URL rewrite</strong> (host, path, port) with regex capture propagation from the routing trie into rewrite templates; <strong>request- and response-header rewriting</strong> per frontend — add, set, or delete any header (an empty value deletes it, HAProxy del-header parity), with listener-scoped X-Real-IP injection and anti-spoof elision of client-supplied values on top; <strong>HTTP 301 / 302 / 308 redirects</strong> through a typed RedirectPolicy enum; and <strong>HTTP Basic authentication</strong> per frontend, with SHA-256-hashed credentials and a constant-time compare via the subtle crate (the credential boundary is hardened against timing side-channels — the audit caught it at review time).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is the part of the release where the product opportunity is most visible. Today, doing a clean domain migration on a managed platform typically requires either a backend that knows how to redirect or a separately deployed redirect service; putting a staging URL behind a password typically requires an authentication add-on. <strong>In Sōzu 2.0, these become knobs at the proxy.</strong> The plumbing exists; what remains is to expose those knobs in the Clever Cloud console — as a checkbox on a domain, or a one-click toggle for preview environments. That is the no-code traffic-control surface we want to build next.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">5. Operations as the customer benefit</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A rewrite this deep only ships safely if the fleet keeps moving underneath it. Day-to-day operations got a lot of attention in 2.0.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>sozu listener {http,https,tcp} update is a new field-masked patch verb that tunes non-bind-only listener settings on a running proxy without cycling sockets — H/2 flood thresholds, SNI binding, ALPN preference, idle timeouts, HSTS, custom answers. <strong>CVE mitigations can now be tightened under attack without cycling listener sockets.</strong> Active backend health checks run inside the existing mio event loop (no async runtime, no extra threads) with HTTP/1.1 and HTTP/2 probes, jittered intervals, and a fail-open path that routes through Normal-status backends whose retry policy allows it. systemd integration (closes #228) now does the right thing: Type=notify units, READY=1 only after the initial workers spawn and the saved state replays, STOPPING=1 on graceful shutdown, MAINPID=&lt;new&gt; across hot upgrades.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Releases themselves changed shape. Pushing a tag now produces <strong>ten pre-built tarballs</strong> (three Linux targets crossed with up to four crypto providers), signed keyless via sigstore (cosign + GitHub OIDC), with SLSA build provenance and a SOURCE.txt corresponding-source pointer satisfying AGPL §6 / LGPL §4 — closing the gap noted in #1089. ACME fullchain.pem files now load cleanly even when the client emitted the leaf at the start (Certbot, lego, acme.sh); a six-year-old worker-auto-restart binary race (#515) is fixed by pinning the original inode through /proc/self/fd. The LoadState IPC verb stays forward-compatible with sozu-command-lib 1.1.1 clients, so the ecosystem of integrations does not break on the upgrade.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At Clever Cloud's scale, the cost of an operational incident isn't a ticket — it is compounding latency for thousands of applications, and the engineers' time we owe to building the next thing. <strong>Sōzu 2.0 is the proxy that is quiet to operate, and that quietness is what customers experience as uptime.</strong> It's also what makes Sōzu credible as something you can run on your own infrastructure: signed binaries, hot reloads, ACME quirks ironed out, systemd integration done properly.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">6. Crypto that's ready for tomorrow</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The TLS stack got a quieter but equally important rework (#1191). Sōzu now supports <strong>four pluggable crypto providers</strong> for rustls — crypto-ring (the default), crypto-aws-lc-rs, crypto-openssl, and fips (which implies aws-lc-rs in FIPS mode). All four are exercised by CI, and the precedence chain fips &gt; ring &gt; aws-lc-rs &gt; openssl resolves the active provider deterministically when several features are enabled together.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>What we are most happy about, though, is the default groups_list: <strong>X25519MLKEM768</strong><strong> is now the first-preference key-exchange group</strong> where the provider supports it. That is the post-quantum hybrid being standardised through the IETF (<a href="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem">draft-ietf-tls-ecdhe-mlkem</a>) and already registered in the IANA TLS registry; what it means in practice is that an X25519-only client and a PQ-capable client both negotiate the most robust mutually supported exchange, with no operator action.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When the post-quantum migration becomes a regulatory requirement — on a timeline the industry is still debating — <strong>the groundwork on Clever Cloud will already be in place</strong>: every TLS 1.3 client that offers the hybrid negotiates it today, with no operator action. We made the choice quietly, and we made it the default.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">From reverse proxy to programmable edge</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu has always been an <strong>infrastructure load balancer</strong>: well beyond HTTP, it also balances raw TCP, with a zero-copy forwarding path via splice(2) on Linux for TCP listeners. With 2.0 it moves closer to an <strong>API gateway</strong> and becomes the substrate of a <strong>programmable edge</strong> — and "programmable" is the operative word. Each capability described above (HTTP/2 by default, anti-abuse controls, observability, traffic policies, crypto agility, operational quietness) is a knob. The next year of Clever Cloud's roadmap is about exposing those knobs as product features: through the console, through the API, through the workflows you already use to deploy your applications.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is what we mean when we say Sōzu 2.0 is a first step of something greater. Two-point-zero is not the destination — it is the platform we now build on top of. Managed HTTP/2 everywhere is the first building block. The next is a console where you toggle HSTS, password-protect a preview environment, or redirect a migrated domain. The destination — a fully programmable edge with policy primitives you can compose — is what we are building toward over the coming release cycle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Two more pieces are already on the bench. First, a <strong>UDP load-balancing</strong> layer — in the spirit of IPVS, but with Sōzu's hot-reload model — paired with <strong>TCP health checks</strong> that probe the liveness of the UDP backends; this cements the infrastructure-load-balancer role further. Second, <strong>HTTPS-reachable backends</strong>, which firm up upstream connectivity and open the road to the API gateway.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sōzu is open source under AGPL-3.0 (the command library is LGPL-3.0). The 2.0 release binaries are signed via sigstore and ship SLSA provenance; if you operate your own edge, this release is yours to use, audit, and extend. The code, the issue tracker, and the conversations live at <a href="https://github.com/sozu-proxy/sozu">github.com/sozu-proxy/sozu</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Thank you to the contributors who made this release happen — and to everyone running Sōzu in production, whose feedback shapes where it goes next.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>References</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Standards and specifications</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>RFC 6797</strong> — HTTP Strict Transport Security (HSTS). <a href="https://datatracker.ietf.org/doc/html/rfc6797">https://datatracker.ietf.org/doc/html/rfc6797</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 7540</strong> — Hypertext Transfer Protocol Version 2 (HTTP/2). Now obsoleted by RFC 9113, but §9.1.1 on connection coalescing remains the citation reused by RFC 9113. <a href="https://datatracker.ietf.org/doc/html/rfc7540">https://datatracker.ietf.org/doc/html/rfc7540</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 9113</strong> — HTTP/2 (current). §5 streams, §6 frames, §6.8 GOAWAY, §7 error codes, §8.1 HTTP semantics. <a href="https://datatracker.ietf.org/doc/html/rfc9113">https://datatracker.ietf.org/doc/html/rfc9113</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 9218</strong> — Extensible Prioritization Scheme for HTTP. <a href="https://datatracker.ietf.org/doc/html/rfc9218">https://datatracker.ietf.org/doc/html/rfc9218</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>draft-ietf-tls-ecdhe-mlkem</strong> — Hybrid key exchange in TLS 1.3: X25519MLKEM768 (IETF Internet-Draft, IANA-registered; the post-quantum hybrid Sōzu prefers by default). <a href="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem">https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">CVEs</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>CVE-2019-9512</strong> — HTTP/2 Ping Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9512">https://nvd.nist.gov/vuln/detail/CVE-2019-9512</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2019-9515</strong> — HTTP/2 Settings Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9515">https://nvd.nist.gov/vuln/detail/CVE-2019-9515</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2019-9518</strong> — HTTP/2 Empty Frames Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9518">https://nvd.nist.gov/vuln/detail/CVE-2019-9518</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2021-42574</strong> — Trojan Source (bidirectional override). <a href="https://nvd.nist.gov/vuln/detail/CVE-2021-42574">https://nvd.nist.gov/vuln/detail/CVE-2021-42574</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2023-44487</strong> — HTTP/2 Rapid Reset. <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-44487">https://nvd.nist.gov/vuln/detail/CVE-2023-44487</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2024-27316</strong> — HTTP/2 CONTINUATION Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-27316">https://nvd.nist.gov/vuln/detail/CVE-2024-27316</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2025-8671</strong> — MadeYouReset (HTTP/2). <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-8671">https://nvd.nist.gov/vuln/detail/CVE-2025-8671</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Further reading</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cloudflare Learning Center</strong> — <em>What is HSTS?</em>. Accessible primer on HSTS, the max-age / includeSubDomains / preload semantics, and the HSTS preload list policy. <a href="https://www.cloudflare.com/learning/ssl/what-is-hsts/">https://www.cloudflare.com/learning/ssl/what-is-hsts/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Cloudflare</strong> — <em>HTTP/2 Rapid Reset: deconstructing the record-breaking attack</em>. The canonical write-up of the October 2023 coordinated disclosure, including attack mechanics and the 398 M rps peak captured live. <a href="https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/">https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>HAProxy Technologies</strong> — <em>HAProxy is Not Affected by the HTTP/2 Rapid Reset Attack (CVE-2023-44487)</em>. HAProxy's structural argument for why their stream lifecycle naturally absorbs Rapid Reset; a useful contrast against Sōzu's flood-counter approach. <a href="https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487">https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Cloudflare blog — Post-quantum series</strong>. Multi-year coverage by Bas Westerbaan and colleagues on PQ key exchange and hybrid groups; lineage of the X25519MLKEM768 hybrid Sōzu now negotiates by default. <a href="https://blog.cloudflare.com/tag/post-quantum/">https://blog.cloudflare.com/tag/post-quantum/</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>K3s vs K8s: What Are the Differences and Which One Should You Choose in 2026?</title>
		<link>https://www.clever.cloud/blog/features/2026/05/28/k3s-vs-k8s-what-are-the-differences-and-which-one-should-you-choose-in-2026/</link>
		
		<dc:creator><![CDATA[Marjorie Darrigade]]></dc:creator>
		<pubDate>Thu, 28 May 2026 07:19:05 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[K3s]]></category>
		<category><![CDATA[K8S]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24419</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="K3s vs K8s EN" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en-768x341.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>In short: K3s is a CNCF-certified Kubernetes distribution optimized for constrained environments (edge, IoT, labs). K8s refers to the original Kubernetes project, designed for large-scale production clusters. The choice depends on your available resources, deployment context, and operational workload.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K8s: Standard Kubernetes for Enterprise Environments</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s is the abbreviation of Kubernetes, with the “8” representing the eight letters between the “K” and the “s”. It is the original open-source project maintained by the Cloud Native Computing Foundation (CNCF) and initially developed by Google.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is designed for <strong>large-scale production environments</strong>: multi-node clusters, high availability, integration with public clouds (AWS, GCP, Azure), or on-premises datacenters. Its control plane includes several separate components: API server, scheduler, controller manager, etcd, deployed independently, which provides maximum flexibility but requires significant operational expertise.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Typical requirements for a production control plane node</strong>: at least 2 vCPUs and 2 GB of RAM for Kubernetes components alone, excluding etcd and application workloads.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K3s: A CNCF-Certified Kubernetes Distribution, Not a Fork</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s is a certified Kubernetes distribution, not an unofficial lightweight version or a fork. Created by Rancher Labs, it was <a href="https://thenewstack.io/ranchers-k3s-joins-cncf-sandbox-as-first-kubernetes-distribution/" target="_blank" rel="noreferrer noopener">donated to the CNCF in June 2020</a> and passes the same Sonobuoy conformance tests as all certified distributions. Any valid Kubernetes manifest works on K3s.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Its main goal is to <strong>drastically reduce the resources required </strong>to run Kubernetes in constrained environments (edge, IoT, CI/CD, labs) without giving up API compatibility.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What K3s Changes Compared to K8s</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><a href="https://k3s.io/" target="_blank" rel="noreferrer noopener">A single binary under 70 MB</a>  (supporting x86, ARM64, ARMv7, and S390X), including the containerd runtime, Flannel CNI, a Traefik ingress controller, and a Klipper load balancer.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>SQLite as the default datastore</strong> in single-node mode instead of etcd. In high-availability configurations (minimum three server nodes), K3s can use <strong>embedded etcd </strong>or an external datastore (MySQL, PostgreSQL, external etcd).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Alpha and beta components removed </strong>to reduce the attack surface and memory footprint.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>Important point</strong>: K3s does not remove etcd; it makes it optional. In single-node mode, SQLite is sufficient. In high availability, embedded or external etcd is supported - although the latter is not officially supported by the K3s team.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Resource Footprint</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s can run with as little as <strong>512 MB of RAM</strong> on an agent node. According to <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">the official documentation</a> (updated May 2026), a server node (control plane) requires 2 GB of RAM and 2 CPU cores, excluding application workloads. A load-tested profile is available in the <a href="https://docs.k3s.io/reference/resource-profiling" target="_blank" rel="noreferrer noopener">K3s resource profiling guide</a>. It is worth noting that tests on hardware with 1 GB of total RAM showed instability across K3s, k0s, and MicroK8s when deploying real application workloads (even a lightweight Kubernetes cluster still consumes non-negligible control-plane resources).</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Key Technical Differences</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Datastore</h3>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Scenario</th>
        <th>K8s</th>
        <th>K3s</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Single-node</td>
        <td>etcd required</td>
        <td>SQLite by default</td>
      </tr>
      <tr>
        <td>Multi-node High Availability</td>
        <td>etcd</td>
        <td>Embedded or external etcd (MySQL, PostgreSQL)</td>
      </tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Runtime and packaging</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s no longer provides a default runtime since the removal of dockershim (v1.24, 2022). Starting with Kubernetes 1.24, you must install a CRI-compatible runtime (containerd or CRI-O). K3s embeds containerd directly into its binary.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Control Plane Architecture</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In K8s, control plane components (API server, scheduler, controller manager) are separate processes. In K3s, they are merged into a single binary, which reduces overhead but limits some advanced isolation configurations.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Scalability</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s is suitable for moderately sized clusters. In high-availability configurations (3 server nodes, 4 vCPU / 8 GB RAM), <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">the official documentation</a> indicates a capacity of around 1,200 agents. For very large clusters (several thousand nodes), K8s remains the reference.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K3s vs K8s Comparison Table</h2>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"35px"} -->
<div style="height:35px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table tbody td:first-child {
    font-weight: 600;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Criterion</th>
        <th>K3s</th>
        <th>K8s</th>
      </tr>
    </thead>
    <tbody>
      <tr><td>CNCF certification</td><td>Yes (certified distribution)</td><td>Yes (original project)</td></tr>
      <tr><td>Binary size</td><td>&lt; 100 MB</td><td>Not applicable (separate components)</td></tr>
      <tr><td>Default datastore</td><td>SQLite (single-node) / etcd (high availability)</td><td>etcd</td></tr>
      <tr><td>Embedded runtime</td><td>containerd</td><td>No (to be installed separately)</td></tr>
      <tr><td>ARM support</td><td>Yes (ARM64, ARMv7)</td><td>Yes (depends on the distribution)</td></tr>
      <tr><td>Default ingress</td><td>Traefik (included)</td><td>No (to be deployed separately)</td></tr>
      <tr><td>API compatibility</td><td>Required APIs certified by the CNCF</td><td>Reference implementation (original project)</td></tr>
      <tr><td>Documented max scalability</td><td>~1200 agents (High Availability 3 servers)</td><td>Several thousand nodes</td></tr>
      <tr><td>Main use case</td><td>Edge, IoT, lab, CI/CD</td><td>Enterprise, cloud, datacenters</td></tr>
      <tr><td>Operational complexity</td><td>Low</td><td>High</td></tr>
      <tr><td>Alpha/beta components</td><td>Removed</td><td>Included</td></tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Use Cases: Which One Should You Choose?</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choose K3s if:</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>You deploy on <strong>constrained hardware</strong> (Raspberry Pi, industrial appliances, edge servers with limited RAM).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You manage remote <strong>IoT or edge clusters</strong>, potentially in disconnected environments.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You need a <strong>development or CI cluster</strong> that starts quickly, including on modest hardware.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You want an operational cluster with <strong>minimal initial configuration</strong>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choose K8s (or an enterprise distribution) if:</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>You orchestrate <strong>hundreds or thousands of production nodes</strong>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Your workloads require <strong>advanced cloud-native integrations</strong> (storage, load balancers, IAM) provided by hyperscalers.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You need <strong>alpha or beta API components</strong> unavailable in K3s.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Your organization has a <strong>dedicated SRE team</strong> operating clusters.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Hybrid Use Cases: K3s and K8s Together</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s and K8s are not mutually exclusive. Several hybrid architectures are documented in production:</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Fleet Management with Rancher</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Edge K3s clusters are managed from a central control plane running on K8s or RKE2. The Home Depot (large American retailer with more than 2,300 stores) <a href="https://www.datacenterknowledge.com/data-center-site-selection/home-depot-upgrades-2-300-retail-edge-locations-using-suse-rancher-k3s" target="_blank" rel="noreferrer noopener">manages its sites using K3s supervised through Rancher</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s for Dev and Staging, K8s for Production</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>API compatibility guarantees that manifests and Helm charts tested on K3s work in production on an enterprise cluster. This parity reduces surprises when promoting environments.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">CI/CD</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Test pipelines run on K3s (low cost, fast startup) while production environments use managed K8s clusters.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Managed Kubernetes: A Third Path</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Neither K3s nor K8s solves the question of <strong>daily operations</strong>: updates, certificates, control plane monitoring, or failure management. This is precisely what managed Kubernetes solutions cover.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Hyperscalers (EKS, GKE, AKS) provide this management within their own clouds. But managed solutions also exist outside these ecosystems, especially for organizations that want to retain control over their data and choose sovereign Kubernetes, or even French-operated Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/product/kubernetes/">Clever Kubernetes Engine (CKE)</a> is Clever Cloud’s managed Kubernetes service, designed for teams already using Kubernetes and wanting to delegate control plane management (updates, high availability, monitoring) without being constrained to a single hyperscaler. CKE explicitly targets teams that are not fully covered by the traditional  <a href="https://www.clever.cloud/clever-cloud-paas/">PaaS</a> model (multi-runtime use cases, non-twelve-factor workloads, or the need for granular resource control).</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"150px"} -->
<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"textAlign":"center","level":1} -->
<h1 class="wp-block-heading has-text-align-center">FAQ</h1>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="height: 1px; background-color: #DEDDEE; margin: 30px auto; width: 100%;"></div>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Is K3s a Kubernetes fork?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. K3s is a CNCF-certified Kubernetes distribution. It passes Sonobuoy conformance tests and supports the same APIs as K8s. It is not maintained separately from Kubernetes: it follows upstream Kubernetes releases.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Can K3s Be Used in Production?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes, with some nuances. K3s is documented for production workloads in constrained environments (edge, IoT). For large-scale clusters or critical workloads with high SLA requirements, K8s (or an enterprise distribution such as RKE2) is more appropriate.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Does K3s Support Helm?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes. K3s includes an integrated Helm controller and is compatible with any valid Helm chart.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What Is the Difference Between K3s and K3d?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3d is a tool that runs K3s inside Docker containers. It further simplifies the creation of local K3s clusters for development, but it is not intended for production use.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Does K3s Run on ARM?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes. ARM64 and ARMv7 are natively supported, which explains its popularity on Raspberry Pi devices and industrial appliances.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Managed Kubernetes vs Self-Hosted K3s: Which One Should You Choose?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Self-hosted K3s gives you full control but makes you responsible for operations (updates, security, high availability). Managed Kubernetes delegates this responsibility to an operator, at the cost of dependency on that provider. The choice depends on your operational resources and control requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"90px"} -->
<div style="height:90px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="K3s vs K8s EN" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>In short: K3s is a CNCF-certified Kubernetes distribution optimized for constrained environments (edge, IoT, labs). K8s refers to the original Kubernetes project, designed for large-scale production clusters. The choice depends on your available resources, deployment context, and operational workload.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K8s: Standard Kubernetes for Enterprise Environments</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s is the abbreviation of Kubernetes, with the “8” representing the eight letters between the “K” and the “s”. It is the original open-source project maintained by the Cloud Native Computing Foundation (CNCF) and initially developed by Google.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is designed for <strong>large-scale production environments</strong>: multi-node clusters, high availability, integration with public clouds (AWS, GCP, Azure), or on-premises datacenters. Its control plane includes several separate components: API server, scheduler, controller manager, etcd, deployed independently, which provides maximum flexibility but requires significant operational expertise.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Typical requirements for a production control plane node</strong>: at least 2 vCPUs and 2 GB of RAM for Kubernetes components alone, excluding etcd and application workloads.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K3s: A CNCF-Certified Kubernetes Distribution, Not a Fork</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s is a certified Kubernetes distribution, not an unofficial lightweight version or a fork. Created by Rancher Labs, it was <a href="https://thenewstack.io/ranchers-k3s-joins-cncf-sandbox-as-first-kubernetes-distribution/" target="_blank" rel="noreferrer noopener">donated to the CNCF in June 2020</a> and passes the same Sonobuoy conformance tests as all certified distributions. Any valid Kubernetes manifest works on K3s.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Its main goal is to <strong>drastically reduce the resources required </strong>to run Kubernetes in constrained environments (edge, IoT, CI/CD, labs) without giving up API compatibility.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What K3s Changes Compared to K8s</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><a href="https://k3s.io/" target="_blank" rel="noreferrer noopener">A single binary under 70 MB</a>  (supporting x86, ARM64, ARMv7, and S390X), including the containerd runtime, Flannel CNI, a Traefik ingress controller, and a Klipper load balancer.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>SQLite as the default datastore</strong> in single-node mode instead of etcd. In high-availability configurations (minimum three server nodes), K3s can use <strong>embedded etcd </strong>or an external datastore (MySQL, PostgreSQL, external etcd).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Alpha and beta components removed </strong>to reduce the attack surface and memory footprint.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>Important point</strong>: K3s does not remove etcd; it makes it optional. In single-node mode, SQLite is sufficient. In high availability, embedded or external etcd is supported - although the latter is not officially supported by the K3s team.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Resource Footprint</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s can run with as little as <strong>512 MB of RAM</strong> on an agent node. According to <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">the official documentation</a> (updated May 2026), a server node (control plane) requires 2 GB of RAM and 2 CPU cores, excluding application workloads. A load-tested profile is available in the <a href="https://docs.k3s.io/reference/resource-profiling" target="_blank" rel="noreferrer noopener">K3s resource profiling guide</a>. It is worth noting that tests on hardware with 1 GB of total RAM showed instability across K3s, k0s, and MicroK8s when deploying real application workloads (even a lightweight Kubernetes cluster still consumes non-negligible control-plane resources).</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Key Technical Differences</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Datastore</h3>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Scenario</th>
        <th>K8s</th>
        <th>K3s</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Single-node</td>
        <td>etcd required</td>
        <td>SQLite by default</td>
      </tr>
      <tr>
        <td>Multi-node High Availability</td>
        <td>etcd</td>
        <td>Embedded or external etcd (MySQL, PostgreSQL)</td>
      </tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Runtime and packaging</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s no longer provides a default runtime since the removal of dockershim (v1.24, 2022). Starting with Kubernetes 1.24, you must install a CRI-compatible runtime (containerd or CRI-O). K3s embeds containerd directly into its binary.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Control Plane Architecture</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In K8s, control plane components (API server, scheduler, controller manager) are separate processes. In K3s, they are merged into a single binary, which reduces overhead but limits some advanced isolation configurations.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Scalability</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s is suitable for moderately sized clusters. In high-availability configurations (3 server nodes, 4 vCPU / 8 GB RAM), <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">the official documentation</a> indicates a capacity of around 1,200 agents. For very large clusters (several thousand nodes), K8s remains the reference.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K3s vs K8s Comparison Table</h2>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"35px"} -->
<div style="height:35px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table tbody td:first-child {
    font-weight: 600;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Criterion</th>
        <th>K3s</th>
        <th>K8s</th>
      </tr>
    </thead>
    <tbody>
      <tr><td>CNCF certification</td><td>Yes (certified distribution)</td><td>Yes (original project)</td></tr>
      <tr><td>Binary size</td><td>&lt; 100 MB</td><td>Not applicable (separate components)</td></tr>
      <tr><td>Default datastore</td><td>SQLite (single-node) / etcd (high availability)</td><td>etcd</td></tr>
      <tr><td>Embedded runtime</td><td>containerd</td><td>No (to be installed separately)</td></tr>
      <tr><td>ARM support</td><td>Yes (ARM64, ARMv7)</td><td>Yes (depends on the distribution)</td></tr>
      <tr><td>Default ingress</td><td>Traefik (included)</td><td>No (to be deployed separately)</td></tr>
      <tr><td>API compatibility</td><td>Required APIs certified by the CNCF</td><td>Reference implementation (original project)</td></tr>
      <tr><td>Documented max scalability</td><td>~1200 agents (High Availability 3 servers)</td><td>Several thousand nodes</td></tr>
      <tr><td>Main use case</td><td>Edge, IoT, lab, CI/CD</td><td>Enterprise, cloud, datacenters</td></tr>
      <tr><td>Operational complexity</td><td>Low</td><td>High</td></tr>
      <tr><td>Alpha/beta components</td><td>Removed</td><td>Included</td></tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Use Cases: Which One Should You Choose?</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choose K3s if:</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>You deploy on <strong>constrained hardware</strong> (Raspberry Pi, industrial appliances, edge servers with limited RAM).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You manage remote <strong>IoT or edge clusters</strong>, potentially in disconnected environments.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You need a <strong>development or CI cluster</strong> that starts quickly, including on modest hardware.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You want an operational cluster with <strong>minimal initial configuration</strong>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choose K8s (or an enterprise distribution) if:</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>You orchestrate <strong>hundreds or thousands of production nodes</strong>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Your workloads require <strong>advanced cloud-native integrations</strong> (storage, load balancers, IAM) provided by hyperscalers.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You need <strong>alpha or beta API components</strong> unavailable in K3s.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Your organization has a <strong>dedicated SRE team</strong> operating clusters.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Hybrid Use Cases: K3s and K8s Together</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s and K8s are not mutually exclusive. Several hybrid architectures are documented in production:</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Fleet Management with Rancher</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Edge K3s clusters are managed from a central control plane running on K8s or RKE2. The Home Depot (large American retailer with more than 2,300 stores) <a href="https://www.datacenterknowledge.com/data-center-site-selection/home-depot-upgrades-2-300-retail-edge-locations-using-suse-rancher-k3s" target="_blank" rel="noreferrer noopener">manages its sites using K3s supervised through Rancher</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s for Dev and Staging, K8s for Production</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>API compatibility guarantees that manifests and Helm charts tested on K3s work in production on an enterprise cluster. This parity reduces surprises when promoting environments.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">CI/CD</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Test pipelines run on K3s (low cost, fast startup) while production environments use managed K8s clusters.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Managed Kubernetes: A Third Path</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Neither K3s nor K8s solves the question of <strong>daily operations</strong>: updates, certificates, control plane monitoring, or failure management. This is precisely what managed Kubernetes solutions cover.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Hyperscalers (EKS, GKE, AKS) provide this management within their own clouds. But managed solutions also exist outside these ecosystems, especially for organizations that want to retain control over their data and choose sovereign Kubernetes, or even French-operated Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/product/kubernetes/">Clever Kubernetes Engine (CKE)</a> is Clever Cloud’s managed Kubernetes service, designed for teams already using Kubernetes and wanting to delegate control plane management (updates, high availability, monitoring) without being constrained to a single hyperscaler. CKE explicitly targets teams that are not fully covered by the traditional  <a href="https://www.clever.cloud/clever-cloud-paas/">PaaS</a> model (multi-runtime use cases, non-twelve-factor workloads, or the need for granular resource control).</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"150px"} -->
<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"textAlign":"center","level":1} -->
<h1 class="wp-block-heading has-text-align-center">FAQ</h1>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="height: 1px; background-color: #DEDDEE; margin: 30px auto; width: 100%;"></div>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Is K3s a Kubernetes fork?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. K3s is a CNCF-certified Kubernetes distribution. It passes Sonobuoy conformance tests and supports the same APIs as K8s. It is not maintained separately from Kubernetes: it follows upstream Kubernetes releases.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Can K3s Be Used in Production?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes, with some nuances. K3s is documented for production workloads in constrained environments (edge, IoT). For large-scale clusters or critical workloads with high SLA requirements, K8s (or an enterprise distribution such as RKE2) is more appropriate.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Does K3s Support Helm?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes. K3s includes an integrated Helm controller and is compatible with any valid Helm chart.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What Is the Difference Between K3s and K3d?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3d is a tool that runs K3s inside Docker containers. It further simplifies the creation of local K3s clusters for development, but it is not intended for production use.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Does K3s Run on ARM?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes. ARM64 and ARMv7 are natively supported, which explains its popularity on Raspberry Pi devices and industrial appliances.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Managed Kubernetes vs Self-Hosted K3s: Which One Should You Choose?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Self-hosted K3s gives you full control but makes you responsible for operations (updates, security, high availability). Managed Kubernetes delegates this responsibility to an operator, at the cost of dependency on that provider. The choice depends on your operational resources and control requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"90px"} -->
<div style="height:90px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How Clever Cloud responds to kernel vulnerabilities</title>
		<link>https://www.clever.cloud/blog/engineering/2026/05/26/how-clever-cloud-responds-to-kernel-vulnerabilities/</link>
		
		<dc:creator><![CDATA[Leo Le Levé Dandé]]></dc:creator>
		<pubDate>Tue, 26 May 2026 13:57:15 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[CVE]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24388</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-how-clever-cloud-responds-to-kernel-vulnerabilities-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05 SEO How Clever Cloud responds to kernel vulnerabilities EN" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-how-clever-cloud-responds-to-kernel-vulnerabilities-en.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-how-clever-cloud-responds-to-kernel-vulnerabilities-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-how-clever-cloud-responds-to-kernel-vulnerabilities-en-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>Several recent Linux kernel vulnerabilities have required a swift response from infrastructure operators. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Among them, <a href="https://access.redhat.com/security/vulnerabilities/RHSB-2026-002">Copy Fail</a> and <a href="https://access.redhat.com/security/vulnerabilities/RHSB-2026-003">Dirty Frag</a> drew attention because they involve local privilege escalation scenarios. Copy Fail is tracked as <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-31431">CVE-2026-31431</a>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dirty Frag covers two distinct vulnerabilities, <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43284">CVE-2026-43284</a> and <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43500">CVE-2026-43500</a>, tied to Linux kernel components.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At Clever Cloud, we treated these vulnerabilities as critical infrastructure matters. Our goal was twofold: quickly shrink the exposure window, then sustainably improve our kernel selection and deployment process.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This article reviews our approach, the decisions made, and the changes brought to our operations pipeline</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Why these vulnerabilities called for a fast response</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Copy Fail and Dirty Frag belong to the family of local privilege escalation vulnerabilities. In this type of scenario, an attacker must already be able to execute code locally, but can then attempt to gain higher privileges on the affected machine.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dirty Frag rests on two Linux kernel flaws. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>They notably affect modules related to ESP, used by <a href="https://en.wikipedia.org/wiki/IPsec">IPsec</a>, and to <a href="https://docs.kernel.org/networking/rxrpc.html">RxRPC</a>. On a cloud platform, this type of vulnerability calls for a rapid analysis. The risk is not limited to a single isolated machine. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Scenarios tied to shared environments, containerized workloads, and isolation mechanisms must also be assessed.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What we verified</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We analyzed the potential impact of these vulnerabilities on our environments. This step is not just about reading security advisories. It also involves verifying whether a theoretical scenario can become relevant in our operating context.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the case of Copy Fail, the flaw came under embargo together with its patch. We published a new system image with the patch applied in the days that followed. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Our customers' applications were redeployed shortly after.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the case of Dirty Frag, our internal analyses confirmed that these vulnerabilities had to be taken seriously. ESP modules are enabled in our kernels to support some specific customer needs. Fortunately, RxRPC-related modules are not present in our environment, as they serve no purpose for our usage. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We do not detail the technical steps of the exploitation here, since the purpose of this article is to inform our customers, not to publish a reproducible procedure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This validation confirmed the operational decision: handle the matter immediately, reduce the exposed surface, then force the necessary redeployments.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<table style="border-collapse:collapse;width:100%;font-family:Arial,sans-serif;">
<thead>
<tr style="background:#f5f5f5;">
<th style="border:1px solid #ddd;padding:12px 16px;text-align:left;">Period</th>
<th style="border:1px solid #ddd;padding:12px 16px;text-align:left;">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">April 30, 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Fast rollout of initial kernel mitigations</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">May 7, 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Update of kernels affected by the new vulnerabilities</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">May 8, 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Progressive workload redeployment to apply the patches</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">May 11, 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Production release of kernel management integration into the orchestration pipeline</td>
</tr>
</tbody>
</table>
<!-- /wp:html -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Our operational response</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Rolling out immediate measures</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We first applied quick measures on the affected kernels. In the case of Dirty Frag, the publicly recommended measures focus in particular on the kernel components related to ESP and RxRPC.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On Clever Cloud's side, the goal was clear: reduce the identified exposed surfaces and shrink the exposure window without waiting for a standard maintenance cycle.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Redeploying the affected workloads</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A kernel update only matters if the affected systems actually restart on a patched environment. We therefore launched a progressive redeployment of applications, then handled the cases that blocked this redeployment.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This phase matters. On a managed platform, the fix is not limited to producing an image or compiling a kernel. The execution chain must also actually use the expected version.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Improving the process along the way</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We also took advantage of this sequence to replace a temporary mechanism with a cleaner integration into our orchestration pipeline.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Concretely, the kernel choice is now passed more explicitly through our internal pipeline, all the way to Supernova, our hypervisor agent. This evolution replaces the stiffer workaround put in place in the heat of the moment.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is the central point of this intervention: fix fast, then make the fix more reliable for future operations.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What this changes for Clever Cloud customers</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For customers, the expected effect is simple: reduce exposure without any manual action on their part whenever the platform can handle the redeployment.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Clever Cloud runs an architecture that relies in particular on isolation through virtualization. This approach is documented on <a href="https://www.clever-cloud.com/security/">our security pages</a> and in our technical content on running containers inside virtual machines. It does not eliminate every risk, but it limits certain lateral movement scenarios compared to models where multiple workloads share the same execution environment directly.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We avoid, however, presenting this isolation as an absolute guarantee. A kernel vulnerability must always be taken seriously. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is why we combined mitigation, redeployment, and improvement of our operations pipeline.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What we take away</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>This sequence confirms three principles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>First, a kernel vulnerability must be analyzed in its actual operating context. A public alert is not enough. We need to understand whether the conditions required for exploitation can exist on the platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Second, reaction speed matters. The Copy Fail and Dirty Frag vulnerabilities were disclosed publicly within a few days of each other, with analyses published by several players in the Linux and cloud ecosystem.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Finally, a useful security response must not only fix the problem of the moment. It must also improve the system that will handle the next incident.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is what we did here: handled the vulnerabilities, shrank the exposure window, and strengthened our kernel management process.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"textAlign":"center","level":1} -->
<h1 class="wp-block-heading has-text-align-center">Q&amp;A</h1>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="height: 1px; background-color: #DEDDEE; margin: 30px auto; width: 100%;"></div>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong><strong>What is a local kernel vulnerability?</strong></strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A local kernel vulnerability is a flaw that already requires execution capability on the affected machine. It can then allow gaining higher privileges, such as root, if the kernel is vulnerable.<br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong><strong>Why do these flaws concern cloud platforms?</strong></strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Cloud platforms run many workloads with isolation mechanisms. A kernel flaw can become critical if it allows crossing certain boundaries between processes, containers, or execution environments.<br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong><strong>Are Dirty Frag and Copy Fail the same vulnerability?</strong></strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. Copy Fail is tracked as CVE-2026-31431. Dirty Frag covers CVE-2026-43284 and CVE-2026-43500. These vulnerabilities are close in impact, but they are distinct.<br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong><strong>What action is required from Clever Cloud customers?</strong></strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No general action is required from customers for environments handled by the platform. The automation brought by Clever Cloud allowed everything to be updated without action needed. Specific cases are tracked individually.<br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-how-clever-cloud-responds-to-kernel-vulnerabilities-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05 SEO How Clever Cloud responds to kernel vulnerabilities EN" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-how-clever-cloud-responds-to-kernel-vulnerabilities-en.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-how-clever-cloud-responds-to-kernel-vulnerabilities-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-how-clever-cloud-responds-to-kernel-vulnerabilities-en-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>Several recent Linux kernel vulnerabilities have required a swift response from infrastructure operators. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Among them, <a href="https://access.redhat.com/security/vulnerabilities/RHSB-2026-002">Copy Fail</a> and <a href="https://access.redhat.com/security/vulnerabilities/RHSB-2026-003">Dirty Frag</a> drew attention because they involve local privilege escalation scenarios. Copy Fail is tracked as <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-31431">CVE-2026-31431</a>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dirty Frag covers two distinct vulnerabilities, <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43284">CVE-2026-43284</a> and <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43500">CVE-2026-43500</a>, tied to Linux kernel components.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At Clever Cloud, we treated these vulnerabilities as critical infrastructure matters. Our goal was twofold: quickly shrink the exposure window, then sustainably improve our kernel selection and deployment process.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This article reviews our approach, the decisions made, and the changes brought to our operations pipeline</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Why these vulnerabilities called for a fast response</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Copy Fail and Dirty Frag belong to the family of local privilege escalation vulnerabilities. In this type of scenario, an attacker must already be able to execute code locally, but can then attempt to gain higher privileges on the affected machine.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dirty Frag rests on two Linux kernel flaws. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>They notably affect modules related to ESP, used by <a href="https://en.wikipedia.org/wiki/IPsec">IPsec</a>, and to <a href="https://docs.kernel.org/networking/rxrpc.html">RxRPC</a>. On a cloud platform, this type of vulnerability calls for a rapid analysis. The risk is not limited to a single isolated machine. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Scenarios tied to shared environments, containerized workloads, and isolation mechanisms must also be assessed.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What we verified</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We analyzed the potential impact of these vulnerabilities on our environments. This step is not just about reading security advisories. It also involves verifying whether a theoretical scenario can become relevant in our operating context.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the case of Copy Fail, the flaw came under embargo together with its patch. We published a new system image with the patch applied in the days that followed. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Our customers' applications were redeployed shortly after.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the case of Dirty Frag, our internal analyses confirmed that these vulnerabilities had to be taken seriously. ESP modules are enabled in our kernels to support some specific customer needs. Fortunately, RxRPC-related modules are not present in our environment, as they serve no purpose for our usage. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We do not detail the technical steps of the exploitation here, since the purpose of this article is to inform our customers, not to publish a reproducible procedure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This validation confirmed the operational decision: handle the matter immediately, reduce the exposed surface, then force the necessary redeployments.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<table style="border-collapse:collapse;width:100%;font-family:Arial,sans-serif;">
<thead>
<tr style="background:#f5f5f5;">
<th style="border:1px solid #ddd;padding:12px 16px;text-align:left;">Period</th>
<th style="border:1px solid #ddd;padding:12px 16px;text-align:left;">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">April 30, 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Fast rollout of initial kernel mitigations</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">May 7, 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Update of kernels affected by the new vulnerabilities</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">May 8, 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Progressive workload redeployment to apply the patches</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">May 11, 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Production release of kernel management integration into the orchestration pipeline</td>
</tr>
</tbody>
</table>
<!-- /wp:html -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Our operational response</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Rolling out immediate measures</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We first applied quick measures on the affected kernels. In the case of Dirty Frag, the publicly recommended measures focus in particular on the kernel components related to ESP and RxRPC.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On Clever Cloud's side, the goal was clear: reduce the identified exposed surfaces and shrink the exposure window without waiting for a standard maintenance cycle.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Redeploying the affected workloads</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A kernel update only matters if the affected systems actually restart on a patched environment. We therefore launched a progressive redeployment of applications, then handled the cases that blocked this redeployment.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This phase matters. On a managed platform, the fix is not limited to producing an image or compiling a kernel. The execution chain must also actually use the expected version.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Improving the process along the way</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We also took advantage of this sequence to replace a temporary mechanism with a cleaner integration into our orchestration pipeline.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Concretely, the kernel choice is now passed more explicitly through our internal pipeline, all the way to Supernova, our hypervisor agent. This evolution replaces the stiffer workaround put in place in the heat of the moment.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is the central point of this intervention: fix fast, then make the fix more reliable for future operations.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What this changes for Clever Cloud customers</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For customers, the expected effect is simple: reduce exposure without any manual action on their part whenever the platform can handle the redeployment.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Clever Cloud runs an architecture that relies in particular on isolation through virtualization. This approach is documented on <a href="https://www.clever-cloud.com/security/">our security pages</a> and in our technical content on running containers inside virtual machines. It does not eliminate every risk, but it limits certain lateral movement scenarios compared to models where multiple workloads share the same execution environment directly.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We avoid, however, presenting this isolation as an absolute guarantee. A kernel vulnerability must always be taken seriously. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is why we combined mitigation, redeployment, and improvement of our operations pipeline.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What we take away</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>This sequence confirms three principles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>First, a kernel vulnerability must be analyzed in its actual operating context. A public alert is not enough. We need to understand whether the conditions required for exploitation can exist on the platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Second, reaction speed matters. The Copy Fail and Dirty Frag vulnerabilities were disclosed publicly within a few days of each other, with analyses published by several players in the Linux and cloud ecosystem.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Finally, a useful security response must not only fix the problem of the moment. It must also improve the system that will handle the next incident.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is what we did here: handled the vulnerabilities, shrank the exposure window, and strengthened our kernel management process.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"textAlign":"center","level":1} -->
<h1 class="wp-block-heading has-text-align-center">Q&amp;A</h1>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="height: 1px; background-color: #DEDDEE; margin: 30px auto; width: 100%;"></div>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong><strong>What is a local kernel vulnerability?</strong></strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A local kernel vulnerability is a flaw that already requires execution capability on the affected machine. It can then allow gaining higher privileges, such as root, if the kernel is vulnerable.<br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong><strong>Why do these flaws concern cloud platforms?</strong></strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Cloud platforms run many workloads with isolation mechanisms. A kernel flaw can become critical if it allows crossing certain boundaries between processes, containers, or execution environments.<br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong><strong>Are Dirty Frag and Copy Fail the same vulnerability?</strong></strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. Copy Fail is tracked as CVE-2026-31431. Dirty Frag covers CVE-2026-43284 and CVE-2026-43500. These vulnerabilities are close in impact, but they are distinct.<br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong><strong>What action is required from Clever Cloud customers?</strong></strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No general action is required from customers for environments handled by the platform. The automation brought by Clever Cloud allowed everything to be updated without action needed. Specific cases are tracked individually.<br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>K8S: What Is Kubernetes, How It Works, and Why It Became the Standard</title>
		<link>https://www.clever.cloud/blog/engineering/2026/05/19/k8s-kubernetes-definition-standard/</link>
		
		<dc:creator><![CDATA[Leo Le Levé Dandé]]></dc:creator>
		<pubDate>Tue, 19 May 2026 10:54:29 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24294</guid>

					<description><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05.19 Clever Cloud Bannière Blog K8S EN" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en.png 2499w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:heading -->
<h2 class="wp-block-heading">How Kubernetes Works: a Declarative Orchestrator</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Most descriptions of Kubernetes list its components (pods, deployments, services) without explaining the central mechanism. The fundamental concept lies elsewhere: Kubernetes is first and foremost an <strong>orchestrator</strong>, and its core engine relies on a reconciliation loop.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You don't tell Kubernetes <em>what to do</em>. You tell it <em>what you want your system to look like</em>. This distinction, declarative versus imperative, changes everything.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In practice, you describe the desired state in manifest files, typically in YAML format: "I want 3 replicas of this image, exposed on port 80, with these environment variables." You submit this manifest to the Kubernetes API via kubectl. From that point on, Kubernetes continuously compares the actual state of the cluster (what is actually running) to the desired state (what you declared), and acts to bring them into alignment. If a node dies, its pods are rescheduled elsewhere. If you change from 3 to 10 replicas in the manifest, Kubernetes starts 7 more. If a container crashes, it gets restarted.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This reconciliation loop is the heart of everything Kubernetes does: self-healing, scaling, rolling updates, and rollbacks. To dive deeper into this mechanism and the other capabilities it enables, learn more about container orchestration.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Architecture in Brief: Control Plane, Nodes, Pods</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A Kubernetes cluster is divided into two parts. The <strong>control plane</strong> is the brain: it makes global decisions, accepts API requests, schedules workloads, and monitors the state of the cluster. It relies on a few key components, including the API server (kube-apiserver), the scheduler (kube-scheduler), and the controller manager (kube-controller-manager), along with a distributed data store that holds the entire cluster state, traditionally etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Nodes</strong> are the machines that actually run the workloads. On each node, an agent called kubelet receives instructions from the control plane and launches containers through a container runtime (containerd, CRI-O, etc.). The smallest deployable unit is not an individual container but a <strong>pod</strong>: one or more containers that share a network and storage. Higher-level objects (Deployment, Service, Ingress, ConfigMap, Secret) describe how pods should be managed, exposed, and configured.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This architecture is also the source of a common confusion with Docker, whose role is actually complementary to Kubernetes rather than competitive.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Why K8S Became the Orchestration Standard</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>According to the<a href="https://www.cncf.io/reports/"> CNCF Annual Cloud Native Survey 2025</a>, published in January 2026, 98% of surveyed organizations have adopted <a href="https://www.clever.cloud/blog/company/2025/05/30/what-is-native-cloud/">cloud native</a> techniques, and 82% of container users deploy Kubernetes in production, up from 66% in 2023. The dominance is massive. But explaining it solely through technical qualities would be incomplete; it is also a story of ecosystem dynamics and aligned interests.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>On the technical side</strong>, three properties explain adoption. First, the declarative model described above: it makes deployments reproducible, versionable in Git, and resilient to failures. Second, portability: the same manifest works on a development machine (Minikube, kind, k3d), on an on-premise cluster, and on any cloud. Third, extensibility: the Kubernetes API accepts Custom Resource Definitions (CRDs) and custom controllers (Operators), turning it into a platform for building platforms. This triggered a massive ecosystem dynamic.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>On the strategic side</strong>, the story is less often told. By 2014, Google had more than a decade of experience managing containers at scale with its internal systems Borg and Omega, whose design principles were shared publicly through academic research papers (Omega in 2013, Borg in 2015). Rather than open-sourcing Borg itself, which remained tightly coupled to Google's proprietary infrastructure, the team created Kubernetes as a new project inspired by that experience, with a distinct implementation designed from the outset for external adoption. The project was released as open source in June 2014 and donated to the Cloud Native Computing Foundation in 2015. This neutrality, a project hosted by a Linux foundation rather than a cloud provider, proved decisive. No competitor could afford <em>not</em> to adopt it without being marginalized from the emerging cloud-native ecosystem. AWS, which initially pushed its own proprietary solution (ECS), announced EKS in late 2017 and launched it in general availability in June 2018. By then, the standard was sealed.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>On the ecosystem side</strong>, the network effect did the rest: Helm for packaging applications, Prometheus for monitoring, Istio and Linkerd for service mesh, ArgoCD and Flux for GitOps, Trivy and Falco for security. Each additional tool reinforces the value of the standard. On the talent side, Kubernetes skills have become massively in-demand across DevOps and SRE roles, creating a virtuous cycle: more trained engineers, more adopting companies, more engineers getting trained.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the CNCF 2025 report, the community now describes Kubernetes as "boring," using the term as the highest praise: a mature, predictable tool whose APIs no longer break with every release. That is exactly what you want from infrastructure that has become standard.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">When Kubernetes Adds Value, and When Other Approaches Are a Better Fit</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The fact that K8S is the standard doesn't mean it's the right answer to every problem. Choosing Kubernetes, a PaaS, or a combination of both depends on the technical and organizational context; at Clever Cloud, many teams use both in parallel for different workloads.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes delivers real value in several contexts:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>strong portability requirements: multi-cloud, hybrid, or on-premise combined with cloud, where the Kubernetes manifest becomes a common denominator;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>distributed architectures that apply 12-factor app principles and the "cattle" approach (interchangeable, stateless instances) with sophisticated orchestration needs;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>strategic alignment with the CNCF ecosystem (Helm, Operators, ArgoCD, Istio, etc.) or client/partner prerequisites that impose the standard;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>need for a shared platform across large teams, with a dedicated platform engineering team or the willingness to outsource that responsibility to a managed service.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Conversely, in other contexts, a PaaS like Clever Cloud delivers the same outcomes as Kubernetes (industrialized deployments, autoscaling, resilience) without the operational complexity of the orchestrator. This is particularly true for standard application architectures (web + backend + database) where the effort of configuring and operating Kubernetes doesn't translate into tangible added value.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>And for intermediate workloads (IoT, edge, development environments, small clusters), the differences between K3S and K8S are worth weighing before deciding: the lightweight distribution is often a better fit. The de facto standard is not a moral obligation. It is a powerful and costly tool to operate, and its use should be chosen based on the problems it solves, often as a complement to other approaches rather than a replacement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">The Limits of the Standard: Operational Debt</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Running Kubernetes in production is not trivial. That's one of the reasons why many companies that adopt K8S opt for a managed service rather than a self-managed installation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The sources of complexity are numerous: configuring access control correctly (RBAC), choosing and operating a network plugin (CNI), wiring up persistent storage (CSI), setting up observability, managing certificates, performing minor and major upgrades without downtime, hardening security, managing control plane backups. Each of these topics is a discipline in itself. The CNCF 2025 report shows that challenges have actually shifted from purely technical to organizational: 47% of organizations now cite "cultural changes with the development team" as their top obstacle, ahead of raw technical complexity.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At the heart of this debt sits a less-discussed component: <strong>etcd</strong>. It is the distributed key-value database that stores the complete state of the cluster. etcd is solid for moderately sized clusters, but becomes a bottleneck at scale. It's no coincidence that Google announced in late 2024 the replacement of etcd with Spanner for its managed GKE offering, retaining only the API compatibility layer. AWS, for its part, has built a "new generation" etcd architecture to handle scale. K3S, designed for lightweight environments, has pushed the logic further by offering several alternatives to etcd, including SQLite as the default. When the central component needs to be re-engineered to handle production use at scale, it's a telling sign.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This realization is what led us, at Clever Cloud, to rethink this component. Our <a href="https://www.clever.cloud/clever-kubernetes-engine/">Clever Kubernetes Engine</a> replaces standard etcd with Materia etcd, our reimplementation of the etcd protocol built on top of <a href="https://www.clever.cloud/materia/materia-kv/">Materia KV</a> and FoundationDB, replicated across three Paris datacenters. This approach is also part of <a href="https://www.clever.cloud/blog/company/2026/04/08/what-makes-clever-cloud-unique/">what makes Clever Cloud unique</a>: a multi-tenant control plane that scales horizontally without degrading performance, benefits from FoundationDB’s continuous failure simulation model, and frees teams from managing thousands of fragile etcd instances.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But whether you choose CKE or another service, the principle remains the same: if you want Kubernetes in production without building a dedicated platform engineering team, <a href="https://www.clever.cloud/blog/company/2026/04/27/cke-in-public-beta-managed-sovereign-and-properly-integrated-kubernetes/">a managed Kubernetes</a> is almost always the right decision.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">In Summary</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes became the standard for good technical reasons, but also thanks to an alignment of interests that drove the industry to converge around a neutral project governed by the CNCF. The core mechanism, the reconciliation loop and the declarative model, explains its robustness. The ecosystem that has built up around it explains its staying power.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That doesn't mean it should be adopted for everything. For many contexts, a PaaS or another approach is a better fit, and in practice, the two often coexist within the same architecture, each where it delivers the most value. For serious distributed architectures, it remains the tool of reference, provided you account for the operational debt it introduces and choose between running it yourself or relying on a managed service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is precisely the promise that<a href="https://www.clever.cloud/clever-kubernetes-engine/"> Clever Kubernetes Engine</a>, our managed Kubernetes, seeks to deliver: standard Kubernetes, operated in France on sovereign infrastructure, with a control plane redesigned to eliminate the friction of etcd at scale. And for teams that don't need Kubernetes, our PaaS remains the most direct path to production.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">FAQ</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Are K8S and Kubernetes the same thing?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes. K8S is an abbreviation: the letter K, followed by 8 (representing the eight letters in "ubernete"), followed by S. Both refer to the same container orchestration system.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What is the difference between Docker and Kubernetes?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker is a containerization engine: it packages an application with its dependencies into an image that runs as a container. Kubernetes is an orchestrator: it deploys, monitors, and scales those containers across a fleet of servers. This is one of the most commonly misunderstood distinctions in the ecosystem, even though the two tools serve different and complementary purposes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Is Kubernetes free?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The software is open source and free under the Apache 2.0 license. But the infrastructure it runs on, the engineering time to maintain it, and the complementary tools (monitoring, backups, security) have a real cost. That's why many companies opt for a managed Kubernetes offering.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Do you always need Kubernetes for production deployments?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. Kubernetes provides sophisticated orchestration, particularly suited to distributed architectures requiring portability, CNCF ecosystem alignment, or advanced orchestration. For many other contexts, a PaaS delivers the same outcomes (industrialized deployment, autoscaling, resilience) without the operational complexity. And in practice, the two approaches often coexist within the same architecture.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What is the difference between K3S and K8S?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3S is a CNCF-certified Kubernetes distribution (not a fork), designed to be lightweight and suited for resource-constrained environments: edge, IoT, development machines, small clusters. It replaces some components with lighter alternatives and ships as a single binary. The differences between K3S and K8S come down to several specific architectural choices worth evaluating before making a decision.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">How do I get started with Kubernetes?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The fastest way is to spin up a local cluster with Minikube, kind, or k3d, then deploy a simple application via a YAML manifest. For production, the reasonable choice for most teams is a managed Kubernetes offering.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05.19 Clever Cloud Bannière Blog K8S EN" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en.png 2499w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-en-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:heading -->
<h2 class="wp-block-heading">How Kubernetes Works: a Declarative Orchestrator</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Most descriptions of Kubernetes list its components (pods, deployments, services) without explaining the central mechanism. The fundamental concept lies elsewhere: Kubernetes is first and foremost an <strong>orchestrator</strong>, and its core engine relies on a reconciliation loop.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You don't tell Kubernetes <em>what to do</em>. You tell it <em>what you want your system to look like</em>. This distinction, declarative versus imperative, changes everything.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In practice, you describe the desired state in manifest files, typically in YAML format: "I want 3 replicas of this image, exposed on port 80, with these environment variables." You submit this manifest to the Kubernetes API via kubectl. From that point on, Kubernetes continuously compares the actual state of the cluster (what is actually running) to the desired state (what you declared), and acts to bring them into alignment. If a node dies, its pods are rescheduled elsewhere. If you change from 3 to 10 replicas in the manifest, Kubernetes starts 7 more. If a container crashes, it gets restarted.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This reconciliation loop is the heart of everything Kubernetes does: self-healing, scaling, rolling updates, and rollbacks. To dive deeper into this mechanism and the other capabilities it enables, learn more about container orchestration.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Architecture in Brief: Control Plane, Nodes, Pods</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A Kubernetes cluster is divided into two parts. The <strong>control plane</strong> is the brain: it makes global decisions, accepts API requests, schedules workloads, and monitors the state of the cluster. It relies on a few key components, including the API server (kube-apiserver), the scheduler (kube-scheduler), and the controller manager (kube-controller-manager), along with a distributed data store that holds the entire cluster state, traditionally etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Nodes</strong> are the machines that actually run the workloads. On each node, an agent called kubelet receives instructions from the control plane and launches containers through a container runtime (containerd, CRI-O, etc.). The smallest deployable unit is not an individual container but a <strong>pod</strong>: one or more containers that share a network and storage. Higher-level objects (Deployment, Service, Ingress, ConfigMap, Secret) describe how pods should be managed, exposed, and configured.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This architecture is also the source of a common confusion with Docker, whose role is actually complementary to Kubernetes rather than competitive.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Why K8S Became the Orchestration Standard</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>According to the<a href="https://www.cncf.io/reports/"> CNCF Annual Cloud Native Survey 2025</a>, published in January 2026, 98% of surveyed organizations have adopted <a href="https://www.clever.cloud/blog/company/2025/05/30/what-is-native-cloud/">cloud native</a> techniques, and 82% of container users deploy Kubernetes in production, up from 66% in 2023. The dominance is massive. But explaining it solely through technical qualities would be incomplete; it is also a story of ecosystem dynamics and aligned interests.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>On the technical side</strong>, three properties explain adoption. First, the declarative model described above: it makes deployments reproducible, versionable in Git, and resilient to failures. Second, portability: the same manifest works on a development machine (Minikube, kind, k3d), on an on-premise cluster, and on any cloud. Third, extensibility: the Kubernetes API accepts Custom Resource Definitions (CRDs) and custom controllers (Operators), turning it into a platform for building platforms. This triggered a massive ecosystem dynamic.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>On the strategic side</strong>, the story is less often told. By 2014, Google had more than a decade of experience managing containers at scale with its internal systems Borg and Omega, whose design principles were shared publicly through academic research papers (Omega in 2013, Borg in 2015). Rather than open-sourcing Borg itself, which remained tightly coupled to Google's proprietary infrastructure, the team created Kubernetes as a new project inspired by that experience, with a distinct implementation designed from the outset for external adoption. The project was released as open source in June 2014 and donated to the Cloud Native Computing Foundation in 2015. This neutrality, a project hosted by a Linux foundation rather than a cloud provider, proved decisive. No competitor could afford <em>not</em> to adopt it without being marginalized from the emerging cloud-native ecosystem. AWS, which initially pushed its own proprietary solution (ECS), announced EKS in late 2017 and launched it in general availability in June 2018. By then, the standard was sealed.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>On the ecosystem side</strong>, the network effect did the rest: Helm for packaging applications, Prometheus for monitoring, Istio and Linkerd for service mesh, ArgoCD and Flux for GitOps, Trivy and Falco for security. Each additional tool reinforces the value of the standard. On the talent side, Kubernetes skills have become massively in-demand across DevOps and SRE roles, creating a virtuous cycle: more trained engineers, more adopting companies, more engineers getting trained.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the CNCF 2025 report, the community now describes Kubernetes as "boring," using the term as the highest praise: a mature, predictable tool whose APIs no longer break with every release. That is exactly what you want from infrastructure that has become standard.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">When Kubernetes Adds Value, and When Other Approaches Are a Better Fit</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The fact that K8S is the standard doesn't mean it's the right answer to every problem. Choosing Kubernetes, a PaaS, or a combination of both depends on the technical and organizational context; at Clever Cloud, many teams use both in parallel for different workloads.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes delivers real value in several contexts:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>strong portability requirements: multi-cloud, hybrid, or on-premise combined with cloud, where the Kubernetes manifest becomes a common denominator;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>distributed architectures that apply 12-factor app principles and the "cattle" approach (interchangeable, stateless instances) with sophisticated orchestration needs;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>strategic alignment with the CNCF ecosystem (Helm, Operators, ArgoCD, Istio, etc.) or client/partner prerequisites that impose the standard;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>need for a shared platform across large teams, with a dedicated platform engineering team or the willingness to outsource that responsibility to a managed service.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Conversely, in other contexts, a PaaS like Clever Cloud delivers the same outcomes as Kubernetes (industrialized deployments, autoscaling, resilience) without the operational complexity of the orchestrator. This is particularly true for standard application architectures (web + backend + database) where the effort of configuring and operating Kubernetes doesn't translate into tangible added value.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>And for intermediate workloads (IoT, edge, development environments, small clusters), the differences between K3S and K8S are worth weighing before deciding: the lightweight distribution is often a better fit. The de facto standard is not a moral obligation. It is a powerful and costly tool to operate, and its use should be chosen based on the problems it solves, often as a complement to other approaches rather than a replacement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">The Limits of the Standard: Operational Debt</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Running Kubernetes in production is not trivial. That's one of the reasons why many companies that adopt K8S opt for a managed service rather than a self-managed installation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The sources of complexity are numerous: configuring access control correctly (RBAC), choosing and operating a network plugin (CNI), wiring up persistent storage (CSI), setting up observability, managing certificates, performing minor and major upgrades without downtime, hardening security, managing control plane backups. Each of these topics is a discipline in itself. The CNCF 2025 report shows that challenges have actually shifted from purely technical to organizational: 47% of organizations now cite "cultural changes with the development team" as their top obstacle, ahead of raw technical complexity.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At the heart of this debt sits a less-discussed component: <strong>etcd</strong>. It is the distributed key-value database that stores the complete state of the cluster. etcd is solid for moderately sized clusters, but becomes a bottleneck at scale. It's no coincidence that Google announced in late 2024 the replacement of etcd with Spanner for its managed GKE offering, retaining only the API compatibility layer. AWS, for its part, has built a "new generation" etcd architecture to handle scale. K3S, designed for lightweight environments, has pushed the logic further by offering several alternatives to etcd, including SQLite as the default. When the central component needs to be re-engineered to handle production use at scale, it's a telling sign.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This realization is what led us, at Clever Cloud, to rethink this component. Our <a href="https://www.clever.cloud/clever-kubernetes-engine/">Clever Kubernetes Engine</a> replaces standard etcd with Materia etcd, our reimplementation of the etcd protocol built on top of <a href="https://www.clever.cloud/materia/materia-kv/">Materia KV</a> and FoundationDB, replicated across three Paris datacenters. This approach is also part of <a href="https://www.clever.cloud/blog/company/2026/04/08/what-makes-clever-cloud-unique/">what makes Clever Cloud unique</a>: a multi-tenant control plane that scales horizontally without degrading performance, benefits from FoundationDB’s continuous failure simulation model, and frees teams from managing thousands of fragile etcd instances.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But whether you choose CKE or another service, the principle remains the same: if you want Kubernetes in production without building a dedicated platform engineering team, <a href="https://www.clever.cloud/blog/company/2026/04/27/cke-in-public-beta-managed-sovereign-and-properly-integrated-kubernetes/">a managed Kubernetes</a> is almost always the right decision.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">In Summary</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes became the standard for good technical reasons, but also thanks to an alignment of interests that drove the industry to converge around a neutral project governed by the CNCF. The core mechanism, the reconciliation loop and the declarative model, explains its robustness. The ecosystem that has built up around it explains its staying power.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That doesn't mean it should be adopted for everything. For many contexts, a PaaS or another approach is a better fit, and in practice, the two often coexist within the same architecture, each where it delivers the most value. For serious distributed architectures, it remains the tool of reference, provided you account for the operational debt it introduces and choose between running it yourself or relying on a managed service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is precisely the promise that<a href="https://www.clever.cloud/clever-kubernetes-engine/"> Clever Kubernetes Engine</a>, our managed Kubernetes, seeks to deliver: standard Kubernetes, operated in France on sovereign infrastructure, with a control plane redesigned to eliminate the friction of etcd at scale. And for teams that don't need Kubernetes, our PaaS remains the most direct path to production.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">FAQ</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Are K8S and Kubernetes the same thing?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes. K8S is an abbreviation: the letter K, followed by 8 (representing the eight letters in "ubernete"), followed by S. Both refer to the same container orchestration system.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What is the difference between Docker and Kubernetes?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker is a containerization engine: it packages an application with its dependencies into an image that runs as a container. Kubernetes is an orchestrator: it deploys, monitors, and scales those containers across a fleet of servers. This is one of the most commonly misunderstood distinctions in the ecosystem, even though the two tools serve different and complementary purposes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Is Kubernetes free?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The software is open source and free under the Apache 2.0 license. But the infrastructure it runs on, the engineering time to maintain it, and the complementary tools (monitoring, backups, security) have a real cost. That's why many companies opt for a managed Kubernetes offering.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Do you always need Kubernetes for production deployments?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. Kubernetes provides sophisticated orchestration, particularly suited to distributed architectures requiring portability, CNCF ecosystem alignment, or advanced orchestration. For many other contexts, a PaaS delivers the same outcomes (industrialized deployment, autoscaling, resilience) without the operational complexity. And in practice, the two approaches often coexist within the same architecture.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What is the difference between K3S and K8S?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3S is a CNCF-certified Kubernetes distribution (not a fork), designed to be lightweight and suited for resource-constrained environments: edge, IoT, development machines, small clusters. It replaces some components with lighter alternatives and ships as a single binary. The differences between K3S and K8S come down to several specific architectural choices worth evaluating before making a decision.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">How do I get started with Kubernetes?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The fastest way is to spin up a local cluster with Minikube, kind, or k3d, then deploy a simple application via a YAML manifest. For production, the reasonable choice for most teams is a managed Kubernetes offering.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Clever Cloud Takes Control of Its IP Prefix Announcements</title>
		<link>https://www.clever.cloud/blog/engineering/2026/05/04/clever-cloud-takes-control-of-its-ip-prefix-announcements/</link>
		
		<dc:creator><![CDATA[Arnaud Lefebvre]]></dc:creator>
		<pubDate>Mon, 04 May 2026 15:00:35 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=23853</guid>

					<description><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 17 clever cloud banniere blog clever cloud controle lannonce de ses prefixes ip en" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en.png 2499w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>This represents a major milestone that culminates three years of preparation and is part of our broader strategy to maintain complete control over our Paris region's network infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Why We Made This Change</h2>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="max-width:780px;margin:1.5rem auto;background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:15px;line-height:1.7;box-shadow:0 1px 2px rgba(0,0,0,0.08);border:1px solid rgba(255,255,255,0.08);">
  <strong style="color:#e5eefc;">Note:</strong> Clever Cloud operates multiple regions worldwide. Paris is our main region — the largest, where we control the full stack: our own hardware, our own network, and now our own IP announcements. Other regions (hosted on OVH, Scaleway, Cloud Temple, Ionos, Oracle) rely on the underlying provider's infrastructure, including their network. The changes described in this article specifically concern our Paris region.
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>In Clever Cloud's early years, we delegated network responsibility to partners. This approach made sense: it allowed us to accelerate development, focus on cloud services, and avoid investing in expertise we hadn't yet mastered. But as our infrastructure grew, the limitations of this dependency became clear. We had no control over strategic decisions — how traffic was routed across the Internet, which paths our packets took, or how quickly we could respond to failures. Every modification, every incident required the involvement of a third party.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We decided to take this responsibility back. In doing so, we gained several concrete advantages. We optimize costs through direct management of our transit and peering relationships. We define our own routing policy instead of following an intermediary's constraints. We resolve incidents ourselves, without waiting for external providers. And we achieve complete control of our network stack — the same way we progressively took control of our servers and datacenters over the past few years.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But this transition isn't just about our operational independence. It brings immediate, tangible benefits for you. The most critical is resilience. Previously, all traffic was routed through a single provider. Any incident on their side impacted every service we offered. We now maintain four upstream providers across three datacenters in the Paris area. When one link fails — and it has happened over the past year — traffic automatically shifts to available alternatives without customer-impacting interruption. We can even withstand the simultaneous loss of multiple transit links.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Beyond redundancy, we gain control over routing itself. We now decide how your traffic reaches its destination. This allows us to optimize paths for lower latency and better performance, and to adjust those decisions based on your specific needs and our network topology. We respond to congestion, to changing conditions, and to your requirements in real time.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Finally, there is the question of operational responsibility. Network issues no longer require us to wait for an external provider to acknowledge and resolve them. Public network failures fall directly under our responsibility — we detect them, analyze them, and fix them ourselves. This directly reduces the time between problem and resolution, which means less downtime and better reliability for our customers.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Operating Your Own Network on the Internet</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To operate as an independent network on the Internet, organizations must work with a Regional Internet Registry (RIR). RIRs are responsible for allocating and managing IP addresses and AS numbers within specific geographical regions.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>There are five RIRs worldwide:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>RIPE NCC</strong> — Europe, Central Asia, and the Middle East</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ARIN</strong> — North America (United States, Canada, and the Caribbean)</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>LACNIC</strong> — Latin America and the Caribbean</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>APNIC</strong> — Asia-Pacific region</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>AFRINIC</strong> — Africa</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>For Clever Cloud, since our infrastructure is primarily in Europe, we work with RIPE NCC (Réseaux Internet Publics Européens).</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Allocated Address Space</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>As a member of a RIR, organizations receive allocations of both IPv4 and IPv6 address space. For RIPE NCC members, this typically includes a /24 block of IPv4 addresses (<a href="https://www.ripe.net/manage-ips-and-asns/ipv4/ipv4-waiting-list/">depending on the availability</a> of such a block) and a /29 block of IPv6 addresses. These allocations are managed under your membership and can be used to operate your network globally.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Creating Our Autonomous System</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The groundwork for this transition began several years ago. In 2019, we created our RIPE NCC account to become a LIR (Local Internet Registry). This gave us access to a /24 IPv4 block (91.208.207.0/24) and a /29 IPv6 block (2a0f:d0c0::/29).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then, in 2022, we registered our Autonomous System Number (ASN) with the Regional Internet Registry for our region. Our AS number is<a href="https://apps.db.ripe.net/db-web-ui/lookup?source=ripe&amp;key=AS213394&amp;type=aut-num"> AS213394</a>. Here is the aut-num object:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; whois AS213394

aut-num:        AS213394
as-name:        CleverCloud
org:            ORG-CCS42-RIPE
import:         from AS29075 accept ANY
import:         from AS3257 accept ANY
import:         from AS3356 accept ANY
import:         from AS43424 accept ANY
export:         to AS29075 announce AS213394:AS-CLVRCLD
export:         to AS3257 announce AS213394:AS-CLVRCLD
export:         to AS3356 announce AS213394:AS-CLVRCLD
export:         to AS43424 announce AS213394:AS-CLVRCLD
admin-c:        QA171-RIPE
tech-c:         QA171-RIPE
status:         ASSIGNED
mnt-by:         RIPE-NCC-END-MNT
mnt-by:         mnt-fr-clvrcldnet-1
created:        2022-11-28T08:24:23Z
last-modified:  2025-02-25T16:36:15Z
source:         RIPE</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>An Autonomous System Number (ASN) is a unique identifier for networks on the Internet. It's required to announce routes via BGP — the protocol that makes inter-network routing possible. Creating an AS early on allowed us to plan for this eventual transition and prepare the necessary infrastructure in advance.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Now that we have an ASN, we can start announcing our prefixes to other networks on the Internet using the BGP protocol.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">The Role of the RIPE Database</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The RIPE NCC maintains a public database of routing objects (like the aut-num object above). Among these objects are route objects, which specify which AS is authorized to announce a particular IP prefix. In practice, these entries are primarily used by network operators and transit providers to build routing policy and filters (IRR-based filtering) to accept or deny announcements from their peers. This is one way to try to prevent BGP hijacks. By applying those filters to the routes you receive from your peers, you can limit the propagation of a prefix that originates from the wrong ASN.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Let's say that Org A owns 192.0.2.0/24 and announces it to Transit X. Transit X applies a filter on routes learned from Org A to only accept the IP prefixes that Org A has in its RIR database. This way, if Org A starts announcing a prefix it doesn't own (let's say our public prefix, 91.208.207.0/24), then Transit X is supposed to reject that route. This helps prevent the bad route from being propagated and traffic from being forwarded to the wrong entity.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>However, not all networks implement IRR filtering. Better mechanisms like ROA (Route Origin Authorization) exist to address this gap.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">The BGP Protocol: How the Internet Routes Traffic</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To understand how we announce our prefixes on the Internet, it's essential to understand BGP — the Border Gateway Protocol. BGP is the de facto standard routing protocol of the Internet. It allows networks (Autonomous Systems) to exchange information about which IP prefixes they own and how to reach them.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>BGP works in both directions. When we announce to our peers and transit providers "we own 91.208.207.0/24", this announcement travels through the Internet from network to network. Each network that forwards our announcement prepends its own AS number to the AS_PATH — a list showing the sequence of networks a packet traverses to reach us. For example, OVHcloud (AS16276) sees the path [AS29075, AS213394]: traffic goes through one of our transit providers (AS29075), then reaches us (AS213394). Each network that forwards the announcement updates it this way, building a complete path. Here's an example using the<a href="https://lg.ovh.net/prefix_detail/lil1/ipv4?q=91.208.207.0/24"> OVHcloud Looking Glass service</a>:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; show route for 91.208.207.0/24 all

91.208.207.0/24    via 172.18.16.0 on eno1 [lil1_rbx1_bagg1_8k 2025-12-25] * (100/0) [AS213394i]
    Type: BGP unicast univ
    BGP.origin: IGP
    BGP.as_path: 29075 213394
    BGP.next_hop: 172.18.16.0
    BGP.med: 161
    BGP.local_pref: 40
    BGP.community: (0,0) (29075,18000) (65535,65281)
    BGP.23 [t]: 00 00 b8 6e
                   via 172.18.16.64 on eno1 [lil1_rbx8_bagg1_8k 2025-12-25] (100/0) [AS213394i]</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>At the same time, we receive announcements from other networks about their prefixes and the paths to reach them. This builds the opposite view: when we need to send traffic outbound, we know which path to take to reach any given destination. Here's an example with one of OVHcloud prefixes:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; /routing/route/print detail where dst-address=5.39.0.0/17 and active

Ab   afi=ip4 contribution=active dst-address=5.39.0.0/17 routing-table=main pref-src=185.133.116.2 gateway=213.242.111.201 immediate-gw=213.242.111.201%sfp28-6 distance=20 scope=40 target-scope=10 belongs-to="bgp-IP-213.242.111.201"

      bgp.as-path="3356,16276" bgp.communities=3356:2,3356:2066,3356:22,16276:40001,3356:100,65002:7018,3356:123,3356:901,65002:701,65000:64990,65000:64995,65000:64996,3356:502 .med=0 .atomic-aggregate=no .origin=igp</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Here the network path OVHcloud uses to reach us is different from the one we use to reach them.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">The Migration Process</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Our IP prefixes were entirely managed by our historical provider. While we legally owned the addresses, we delegated the technical responsibility of announcing them to the Internet to this single provider. This meant:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Our provider's AS (AS43424) was listed as the origin of our prefixes in the Internet routing tables</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>All traffic destined for our services or outgoing to the Internet had to flow through their infrastructure</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services
   |
   | all inbound/outbound traffic
   v
Historical Provider (AS43424)
   |
   | originates: 91.208.207.0/24 (origin AS43424)
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>We now want our ASN to be the origin of the announcements. To migrate safely, we planned a three-step migration. The requirements were simple: we could not accept any customer-impacting interruption.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Migrating a prefix between ASNs</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To migrate a prefix from one AS to another, we needed to modify its route object in the RIPE database. The procedure was straightforward but required careful timing.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>First, we created a second route object in the RIPE database for our 91.208.207.0/24 prefix. Now both ASNs were registered as authorized to announce the same prefix — both our historical provider's AS and our own AS (213394).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>These routing objects are publicly queryable via the whois command or through the RIPE web interface. For example, running whois -h whois.ripe.net -T route 91.208.207.0/24 returns both registered objects:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">❯ whois -h whois.ripe.net -T route 91.208.207.0/24
% Information related to '91.208.207.0/24AS213394'

route:          91.208.207.0/24
mnt-by:         mnt-fr-clvrcldnet-1
descr:          CleverCloud subnet
origin:         AS213394
created:        2025-01-15T10:29:14Z
last-modified:  2025-01-15T10:29:14Z
source:         RIPE

% Information related to '91.208.207.0/24AS43424'

route:          91.208.207.0/24
mnt-by:         mnt-fr-clvrcldnet-1
mnt-by:         MAGICRETAIL-MNT
descr:          CleverCloud subnet
origin:         AS43424
created:        2020-02-13T09:06:33Z
last-modified:  2020-02-13T09:06:48Z
source:         RIPE</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Once this second route object was registered and propagated across the Internet (i.e., network operators pulled an up-to-date version of the RIPE database to build their routing filters), our new transit providers could see that our ASN was authorized to announce this prefix. At that point, we could begin announcing the prefix through our own infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>If we didn't create that route object, our route announcement might have been rejected and we could have been flagged as BGP hijackers.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Announcing Through Our Historical Provider</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Once the second route object was propagated, we performed the first step during the night of January 16, 2025: we began announcing the prefix ourselves via BGP to our historical provider. This was still using the same transit path, but now with Clever Cloud AS213394 originating the announcements instead of our historical provider. Our historical provider continued to relay the prefix, but now received it from us rather than announcing it directly.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services (AS213394)
   |
   | originates: 91.208.207.0/24 (origin AS213394)
   v
Historical Provider (AS43424)
   |
   | re-announces: 91.208.207.0/24 (origin AS213394)
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>This first phase served as validation — if any issues arose, we could quickly revert without impacting other transit paths.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Announcing Through Our Own Transits</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A few days later, during the night of January 21, 2025, we took the final step: we began announcing the prefix through our own dedicated transit connections.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services (AS213394)
   |
   | originates: 91.208.207.0/24 (origin AS213394)
   |
   +---+---+---+
   |   |   |   |
   v   v   v   v
  T1  T2  T3  HP
(Transit providers + historical provider)
   |   |   |   |
   +---+---+---+
   |
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>We now announce our prefixes directly to four upstream providers (three transit providers, T1/T2/T3, plus our historical provider HP). Traffic flows across all paths, and we have full control over routing decisions and redundancy.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Throughout both phases, we observed no customer-impacting interruption. The BGP protocol's built-in redundancy and the gradual nature of the transition ensured that traffic flowed smoothly regardless of which path was preferred at any given moment.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Complete Internet Routing Visibility</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>As part of Phase 2, our three primary transit providers began sending us a "full view" of the Internet's routing table. This is the complete set of all publicly announced IPv4 and IPv6 prefixes — roughly ~1 million IPv4 routes and ~220,000 IPv6 routes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>A full view gives us unprecedented visibility into how the Internet is structured and allows us to make sophisticated routing decisions. Rather than relying on a single provider's perspective, we now see all available paths to reach any destination on the Internet.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>With this information, we are able to:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Choose optimal paths</strong> for our outbound traffic based on our network topology and preferences</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Implement traffic engineering</strong> to direct flows through specific transit providers</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Respond dynamically</strong> to network conditions and congestion</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Balance load</strong> across our four transit connections based on real-time routing data</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>This fine-grained control over our routing policy is a direct result of operating our own AS and managing our own announcements — exactly the kind of operational independence we sought when we began this transition.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">One Year Later</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nearly a year into operating our own network announcements, the transition has proven successful. We have experienced no major incidents, and our infrastructure has proven resilient. When minor issues have occurred — such as packet loss through a specific transit provider or the temporary loss of a transit link — traffic has automatically rebalanced across our remaining connections. We have been able to detect and respond to these issues directly, without waiting for a third-party provider to take action. Our customers experienced no customer-impacting interruption. This ability to own our problems and resolve them quickly is perhaps the greatest benefit we've gained.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What's Next</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>This transition is far from finished. We have several roadmap items ahead of us:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Increased network capacity</strong> to handle growing traffic demands</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>BGP peering</strong> with other networks to optimize traffic locally without paying for transit</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ROA (Route Origin Authorization)</strong> deployment to cryptographically sign our route announcements and prevent unauthorized parties from hijacking our prefixes</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RPKI (Resource Public Key Infrastructure) validation</strong> to ensure the legitimacy of announcements we receive from other networks and protect against prefix hijacking attacks</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>IPv6 expansion</strong>, both inbound (accepting IPv6 traffic) and outbound (sending IPv6 traffic) — a transition we will roll out in phases</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Conclusion</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In early 2025, Clever Cloud completed its transition to fully independent network operations. We now announce our own IP prefixes through four upstream providers, giving us full authority over how traffic flows in and out of our infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For our customers, this translates to better reliability and faster problem resolution in our Paris region. When network issues occur, we handle them directly — and our multi-provider redundancy ensures traffic keeps flowing even when incidents occur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This milestone is just the beginning. We're already working on BGP peering to optimize local traffic, ROA signing and RPKI validation to strengthen routing security, and IPv6 expansion to fully embrace dual-stack connectivity. We're building a network as robust and self-sufficient as the rest of our infrastructure — and we're excited about what comes next.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 17 clever cloud banniere blog clever cloud controle lannonce de ses prefixes ip en" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en.png 2499w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-en-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>This represents a major milestone that culminates three years of preparation and is part of our broader strategy to maintain complete control over our Paris region's network infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Why We Made This Change</h2>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="max-width:780px;margin:1.5rem auto;background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:15px;line-height:1.7;box-shadow:0 1px 2px rgba(0,0,0,0.08);border:1px solid rgba(255,255,255,0.08);">
  <strong style="color:#e5eefc;">Note:</strong> Clever Cloud operates multiple regions worldwide. Paris is our main region — the largest, where we control the full stack: our own hardware, our own network, and now our own IP announcements. Other regions (hosted on OVH, Scaleway, Cloud Temple, Ionos, Oracle) rely on the underlying provider's infrastructure, including their network. The changes described in this article specifically concern our Paris region.
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>In Clever Cloud's early years, we delegated network responsibility to partners. This approach made sense: it allowed us to accelerate development, focus on cloud services, and avoid investing in expertise we hadn't yet mastered. But as our infrastructure grew, the limitations of this dependency became clear. We had no control over strategic decisions — how traffic was routed across the Internet, which paths our packets took, or how quickly we could respond to failures. Every modification, every incident required the involvement of a third party.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We decided to take this responsibility back. In doing so, we gained several concrete advantages. We optimize costs through direct management of our transit and peering relationships. We define our own routing policy instead of following an intermediary's constraints. We resolve incidents ourselves, without waiting for external providers. And we achieve complete control of our network stack — the same way we progressively took control of our servers and datacenters over the past few years.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But this transition isn't just about our operational independence. It brings immediate, tangible benefits for you. The most critical is resilience. Previously, all traffic was routed through a single provider. Any incident on their side impacted every service we offered. We now maintain four upstream providers across three datacenters in the Paris area. When one link fails — and it has happened over the past year — traffic automatically shifts to available alternatives without customer-impacting interruption. We can even withstand the simultaneous loss of multiple transit links.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Beyond redundancy, we gain control over routing itself. We now decide how your traffic reaches its destination. This allows us to optimize paths for lower latency and better performance, and to adjust those decisions based on your specific needs and our network topology. We respond to congestion, to changing conditions, and to your requirements in real time.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Finally, there is the question of operational responsibility. Network issues no longer require us to wait for an external provider to acknowledge and resolve them. Public network failures fall directly under our responsibility — we detect them, analyze them, and fix them ourselves. This directly reduces the time between problem and resolution, which means less downtime and better reliability for our customers.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Operating Your Own Network on the Internet</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To operate as an independent network on the Internet, organizations must work with a Regional Internet Registry (RIR). RIRs are responsible for allocating and managing IP addresses and AS numbers within specific geographical regions.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>There are five RIRs worldwide:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>RIPE NCC</strong> — Europe, Central Asia, and the Middle East</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ARIN</strong> — North America (United States, Canada, and the Caribbean)</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>LACNIC</strong> — Latin America and the Caribbean</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>APNIC</strong> — Asia-Pacific region</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>AFRINIC</strong> — Africa</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>For Clever Cloud, since our infrastructure is primarily in Europe, we work with RIPE NCC (Réseaux Internet Publics Européens).</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Allocated Address Space</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>As a member of a RIR, organizations receive allocations of both IPv4 and IPv6 address space. For RIPE NCC members, this typically includes a /24 block of IPv4 addresses (<a href="https://www.ripe.net/manage-ips-and-asns/ipv4/ipv4-waiting-list/">depending on the availability</a> of such a block) and a /29 block of IPv6 addresses. These allocations are managed under your membership and can be used to operate your network globally.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Creating Our Autonomous System</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The groundwork for this transition began several years ago. In 2019, we created our RIPE NCC account to become a LIR (Local Internet Registry). This gave us access to a /24 IPv4 block (91.208.207.0/24) and a /29 IPv6 block (2a0f:d0c0::/29).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then, in 2022, we registered our Autonomous System Number (ASN) with the Regional Internet Registry for our region. Our AS number is<a href="https://apps.db.ripe.net/db-web-ui/lookup?source=ripe&amp;key=AS213394&amp;type=aut-num"> AS213394</a>. Here is the aut-num object:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; whois AS213394

aut-num:        AS213394
as-name:        CleverCloud
org:            ORG-CCS42-RIPE
import:         from AS29075 accept ANY
import:         from AS3257 accept ANY
import:         from AS3356 accept ANY
import:         from AS43424 accept ANY
export:         to AS29075 announce AS213394:AS-CLVRCLD
export:         to AS3257 announce AS213394:AS-CLVRCLD
export:         to AS3356 announce AS213394:AS-CLVRCLD
export:         to AS43424 announce AS213394:AS-CLVRCLD
admin-c:        QA171-RIPE
tech-c:         QA171-RIPE
status:         ASSIGNED
mnt-by:         RIPE-NCC-END-MNT
mnt-by:         mnt-fr-clvrcldnet-1
created:        2022-11-28T08:24:23Z
last-modified:  2025-02-25T16:36:15Z
source:         RIPE</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>An Autonomous System Number (ASN) is a unique identifier for networks on the Internet. It's required to announce routes via BGP — the protocol that makes inter-network routing possible. Creating an AS early on allowed us to plan for this eventual transition and prepare the necessary infrastructure in advance.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Now that we have an ASN, we can start announcing our prefixes to other networks on the Internet using the BGP protocol.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">The Role of the RIPE Database</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The RIPE NCC maintains a public database of routing objects (like the aut-num object above). Among these objects are route objects, which specify which AS is authorized to announce a particular IP prefix. In practice, these entries are primarily used by network operators and transit providers to build routing policy and filters (IRR-based filtering) to accept or deny announcements from their peers. This is one way to try to prevent BGP hijacks. By applying those filters to the routes you receive from your peers, you can limit the propagation of a prefix that originates from the wrong ASN.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Let's say that Org A owns 192.0.2.0/24 and announces it to Transit X. Transit X applies a filter on routes learned from Org A to only accept the IP prefixes that Org A has in its RIR database. This way, if Org A starts announcing a prefix it doesn't own (let's say our public prefix, 91.208.207.0/24), then Transit X is supposed to reject that route. This helps prevent the bad route from being propagated and traffic from being forwarded to the wrong entity.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>However, not all networks implement IRR filtering. Better mechanisms like ROA (Route Origin Authorization) exist to address this gap.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">The BGP Protocol: How the Internet Routes Traffic</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To understand how we announce our prefixes on the Internet, it's essential to understand BGP — the Border Gateway Protocol. BGP is the de facto standard routing protocol of the Internet. It allows networks (Autonomous Systems) to exchange information about which IP prefixes they own and how to reach them.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>BGP works in both directions. When we announce to our peers and transit providers "we own 91.208.207.0/24", this announcement travels through the Internet from network to network. Each network that forwards our announcement prepends its own AS number to the AS_PATH — a list showing the sequence of networks a packet traverses to reach us. For example, OVHcloud (AS16276) sees the path [AS29075, AS213394]: traffic goes through one of our transit providers (AS29075), then reaches us (AS213394). Each network that forwards the announcement updates it this way, building a complete path. Here's an example using the<a href="https://lg.ovh.net/prefix_detail/lil1/ipv4?q=91.208.207.0/24"> OVHcloud Looking Glass service</a>:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; show route for 91.208.207.0/24 all

91.208.207.0/24    via 172.18.16.0 on eno1 [lil1_rbx1_bagg1_8k 2025-12-25] * (100/0) [AS213394i]
    Type: BGP unicast univ
    BGP.origin: IGP
    BGP.as_path: 29075 213394
    BGP.next_hop: 172.18.16.0
    BGP.med: 161
    BGP.local_pref: 40
    BGP.community: (0,0) (29075,18000) (65535,65281)
    BGP.23 [t]: 00 00 b8 6e
                   via 172.18.16.64 on eno1 [lil1_rbx8_bagg1_8k 2025-12-25] (100/0) [AS213394i]</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>At the same time, we receive announcements from other networks about their prefixes and the paths to reach them. This builds the opposite view: when we need to send traffic outbound, we know which path to take to reach any given destination. Here's an example with one of OVHcloud prefixes:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; /routing/route/print detail where dst-address=5.39.0.0/17 and active

Ab   afi=ip4 contribution=active dst-address=5.39.0.0/17 routing-table=main pref-src=185.133.116.2 gateway=213.242.111.201 immediate-gw=213.242.111.201%sfp28-6 distance=20 scope=40 target-scope=10 belongs-to="bgp-IP-213.242.111.201"

      bgp.as-path="3356,16276" bgp.communities=3356:2,3356:2066,3356:22,16276:40001,3356:100,65002:7018,3356:123,3356:901,65002:701,65000:64990,65000:64995,65000:64996,3356:502 .med=0 .atomic-aggregate=no .origin=igp</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Here the network path OVHcloud uses to reach us is different from the one we use to reach them.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">The Migration Process</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Our IP prefixes were entirely managed by our historical provider. While we legally owned the addresses, we delegated the technical responsibility of announcing them to the Internet to this single provider. This meant:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Our provider's AS (AS43424) was listed as the origin of our prefixes in the Internet routing tables</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>All traffic destined for our services or outgoing to the Internet had to flow through their infrastructure</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services
   |
   | all inbound/outbound traffic
   v
Historical Provider (AS43424)
   |
   | originates: 91.208.207.0/24 (origin AS43424)
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>We now want our ASN to be the origin of the announcements. To migrate safely, we planned a three-step migration. The requirements were simple: we could not accept any customer-impacting interruption.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Migrating a prefix between ASNs</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To migrate a prefix from one AS to another, we needed to modify its route object in the RIPE database. The procedure was straightforward but required careful timing.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>First, we created a second route object in the RIPE database for our 91.208.207.0/24 prefix. Now both ASNs were registered as authorized to announce the same prefix — both our historical provider's AS and our own AS (213394).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>These routing objects are publicly queryable via the whois command or through the RIPE web interface. For example, running whois -h whois.ripe.net -T route 91.208.207.0/24 returns both registered objects:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">❯ whois -h whois.ripe.net -T route 91.208.207.0/24
% Information related to '91.208.207.0/24AS213394'

route:          91.208.207.0/24
mnt-by:         mnt-fr-clvrcldnet-1
descr:          CleverCloud subnet
origin:         AS213394
created:        2025-01-15T10:29:14Z
last-modified:  2025-01-15T10:29:14Z
source:         RIPE

% Information related to '91.208.207.0/24AS43424'

route:          91.208.207.0/24
mnt-by:         mnt-fr-clvrcldnet-1
mnt-by:         MAGICRETAIL-MNT
descr:          CleverCloud subnet
origin:         AS43424
created:        2020-02-13T09:06:33Z
last-modified:  2020-02-13T09:06:48Z
source:         RIPE</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Once this second route object was registered and propagated across the Internet (i.e., network operators pulled an up-to-date version of the RIPE database to build their routing filters), our new transit providers could see that our ASN was authorized to announce this prefix. At that point, we could begin announcing the prefix through our own infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>If we didn't create that route object, our route announcement might have been rejected and we could have been flagged as BGP hijackers.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Announcing Through Our Historical Provider</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Once the second route object was propagated, we performed the first step during the night of January 16, 2025: we began announcing the prefix ourselves via BGP to our historical provider. This was still using the same transit path, but now with Clever Cloud AS213394 originating the announcements instead of our historical provider. Our historical provider continued to relay the prefix, but now received it from us rather than announcing it directly.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services (AS213394)
   |
   | originates: 91.208.207.0/24 (origin AS213394)
   v
Historical Provider (AS43424)
   |
   | re-announces: 91.208.207.0/24 (origin AS213394)
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>This first phase served as validation — if any issues arose, we could quickly revert without impacting other transit paths.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Announcing Through Our Own Transits</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A few days later, during the night of January 21, 2025, we took the final step: we began announcing the prefix through our own dedicated transit connections.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services (AS213394)
   |
   | originates: 91.208.207.0/24 (origin AS213394)
   |
   +---+---+---+
   |   |   |   |
   v   v   v   v
  T1  T2  T3  HP
(Transit providers + historical provider)
   |   |   |   |
   +---+---+---+
   |
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>We now announce our prefixes directly to four upstream providers (three transit providers, T1/T2/T3, plus our historical provider HP). Traffic flows across all paths, and we have full control over routing decisions and redundancy.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Throughout both phases, we observed no customer-impacting interruption. The BGP protocol's built-in redundancy and the gradual nature of the transition ensured that traffic flowed smoothly regardless of which path was preferred at any given moment.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Complete Internet Routing Visibility</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>As part of Phase 2, our three primary transit providers began sending us a "full view" of the Internet's routing table. This is the complete set of all publicly announced IPv4 and IPv6 prefixes — roughly ~1 million IPv4 routes and ~220,000 IPv6 routes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>A full view gives us unprecedented visibility into how the Internet is structured and allows us to make sophisticated routing decisions. Rather than relying on a single provider's perspective, we now see all available paths to reach any destination on the Internet.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>With this information, we are able to:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Choose optimal paths</strong> for our outbound traffic based on our network topology and preferences</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Implement traffic engineering</strong> to direct flows through specific transit providers</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Respond dynamically</strong> to network conditions and congestion</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Balance load</strong> across our four transit connections based on real-time routing data</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>This fine-grained control over our routing policy is a direct result of operating our own AS and managing our own announcements — exactly the kind of operational independence we sought when we began this transition.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">One Year Later</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nearly a year into operating our own network announcements, the transition has proven successful. We have experienced no major incidents, and our infrastructure has proven resilient. When minor issues have occurred — such as packet loss through a specific transit provider or the temporary loss of a transit link — traffic has automatically rebalanced across our remaining connections. We have been able to detect and respond to these issues directly, without waiting for a third-party provider to take action. Our customers experienced no customer-impacting interruption. This ability to own our problems and resolve them quickly is perhaps the greatest benefit we've gained.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What's Next</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>This transition is far from finished. We have several roadmap items ahead of us:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Increased network capacity</strong> to handle growing traffic demands</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>BGP peering</strong> with other networks to optimize traffic locally without paying for transit</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ROA (Route Origin Authorization)</strong> deployment to cryptographically sign our route announcements and prevent unauthorized parties from hijacking our prefixes</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RPKI (Resource Public Key Infrastructure) validation</strong> to ensure the legitimacy of announcements we receive from other networks and protect against prefix hijacking attacks</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>IPv6 expansion</strong>, both inbound (accepting IPv6 traffic) and outbound (sending IPv6 traffic) — a transition we will roll out in phases</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Conclusion</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In early 2025, Clever Cloud completed its transition to fully independent network operations. We now announce our own IP prefixes through four upstream providers, giving us full authority over how traffic flows in and out of our infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For our customers, this translates to better reliability and faster problem resolution in our Paris region. When network issues occur, we handle them directly — and our multi-provider redundancy ensures traffic keeps flowing even when incidents occur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This milestone is just the beginning. We're already working on BGP peering to optimize local traffic, ROA signing and RPKI validation to strengthen routing security, and IPv6 expansion to fully embrace dual-stack connectivity. We're building a network as robust and self-sufficient as the rest of our infrastructure — and we're excited about what comes next.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CKE in public beta: managed, sovereign, and properly integrated Kubernetes</title>
		<link>https://www.clever.cloud/blog/company/2026/04/27/cke-in-public-beta-managed-sovereign-and-properly-integrated-kubernetes/</link>
		
		<dc:creator><![CDATA[Horacio Gonzalez]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 15:11:30 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[cke]]></category>
		<category><![CDATA[K8S]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24230</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud Bannière Blog CKE" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>So we built our own orchestrator. It runs on micro-VMs and gives us a clean kernel boundary between workloads, with no shared kernel between tenants. That is what runs tens of thousands of applications in production on our PaaS today, and for most projects it is still the shortest path from a commit to production.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When Docker arrived, some workloads fit better as a container image than as one of our native runtimes. So we added a Docker runtime to the platform, where it made sense. Not to replace our approach, but to broaden it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then Kubernetes established itself as the de facto standard for container orchestration. Its ecosystem (Helm, operators, GitOps, and so on) became unavoidable for many teams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We could have kept saying that, in many cases, Kubernetes is not the best path to production. That is still true. But it was no longer enough. That is why we are launching <a href="https://www.clever.cloud/clever-kubernetes-engine/">CKE, our Clever Kubernetes Engine</a>, available in public beta starting today.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As many know, we resisted for years the idea of offering Kubernetes as just another checkbox in the Console. Not because Kubernetes is useless, but because it has too often become a default answer to problems the PaaS solves more simply: deploying an application, scaling it, monitoring it, isolating it, connecting it to a database, managing its environment variables, its logs and its lifecycle. And we still believe that.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But Kubernetes has become the common language of a large part of the cloud-native ecosystem. Helm, operators, GitOps, already-containerized workloads, internal platforms and existing toolchains are part of the daily reality of many teams. And our reason for being is to make life easier for technical teams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The question was no longer "should we do Kubernetes?", but "can we do Kubernetes without giving up what makes Clever Cloud?"</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Not a quickly repackaged Kubernetes</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The fastest way to ship managed Kubernetes is to wrap an upstream distribution behind an admin console, add a provisioning API, and bill the cluster by the hour. It is a valid strategy if you want to ship fast. It is not the one we wanted.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For CKE, we had three requirements that cannot be solved by simply bolting Kubernetes on top of the rest of the platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The first is sovereignty. CKE is operated in Europe, on our infrastructure and that of our partners, and can also be deployed on the on-premises infrastructure of customers who need it. No dependency on US hyperscalers, no grey areas around data jurisdiction, no vague promises about where the infrastructure actually runs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The second is integration with the rest of Clever Cloud. We did not want to create a Kubernetes silo sitting alongside the PaaS, the managed databases, the object storage and the private network. We wanted a Kubernetes that fits inside the same platform, with the same Console, the same tooling, the same billing, the same governance rules and the same managed services.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The third is operational predictability. Kubernetes is a complex distributed system, and its behaviour under load depends heavily on its foundations. We did not want to operate a product whose underlying layer would remain a black box or a default-accepted limitation. That is what led us to work on something few providers touch: Kubernetes' internal consistency layer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Under the hood: Materia etcd on FoundationDB</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In Kubernetes, etcd is the component that stores cluster state: manifests, resources, secrets, node state. It is the source of truth for the entire orchestrator.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also one of the most sensitive components in the system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>etcd works very well within the scope it was designed for. But its limits at scale are well known: store size, latencies under heavy write load, behaviour during network partitions, backup and restore operations, the need for compaction and fine-grained monitoring. When Kubernetes becomes a critical foundation, etcd becomes an operational concern in its own right.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We did not want to build CKE on top of a brick we would then treat as a fragile black box.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So we took the problem back to its root: keep the contract Kubernetes expects, but replace the internal consistency layer with an implementation backed by FoundationDB. We call it Materia etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>FoundationDB gives us distributed ACID transactions, a robust consistency model, and a <a href="https://apple.github.io/foundationdb/testing.html">deterministic simulation testing</a> approach that fits very well with how we build critical infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For end users, this work is invisible. That is precisely the point. Under the hood, this foundation lets us build CKE with the auto-scaling, auto-healing and operational predictability we expect from a Clever Cloud service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We will come back to Materia etcd in more detail soon, because the topic deserves a dedicated article.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Standard Kubernetes on the developer side</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>All this work on the underlying layer has a simple goal: on the user side, CKE has to be standard Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Your manifests work without modification. Your Helm charts install normally. Your Argo CD or your Flux plugs in like on any other cluster. Your Kubernetes operators run without surprises.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE does not try to reinvent the developer interface of Kubernetes. That would be counterproductive. If you already have a Kubernetes deployment chain, the goal is for it to run on CKE with as little friction as possible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The difference happens elsewhere: in how this Kubernetes integrates with the rest of the Clever Cloud platform.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Kubernetes when you need it, the PaaS when it is enough</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE does not replace our PaaS. It complements it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many applications, the PaaS remains the best choice: less operations, less configuration, less YAML, less maintenance surface. If your application fits naturally in a Clever Cloud runtime, the PaaS is often still the simplest and most robust path.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But there are cases where Kubernetes is the right tool.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You may need to install :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>An operator;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Reuse existing manifests;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Standardize a GitOps chain;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Deploy a workload already distributed as a Helm chart;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Run an internal platform built around the Kubernetes API;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Or simply meet the habits of a team that already works with Kubernetes day to day.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>In those cases, the problem is not Kubernetes itself. The problem is Kubernetes isolated from the rest of your system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is where CKE changes things. You can keep a Node.js API on the PaaS, a static frontend on Cellar, a managed PostgreSQL database, and run on CKE only the component, the operator or the workload that really needs Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>All within the same Clever Cloud environment.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Native integration with the Clever Cloud ecosystem</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE was designed to integrate with the services you already use on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cellar</strong>, our S3-compatible object storage, can be used from your Kubernetes workloads.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Managed databases</strong> (PostgreSQL, MySQL, MongoDB, Redis, Materia) attach to your cluster the same way they do to any other Clever Cloud application.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>IAM as a Service</strong> lets you manage authentication and permissions on the cluster and on the teams that access it.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Network Groups</strong> lets you connect your CKE cluster to your existing Clever Cloud PaaS applications, in the same private network.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>The Network Groups integration is probably the one that changes day-to-day work the most.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is often introduced into organizations as a new island: new console, new network, new secrets, new access rules, new billing, a new way to connect services together.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>With CKE, the goal is the opposite. Kubernetes becomes one more brick in the Clever Cloud architecture, not a parallel world.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So you can build a hybrid architecture without workarounds: part on the PaaS, part on CKE, managed databases, object storage, private networking, and shared governance.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Enabling CKE and deploying a first application</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For this demo, we will stick to the bare minimum: enable the feature, create a cluster, fetch a kubeconfig, add a node group, and deploy a first application with a <code>LoadBalancer</code> service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On the prerequisites side, you will need <a href="https://www.clever.cloud/developers/doc/cli/">Clever Tools</a> version 4.3 or later, and <code>kubectl</code> installed locally.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Since the public beta opened on April 27, the Kubernetes feature can be enabled by any Clever Cloud customer, with a single command:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever features enable k8s</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>You can then create a cluster. Give it a name, point to your organization, and the <code>--watch</code> option lets you follow the deployment progress:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever k8s create my-cluster --org &lt;your-org-id&gt; --watch</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Creation takes about a minute. At any time, you can list the clusters in your organization with <code>clever k8s list</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Once the cluster is ready, fetch its kubeconfig and write it directly as your default local configuration:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever k8s get-kubeconfig my-cluster --org &lt;your-org-id&gt; &gt; ~/.kube/config</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>From there, it is standard Kubernetes. <code>kubectl</code> talks to the cluster, and your usual tooling follows. You can start by checking that everything is in place:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl get nodes</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>At this stage, the list is empty: the cluster is created but has no compute capacity. This is a good moment to introduce the first CKE-specific API resource: the <code>NodeGroup</code>. A node group is a set of Kubernetes nodes with the same profile (same flavor, same region), managed as a unit. You describe it like any other Kubernetes resource, in a YAML file:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-yaml">apiVersion: api.clever-cloud.com/v1
kind: NodeGroup
metadata:
  name: example-nodegroup
spec:
  flavor: M
  nodeCount: 2</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>And you apply it with <code>kubectl</code>:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl create -f example-nodegroup.yaml</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Sixty to ninety seconds later, the nodes join the cluster:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl get nodegroups
NAME                DESIREDNODECOUNT   CURRENTNODECOUNT   FLAVOR   STATUS   AGE
example-nodegroup   2                  2                  M        Synced   2m

kubectl get nodes
NAME                      STATUS   ROLES    AGE   VERSION
example-nodegroup-node0   Ready    <none>   2m    v1.35.0
example-nodegroup-node1   Ready    <none>   2m    v1.35.0</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>To resize the node group, you stay within the Kubernetes API:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl scale nodegroup example-nodegroup --replicas=4</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>With a cluster that now has compute capacity, you can deploy a first application. To keep things simple, an nginx exposed through a <code>LoadBalancer</code> service, which will automatically provision a load balancer on the Clever Cloud side:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl create deployment nginx --image=nginx:alpine --replicas=2 
kubectl expose deployment/nginx --type=LoadBalancer --port 80 
kubectl get service nginx</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>A few seconds later, the service exposes a public address. This is exactly the responsive behaviour we mentioned about the private testing phase: provisioning a node group, scaling it or exposing a service requires no waiting and no manual configuration.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>From here, it is Kubernetes like anywhere else. You can add persistent storage through the Clever Cloud CSI, install the <a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a> to provision a managed database from your manifests, or plug in your usual GitOps chain. The cluster supports Kubernetes versions 1.34, 1.35 and 1.36, with 1.35 as the default. Everything is detailed in the <a href="https://www.clever.cloud/developers/doc/kubernetes/">CKE documentation</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What we saw during private testing and at Devoxx, and what is next</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE is now in public beta, but some of our customers have had private access for several months. That phase was very useful to expose the product to real-world usage before opening it more widely.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The feedback has been very positive. The cluster behaves as expected, and the operations that come up most often in a Kubernetes team's daily life, such as adding a node or setting up a load balancer, are fast and predictable. That is exactly the behaviour we were aiming for when we invested so much time into the internal consistency layer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At Devoxx France, we presented CKE on the Clever Cloud booth for three days. The conversations confirmed two things we were already observing.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>First, teams are not just looking for a Kubernetes cluster. They are looking for a Kubernetes that integrates cleanly with their platform, their network, their databases, their security constraints and their existing practices.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Second, and probably the most striking feedback, developers are not looking to put everything on Kubernetes. Many want to keep their classic applications on our PaaS, where it is the most efficient, and deploy on Kubernetes only the components that really warrant it, because of their complexity, their distributed architecture, or the constraints of the ecosystem they fit into.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is exactly the kind of hybrid architecture CKE is designed to enable.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also why, ahead of the launch, we built the <a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a>. It allows a workload running in a Kubernetes cluster, whether hosted with us or elsewhere, to provision and consume our managed services directly from the Kubernetes API: PostgreSQL, MySQL, MongoDB, Redis, Cellar or Materia.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For your teams, it is a <code>kubectl apply</code> that creates a managed database. For CKE, it is the natural tool to bridge Kubernetes workloads and the rest of the Clever Cloud platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The beta is open to all Clever Cloud customers. You can enable it right now, deploy your first workloads, and tell us what is missing, what surprises you or what you would like to see come next.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The discussion is open on <a href="https://github.com/CleverCloud/Community/discussions">our GitHub </a><a href="https://github.com/CleverCloud/Community/discussions/categories/kubernetes" target="_blank" rel="noreferrer noopener">community</a>, and the documentation is available <a href="https://www.clever.cloud/developers">here</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE does not replace our PaaS. It complements it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many applications, the PaaS remains the simplest path from a commit to production. But when you need Kubernetes, for an operator, a Helm chart, a GitOps chain, an already-standardized workload or an internal platform, you can now do it inside the Clever Cloud environment, with our infrastructure choices, our network, our managed services and our sovereignty requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is the kind of Kubernetes we wanted to build.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud Bannière Blog CKE" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>So we built our own orchestrator. It runs on micro-VMs and gives us a clean kernel boundary between workloads, with no shared kernel between tenants. That is what runs tens of thousands of applications in production on our PaaS today, and for most projects it is still the shortest path from a commit to production.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When Docker arrived, some workloads fit better as a container image than as one of our native runtimes. So we added a Docker runtime to the platform, where it made sense. Not to replace our approach, but to broaden it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then Kubernetes established itself as the de facto standard for container orchestration. Its ecosystem (Helm, operators, GitOps, and so on) became unavoidable for many teams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We could have kept saying that, in many cases, Kubernetes is not the best path to production. That is still true. But it was no longer enough. That is why we are launching <a href="https://www.clever.cloud/clever-kubernetes-engine/">CKE, our Clever Kubernetes Engine</a>, available in public beta starting today.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As many know, we resisted for years the idea of offering Kubernetes as just another checkbox in the Console. Not because Kubernetes is useless, but because it has too often become a default answer to problems the PaaS solves more simply: deploying an application, scaling it, monitoring it, isolating it, connecting it to a database, managing its environment variables, its logs and its lifecycle. And we still believe that.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But Kubernetes has become the common language of a large part of the cloud-native ecosystem. Helm, operators, GitOps, already-containerized workloads, internal platforms and existing toolchains are part of the daily reality of many teams. And our reason for being is to make life easier for technical teams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The question was no longer "should we do Kubernetes?", but "can we do Kubernetes without giving up what makes Clever Cloud?"</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Not a quickly repackaged Kubernetes</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The fastest way to ship managed Kubernetes is to wrap an upstream distribution behind an admin console, add a provisioning API, and bill the cluster by the hour. It is a valid strategy if you want to ship fast. It is not the one we wanted.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For CKE, we had three requirements that cannot be solved by simply bolting Kubernetes on top of the rest of the platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The first is sovereignty. CKE is operated in Europe, on our infrastructure and that of our partners, and can also be deployed on the on-premises infrastructure of customers who need it. No dependency on US hyperscalers, no grey areas around data jurisdiction, no vague promises about where the infrastructure actually runs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The second is integration with the rest of Clever Cloud. We did not want to create a Kubernetes silo sitting alongside the PaaS, the managed databases, the object storage and the private network. We wanted a Kubernetes that fits inside the same platform, with the same Console, the same tooling, the same billing, the same governance rules and the same managed services.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The third is operational predictability. Kubernetes is a complex distributed system, and its behaviour under load depends heavily on its foundations. We did not want to operate a product whose underlying layer would remain a black box or a default-accepted limitation. That is what led us to work on something few providers touch: Kubernetes' internal consistency layer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Under the hood: Materia etcd on FoundationDB</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In Kubernetes, etcd is the component that stores cluster state: manifests, resources, secrets, node state. It is the source of truth for the entire orchestrator.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also one of the most sensitive components in the system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>etcd works very well within the scope it was designed for. But its limits at scale are well known: store size, latencies under heavy write load, behaviour during network partitions, backup and restore operations, the need for compaction and fine-grained monitoring. When Kubernetes becomes a critical foundation, etcd becomes an operational concern in its own right.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We did not want to build CKE on top of a brick we would then treat as a fragile black box.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So we took the problem back to its root: keep the contract Kubernetes expects, but replace the internal consistency layer with an implementation backed by FoundationDB. We call it Materia etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>FoundationDB gives us distributed ACID transactions, a robust consistency model, and a <a href="https://apple.github.io/foundationdb/testing.html">deterministic simulation testing</a> approach that fits very well with how we build critical infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For end users, this work is invisible. That is precisely the point. Under the hood, this foundation lets us build CKE with the auto-scaling, auto-healing and operational predictability we expect from a Clever Cloud service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We will come back to Materia etcd in more detail soon, because the topic deserves a dedicated article.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Standard Kubernetes on the developer side</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>All this work on the underlying layer has a simple goal: on the user side, CKE has to be standard Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Your manifests work without modification. Your Helm charts install normally. Your Argo CD or your Flux plugs in like on any other cluster. Your Kubernetes operators run without surprises.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE does not try to reinvent the developer interface of Kubernetes. That would be counterproductive. If you already have a Kubernetes deployment chain, the goal is for it to run on CKE with as little friction as possible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The difference happens elsewhere: in how this Kubernetes integrates with the rest of the Clever Cloud platform.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Kubernetes when you need it, the PaaS when it is enough</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE does not replace our PaaS. It complements it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many applications, the PaaS remains the best choice: less operations, less configuration, less YAML, less maintenance surface. If your application fits naturally in a Clever Cloud runtime, the PaaS is often still the simplest and most robust path.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But there are cases where Kubernetes is the right tool.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You may need to install :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>An operator;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Reuse existing manifests;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Standardize a GitOps chain;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Deploy a workload already distributed as a Helm chart;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Run an internal platform built around the Kubernetes API;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Or simply meet the habits of a team that already works with Kubernetes day to day.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>In those cases, the problem is not Kubernetes itself. The problem is Kubernetes isolated from the rest of your system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is where CKE changes things. You can keep a Node.js API on the PaaS, a static frontend on Cellar, a managed PostgreSQL database, and run on CKE only the component, the operator or the workload that really needs Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>All within the same Clever Cloud environment.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Native integration with the Clever Cloud ecosystem</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE was designed to integrate with the services you already use on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cellar</strong>, our S3-compatible object storage, can be used from your Kubernetes workloads.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Managed databases</strong> (PostgreSQL, MySQL, MongoDB, Redis, Materia) attach to your cluster the same way they do to any other Clever Cloud application.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>IAM as a Service</strong> lets you manage authentication and permissions on the cluster and on the teams that access it.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Network Groups</strong> lets you connect your CKE cluster to your existing Clever Cloud PaaS applications, in the same private network.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>The Network Groups integration is probably the one that changes day-to-day work the most.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is often introduced into organizations as a new island: new console, new network, new secrets, new access rules, new billing, a new way to connect services together.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>With CKE, the goal is the opposite. Kubernetes becomes one more brick in the Clever Cloud architecture, not a parallel world.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So you can build a hybrid architecture without workarounds: part on the PaaS, part on CKE, managed databases, object storage, private networking, and shared governance.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Enabling CKE and deploying a first application</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For this demo, we will stick to the bare minimum: enable the feature, create a cluster, fetch a kubeconfig, add a node group, and deploy a first application with a <code>LoadBalancer</code> service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On the prerequisites side, you will need <a href="https://www.clever.cloud/developers/doc/cli/">Clever Tools</a> version 4.3 or later, and <code>kubectl</code> installed locally.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Since the public beta opened on April 27, the Kubernetes feature can be enabled by any Clever Cloud customer, with a single command:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever features enable k8s</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>You can then create a cluster. Give it a name, point to your organization, and the <code>--watch</code> option lets you follow the deployment progress:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever k8s create my-cluster --org &lt;your-org-id&gt; --watch</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Creation takes about a minute. At any time, you can list the clusters in your organization with <code>clever k8s list</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Once the cluster is ready, fetch its kubeconfig and write it directly as your default local configuration:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever k8s get-kubeconfig my-cluster --org &lt;your-org-id&gt; &gt; ~/.kube/config</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>From there, it is standard Kubernetes. <code>kubectl</code> talks to the cluster, and your usual tooling follows. You can start by checking that everything is in place:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl get nodes</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>At this stage, the list is empty: the cluster is created but has no compute capacity. This is a good moment to introduce the first CKE-specific API resource: the <code>NodeGroup</code>. A node group is a set of Kubernetes nodes with the same profile (same flavor, same region), managed as a unit. You describe it like any other Kubernetes resource, in a YAML file:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-yaml">apiVersion: api.clever-cloud.com/v1
kind: NodeGroup
metadata:
  name: example-nodegroup
spec:
  flavor: M
  nodeCount: 2</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>And you apply it with <code>kubectl</code>:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl create -f example-nodegroup.yaml</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Sixty to ninety seconds later, the nodes join the cluster:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl get nodegroups
NAME                DESIREDNODECOUNT   CURRENTNODECOUNT   FLAVOR   STATUS   AGE
example-nodegroup   2                  2                  M        Synced   2m

kubectl get nodes
NAME                      STATUS   ROLES    AGE   VERSION
example-nodegroup-node0   Ready    <none>   2m    v1.35.0
example-nodegroup-node1   Ready    <none>   2m    v1.35.0</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>To resize the node group, you stay within the Kubernetes API:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl scale nodegroup example-nodegroup --replicas=4</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>With a cluster that now has compute capacity, you can deploy a first application. To keep things simple, an nginx exposed through a <code>LoadBalancer</code> service, which will automatically provision a load balancer on the Clever Cloud side:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl create deployment nginx --image=nginx:alpine --replicas=2 
kubectl expose deployment/nginx --type=LoadBalancer --port 80 
kubectl get service nginx</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>A few seconds later, the service exposes a public address. This is exactly the responsive behaviour we mentioned about the private testing phase: provisioning a node group, scaling it or exposing a service requires no waiting and no manual configuration.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>From here, it is Kubernetes like anywhere else. You can add persistent storage through the Clever Cloud CSI, install the <a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a> to provision a managed database from your manifests, or plug in your usual GitOps chain. The cluster supports Kubernetes versions 1.34, 1.35 and 1.36, with 1.35 as the default. Everything is detailed in the <a href="https://www.clever.cloud/developers/doc/kubernetes/">CKE documentation</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What we saw during private testing and at Devoxx, and what is next</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE is now in public beta, but some of our customers have had private access for several months. That phase was very useful to expose the product to real-world usage before opening it more widely.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The feedback has been very positive. The cluster behaves as expected, and the operations that come up most often in a Kubernetes team's daily life, such as adding a node or setting up a load balancer, are fast and predictable. That is exactly the behaviour we were aiming for when we invested so much time into the internal consistency layer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At Devoxx France, we presented CKE on the Clever Cloud booth for three days. The conversations confirmed two things we were already observing.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>First, teams are not just looking for a Kubernetes cluster. They are looking for a Kubernetes that integrates cleanly with their platform, their network, their databases, their security constraints and their existing practices.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Second, and probably the most striking feedback, developers are not looking to put everything on Kubernetes. Many want to keep their classic applications on our PaaS, where it is the most efficient, and deploy on Kubernetes only the components that really warrant it, because of their complexity, their distributed architecture, or the constraints of the ecosystem they fit into.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is exactly the kind of hybrid architecture CKE is designed to enable.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also why, ahead of the launch, we built the <a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a>. It allows a workload running in a Kubernetes cluster, whether hosted with us or elsewhere, to provision and consume our managed services directly from the Kubernetes API: PostgreSQL, MySQL, MongoDB, Redis, Cellar or Materia.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For your teams, it is a <code>kubectl apply</code> that creates a managed database. For CKE, it is the natural tool to bridge Kubernetes workloads and the rest of the Clever Cloud platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The beta is open to all Clever Cloud customers. You can enable it right now, deploy your first workloads, and tell us what is missing, what surprises you or what you would like to see come next.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The discussion is open on <a href="https://github.com/CleverCloud/Community/discussions">our GitHub </a><a href="https://github.com/CleverCloud/Community/discussions/categories/kubernetes" target="_blank" rel="noreferrer noopener">community</a>, and the documentation is available <a href="https://www.clever.cloud/developers">here</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE does not replace our PaaS. It complements it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many applications, the PaaS remains the simplest path from a commit to production. But when you need Kubernetes, for an operator, a Helm chart, a GitOps chain, an already-standardized workload or an internal platform, you can now do it inside the Clever Cloud environment, with our infrastructure choices, our network, our managed services and our sovereignty requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is the kind of Kubernetes we wanted to build.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Cloud modernisation: how to align governance and operations without adding complexity</title>
		<link>https://www.clever.cloud/blog/engineering/2026/04/21/cloud-modernisation-how-to-align-governance-and-operations-without-adding-complexity/</link>
		
		<dc:creator><![CDATA[Marjorie Darrigade]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 15:18:47 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Guests]]></category>
		<category><![CDATA[webinar]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24180</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Webinaire CCxCycloid" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>In this context, the question is no longer whether to migrate, but how to structure what already exists, maintain control over day-to-day operations, and retain ownership of environments and data.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On Tuesday 28 April at 11:30 AM, Clever Cloud and <a href="https://www.cycloid.io/">Cycloid</a> are hosting a webinar to address these challenges.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"lightbox":{"enabled":false},"id":24153,"sizeSlug":"large","linkDestination":"custom"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1024x427.png" alt="Webinaire CCxCycloid" class="wp-image-24153"/></figure>
<!-- /wp:image -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://app.livestorm.co/clevercloud/clever-cloud-et-cycloid-modernisation-cloud-en-europe">Register now</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong><strong>Two complementary perspectives on a shared challenge</strong></strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We are offering a cross-functional discussion to provide concrete insight into these topics.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cycloid covers the structuring and governance of environments through a unified internal developer platform and portal. Clever Cloud addresses managed operations, operational maintenance (MCO) and operational sovereignty.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Join Florent Perreux (Chief Sales Officer @ Clever Cloud), Steven Le Roux (CTO @ Clever Cloud), Alexandre Blin (Business Director SEMEA @ Cycloid) and Olivier de Turckheim (Solution Architect @ Cycloid) to understand how to align governance and operations without adding complexity.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Agenda</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>🔹 Why cloud modernisation goes beyond migration;plus à une migration;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Structuring and governance challenges in multi-cloud environments;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Operational challenges related to operations and maintenance;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 How to align governance and operations without multiplying complexity;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 A live Q&amp;A session to ask your questions directly.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Why attend?</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>✅ Understand the root causes of complexity in cloud projects;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Identify the levers to structure your usage and reduce vendor dependency;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Gain a clearer understanding of operational and sovereignty challenges;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Benefit from concrete real-world experience;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Engage directly with experts.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Register now</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>🗓️ Tuesday 28 April 2026</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>⏰ 11:30 AM – 12:00 PM</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>💻 Online webinar on Livestorm</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"21px"} -->
<div style="height:21px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p>Facing these challenges? Join us on 28 April!</p>
<!-- /wp:paragraph -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://app.livestorm.co/clevercloud/clever-cloud-et-cycloid-modernisation-cloud-en-europe">Register now</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Webinaire CCxCycloid" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>In this context, the question is no longer whether to migrate, but how to structure what already exists, maintain control over day-to-day operations, and retain ownership of environments and data.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On Tuesday 28 April at 11:30 AM, Clever Cloud and <a href="https://www.cycloid.io/">Cycloid</a> are hosting a webinar to address these challenges.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"lightbox":{"enabled":false},"id":24153,"sizeSlug":"large","linkDestination":"custom"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-en-1024x427.png" alt="Webinaire CCxCycloid" class="wp-image-24153"/></figure>
<!-- /wp:image -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://app.livestorm.co/clevercloud/clever-cloud-et-cycloid-modernisation-cloud-en-europe">Register now</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong><strong>Two complementary perspectives on a shared challenge</strong></strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We are offering a cross-functional discussion to provide concrete insight into these topics.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cycloid covers the structuring and governance of environments through a unified internal developer platform and portal. Clever Cloud addresses managed operations, operational maintenance (MCO) and operational sovereignty.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Join Florent Perreux (Chief Sales Officer @ Clever Cloud), Steven Le Roux (CTO @ Clever Cloud), Alexandre Blin (Business Director SEMEA @ Cycloid) and Olivier de Turckheim (Solution Architect @ Cycloid) to understand how to align governance and operations without adding complexity.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Agenda</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>🔹 Why cloud modernisation goes beyond migration;plus à une migration;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Structuring and governance challenges in multi-cloud environments;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Operational challenges related to operations and maintenance;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 How to align governance and operations without multiplying complexity;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 A live Q&amp;A session to ask your questions directly.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Why attend?</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>✅ Understand the root causes of complexity in cloud projects;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Identify the levers to structure your usage and reduce vendor dependency;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Gain a clearer understanding of operational and sovereignty challenges;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Benefit from concrete real-world experience;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Engage directly with experts.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Register now</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>🗓️ Tuesday 28 April 2026</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>⏰ 11:30 AM – 12:00 PM</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>💻 Online webinar on Livestorm</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"21px"} -->
<div style="height:21px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p>Facing these challenges? Join us on 28 April!</p>
<!-- /wp:paragraph -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://app.livestorm.co/clevercloud/clever-cloud-et-cycloid-modernisation-cloud-en-europe">Register now</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Clever Cloud launches Clever Kubernetes Engine (CKE) in public beta on April 27, 2026</title>
		<link>https://www.clever.cloud/blog/company/2026/04/21/clever-kubernetes-engine-cke-in-public-beta-on-april-27-2026/</link>
		
		<dc:creator><![CDATA[Carine Guillemet]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 14:26:35 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Press]]></category>
		<category><![CDATA[cke]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24176</guid>

					<description><![CDATA[<p><img width="1600" height="900" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud CKE Devoxx" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en.png 1600w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-300x169.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-1024x576.png 1024w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-768x432.png 768w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-1536x864.png 1536w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-1368x770.png 1368w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /></p><!-- wp:paragraph -->
<p><em>Nantes, France — Clever Cloud, a European cloud provider, announces the public beta launch of Clever Kubernetes Engine (CKE) on April 27, 2026, in the afternoon. The product will be previewed at Devoxx starting April 22, where attendees will be able to test it directly at the Clever Cloud booth.</em></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Built for production and scalability</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes has become the standard for container orchestration. Clever Cloud spent two years developing a managed, sovereign version designed to integrate naturally into the Clever Cloud ecosystem and operate with the same simplicity as the platform's other services. CKE is built to handle real production workloads, with high scalability and predictable behavior at scale.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>To achieve this, Clever Cloud developed Materia etcd, a reimplementation of Kubernetes' internal consistency layer built on FoundationDB. This foundational work — invisible to the end user — is what guarantees CKE's robustness and stability in production, notably through native auto-scaling and auto-healing capabilities.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE integrates natively with existing Clever Cloud services — Cellar object storage (S3-compatible), managed databases, IAM as a Service, Network Groups — and remains accessible via standard industry tools: kubectl, Helm, or GitOps.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Sovereign by design</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Hosted and operated in Europe by Clever Cloud on its public cloud, CKE offers organizations a concrete alternative to the Kubernetes offerings of major American platforms, without compromising on performance or legal data control. CKE can also be deployed on the customer's own on-premises infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Access details</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The public beta is open to all Clever Cloud customers from April 27, 2026, via feature activation performed by the user. Notably, some customers have already had access through a private test for over six months, allowing the product to be refined before this general release.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em>"Clever Cloud has long developed alternatives to Kubernetes. Our customers expressed a clear need for this technology, and we decided to build it alongside them, with the level of technical excellence and sovereignty that defines our platform."</em>&nbsp;— Quentin Adam, CEO of Clever Cloud</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/clever-kubernetes-engine/" type="link" id="https://www.clever.cloud/clever-kubernetes-engine/">Learn more</a></p>
<!-- /wp:paragraph -->

<!-- wp:acf/video {"name":"acf/video","data":{"overtitle":"Video","_overtitle":"field_638dfc12af44d","title":"\u003cb\u003eDiscover CKE\u003c/b\u003e in 1 minute","_title":"field_638dfc39af44e","description":"Standard Kubernetes compatible with the entire ecosystem, operated by Clever Cloud.","_description":"field_638dfc45af44f","description_secondary":"","_description_secondary":"field_63c81679fd784","poster":24115,"_poster":"field_638dfc50af450","type":"iframe","_type":"field_63edfc74597df","iframe":"\u003ciframe width=\u0022560\u0022 height=\u0022315\u0022 src=\u0022https://www.youtube.com/embed/hw630p3kGfE?si=TIElBBUEZh0k4qgS\u0022 title=\u0022YouTube video player\u0022 frameborder=\u00220\u0022 allow=\u0022accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\u0022 referrerpolicy=\u0022strict-origin-when-cross-origin\u0022 allowfullscreen\u003e\u003c/iframe\u003e","_iframe":"field_638dfcb8af451"},"mode":"auto"} /-->]]></description>
										<content:encoded><![CDATA[<p><img width="1600" height="900" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud CKE Devoxx" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en.png 1600w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-300x169.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-1024x576.png 1024w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-768x432.png 768w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-1536x864.png 1536w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-en-1368x770.png 1368w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /></p><!-- wp:paragraph -->
<p><em>Nantes, France — Clever Cloud, a European cloud provider, announces the public beta launch of Clever Kubernetes Engine (CKE) on April 27, 2026, in the afternoon. The product will be previewed at Devoxx starting April 22, where attendees will be able to test it directly at the Clever Cloud booth.</em></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Built for production and scalability</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes has become the standard for container orchestration. Clever Cloud spent two years developing a managed, sovereign version designed to integrate naturally into the Clever Cloud ecosystem and operate with the same simplicity as the platform's other services. CKE is built to handle real production workloads, with high scalability and predictable behavior at scale.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>To achieve this, Clever Cloud developed Materia etcd, a reimplementation of Kubernetes' internal consistency layer built on FoundationDB. This foundational work — invisible to the end user — is what guarantees CKE's robustness and stability in production, notably through native auto-scaling and auto-healing capabilities.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE integrates natively with existing Clever Cloud services — Cellar object storage (S3-compatible), managed databases, IAM as a Service, Network Groups — and remains accessible via standard industry tools: kubectl, Helm, or GitOps.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Sovereign by design</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Hosted and operated in Europe by Clever Cloud on its public cloud, CKE offers organizations a concrete alternative to the Kubernetes offerings of major American platforms, without compromising on performance or legal data control. CKE can also be deployed on the customer's own on-premises infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Access details</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The public beta is open to all Clever Cloud customers from April 27, 2026, via feature activation performed by the user. Notably, some customers have already had access through a private test for over six months, allowing the product to be refined before this general release.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em>"Clever Cloud has long developed alternatives to Kubernetes. Our customers expressed a clear need for this technology, and we decided to build it alongside them, with the level of technical excellence and sovereignty that defines our platform."</em>&nbsp;— Quentin Adam, CEO of Clever Cloud</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/clever-kubernetes-engine/" type="link" id="https://www.clever.cloud/clever-kubernetes-engine/">Learn more</a></p>
<!-- /wp:paragraph -->

<!-- wp:acf/video {"name":"acf/video","data":{"overtitle":"Video","_overtitle":"field_638dfc12af44d","title":"\u003cb\u003eDiscover CKE\u003c/b\u003e in 1 minute","_title":"field_638dfc39af44e","description":"Standard Kubernetes compatible with the entire ecosystem, operated by Clever Cloud.","_description":"field_638dfc45af44f","description_secondary":"","_description_secondary":"field_63c81679fd784","poster":24115,"_poster":"field_638dfc50af450","type":"iframe","_type":"field_63edfc74597df","iframe":"\u003ciframe width=\u0022560\u0022 height=\u0022315\u0022 src=\u0022https://www.youtube.com/embed/hw630p3kGfE?si=TIElBBUEZh0k4qgS\u0022 title=\u0022YouTube video player\u0022 frameborder=\u00220\u0022 allow=\u0022accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\u0022 referrerpolicy=\u0022strict-origin-when-cross-origin\u0022 allowfullscreen\u003e\u003c/iframe\u003e","_iframe":"field_638dfcb8af451"},"mode":"auto"} /-->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>OpenTofu: the open-source Terraform fork — natively supported on Clever Cloud</title>
		<link>https://www.clever.cloud/blog/engineering/2026/03/25/opentofu-the-open-source-terraform-fork/</link>
		
		<dc:creator><![CDATA[Carine Guillemet]]></dc:creator>
		<pubDate>Wed, 25 Mar 2026 09:44:14 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[opentofu]]></category>
		<category><![CDATA[terraform]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=23944</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-2-2.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 18 clever cloud banniere blog paas secteur public eng 2 2" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-2-2.png 800w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-2-2-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-2-2-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>BSL is not an open-source license as defined by the Open Source Initiative: it restricts commercial use deemed competitive with HashiCorp's offerings. Overnight, thousands of organizations that had built their infrastructure around Terraform found themselves in uncomfortable legal uncertainty.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The response was swift. Less than a month after the announcement, a manifesto calling for a return to an open-source license had gathered 33,000 GitHub stars and the support of nearly 140 companies. HashiCorp did not budge. The fork was published in September 2023, brought into the Linux Foundation, and renamed OpenTofu. Since January 2024, it has been in stable production. Since April 2025, it has been part of the Cloud Native Computing Foundation (CNCF).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Our <a href="https://www.clever.cloud/product/terraform/" type="link" id="https://www.clever.cloud/product/terraform/">Terraform</a> provider is fully compatible with OpenTofu. No changes to your configurations are needed to use it.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What is OpenTofu?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>OpenTofu is an open-source infrastructure as code (IaC) tool, forked from the last MPL 2.0-licensed version of Terraform (1.5.x), distributed under that same Mozilla Public License 2.0. It lets you describe, provision, and manage cloud infrastructure through declarative configuration files written in HashiCorp Configuration Language.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is developed under the governance of the Linux Foundation, with a Technical Steering Committee made up of representatives from multiple organizations — Gruntwork, Spacelift, Harness, Env0, Scalr — so that no single company can control its direction. That governance model is precisely what convinced many teams to make the switch: a guarantee that the tool will remain truly open source, regardless of how its contributors evolve commercially.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In practice, OpenTofu works with the same&nbsp;<code>.tf</code>&nbsp;files, the same providers, the same modules, and the same CLI workflow as Terraform —&nbsp;<code>init</code>,&nbsp;<code>plan</code>,&nbsp;<code>apply</code>,&nbsp;<code>destroy</code>. For the vast majority of teams, migrating comes down to replacing the binary.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What's the actual difference with Terraform?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The main difference is the license, and everything it implies in the long run.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Terraform is now distributed under the BSL, which restricts commercial uses that could be considered competitive with HashiCorp — a deliberately vague notion that HashiCorp (now a subsidiary of IBM) may interpret differently in the future. OpenTofu is distributed under MPL 2.0, a true open-source license with no commercial restrictions.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Beyond the license, the two projects have started to diverge technically since the fork. The most notable differences to date:&lt;ul> &lt;li>&lt;strong>State encryption:&lt;/strong> OpenTofu natively supports client-side encryption of state files — a feature long requested by the community that Terraform has still not implemented.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<ul></li> <li><strong>Governance:</strong> OpenTofu is steered by a multi-organization technical committee within the Linux Foundation. Terraform is controlled by IBM via HashiCorp, with a roadmap driven by commercial priorities.</li> <li><strong>Compatibility:</strong> OpenTofu maintains syntactic and functional compatibility with Terraform. Existing providers, modules, and configurations work without modification for the vast majority of use cases.</li> <li><strong>The <code>.tofu</code> extension:</strong> OpenTofu supports this extension alongside <code>.tf</code>, allowing module authors to provide OpenTofu-specific variants while remaining compatible with Terraform.</li> <li><strong>Terraform Actions:</strong> HashiCorp introduced "actions" in Terraform 1.9+, a feature that lets you trigger custom behaviors during resource lifecycle events. OpenTofu does not yet support them — this is the inherent trade-off of any fork: new proprietary Terraform features are not automatically available, and their implementation in OpenTofu depends on the technical committee's priorities.</li> </ul>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Why teams are migrating to OpenTofu</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Three reasons come up consistently.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Legal risk.</strong>&nbsp;The BSL prohibits using Terraform in products that could compete with HashiCorp's commercial offerings. For teams building internal platforms, cloud products, or managed services, this uncertainty is a real operational risk — especially since the definition of "competitive" belongs to HashiCorp and can evolve. On top of that, there is a less visible but equally significant reality: in the Terraform registry, open-source providers get no special visibility. Getting an "official" badge requires negotiating directly with HashiCorp — and paying for it. In the OpenTofu registry, all providers are on equal footing, regardless of the size or resources of their maintainers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Strategic autonomy over tooling.</strong>&nbsp;Your infrastructure as code is the foundation of everything else. Depending on a tool controlled by a US company subject to the Cloud Act means introducing an additional dependency that many organizations would rather avoid. OpenTofu, under Linux Foundation / CNCF governance, offers continuity independent of any commercial actor.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Features Terraform doesn't ship.</strong>&nbsp;Native state file encryption is the most frequently cited example: requested by the community for years, implemented within months by OpenTofu. It is also a signal about how quickly community-driven governance can respond to real needs, compared to a roadmap driven by commercial interests.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Migrating from Terraform to OpenTofu</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For the vast majority of teams, migration takes a matter of minutes. All you need to do is make sure the state is clean, install OpenTofu, and replace&nbsp;<code>terraform</code>&nbsp;with&nbsp;<code>tofu</code>&nbsp;in your commands.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Make sure your state is clean before migrating terraform plan </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># → "No changes. Your infrastructure matches the configuration."</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p> # Install OpenTofu on macOS brew install opentofu </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Install OpenTofu on Linux </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh | sh </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Resume your normal workflow </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu init </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu plan</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu apply</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Existing <code>.tf</code> files do not need to be modified. The OpenTofu registry mirrors all providers available on the Terraform Registry — including the Clever Cloud provider.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">OpenTofu on Clever Cloud: nothing to change</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Our official provider (<code>CleverCloud/clevercloud</code>, currently version 1.10) works identically with both Terraform and OpenTofu. The provider source, HCL syntax, and all available resources are exactly the same. A minimal example to deploy a Node.js application with a PostgreSQL database:</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>terraform {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;required_providers {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;clevercloud = {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp; = "CleverCloud/clevercloud"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version = "~&gt; 1.10"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>provider "clevercloud" {organisation}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>resource "clevercloud_node" "app" {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;name &nbsp; &nbsp; &nbsp; = "mon-app-node"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;region &nbsp; &nbsp; = "par"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;min_flavor = "XS"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;max_flavor = "M"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>resource "clevercloud_postgresql" "db" {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;name &nbsp; = "ma-base-postgres"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;region = "par"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;plan &nbsp; = "dev"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu init</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu plan</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code>tofu apply</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The OpenTofu + Clever Cloud combination is a fully sovereign IaC stack: open-source tooling under Linux Foundation / CNCF governance, infrastructure hosted in our own data centers in France, outside the reach of the US Cloud Act. It is the choice increasingly made by teams who want full control over their entire toolchain — not just their data.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><em>The Clever Cloud provider is available on the <a href="https://registry.terraform.io/providers/CleverCloud/clevercloud/latest">Terraform Registry</a> and fully open source on <a href="https://github.com/CleverCloud/terraform-provider-clevercloud">GitHub</a>. </em><br></em></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Q&amp;A</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><em><br></em><strong>Is OpenTofu compatible with my existing Terraform configurations?</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For the vast majority of use cases, yes. OpenTofu maintains syntactic and functional compatibility with Terraform. Existing <code>.tf</code> files, providers, and modules work without modification. Testing in a non-production environment before switching critical workloads is recommended.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><br></em><strong>Is OpenTofu production-ready?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Yes. The first stable version was released in January 2024. The project has since surpassed 10 million downloads and is used in production by organizations of all sizes, including Fortune 500 companies. Its integration into the CNCF in April 2025 reinforced its credibility for enterprise environments.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><br></em><strong>What is the open-source alternative to Terraform?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>OpenTofu is the primary open-source alternative to Terraform. Distributed under MPL 2.0, maintained by the Linux Foundation, and a CNCF member, it is the direct continuation of Terraform in its original open-source state.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><br></em><strong>Is the Clever Cloud Terraform provider compatible with OpenTofu?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Yes, with no configuration changes required. Our official provider (<code>CleverCloud/clevercloud</code>) works identically with both Terraform and OpenTofu.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><br></em><strong>How does OpenTofu work?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the same way as Terraform: you describe the target state of your infrastructure in HCL, OpenTofu computes the necessary changes (<code>tofu plan</code>) and applies them (<code>tofu apply</code>). It manages dependencies between resources, the state, and the full lifecycle of each resource. This is also where IBM's acquisition of HashiCorp introduces additional uncertainty: projects built around Terraform, such as CDK for Terraform, could be deprioritized or discontinued based on IBM's commercial decisions. With OpenTofu, the roadmap is public, discussed through open RFCs, and does not depend on decisions made behind closed doors by a single actor.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-2-2.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 18 clever cloud banniere blog paas secteur public eng 2 2" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-2-2.png 800w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-2-2-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-2-2-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>BSL is not an open-source license as defined by the Open Source Initiative: it restricts commercial use deemed competitive with HashiCorp's offerings. Overnight, thousands of organizations that had built their infrastructure around Terraform found themselves in uncomfortable legal uncertainty.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The response was swift. Less than a month after the announcement, a manifesto calling for a return to an open-source license had gathered 33,000 GitHub stars and the support of nearly 140 companies. HashiCorp did not budge. The fork was published in September 2023, brought into the Linux Foundation, and renamed OpenTofu. Since January 2024, it has been in stable production. Since April 2025, it has been part of the Cloud Native Computing Foundation (CNCF).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Our <a href="https://www.clever.cloud/product/terraform/" type="link" id="https://www.clever.cloud/product/terraform/">Terraform</a> provider is fully compatible with OpenTofu. No changes to your configurations are needed to use it.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What is OpenTofu?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>OpenTofu is an open-source infrastructure as code (IaC) tool, forked from the last MPL 2.0-licensed version of Terraform (1.5.x), distributed under that same Mozilla Public License 2.0. It lets you describe, provision, and manage cloud infrastructure through declarative configuration files written in HashiCorp Configuration Language.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is developed under the governance of the Linux Foundation, with a Technical Steering Committee made up of representatives from multiple organizations — Gruntwork, Spacelift, Harness, Env0, Scalr — so that no single company can control its direction. That governance model is precisely what convinced many teams to make the switch: a guarantee that the tool will remain truly open source, regardless of how its contributors evolve commercially.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In practice, OpenTofu works with the same&nbsp;<code>.tf</code>&nbsp;files, the same providers, the same modules, and the same CLI workflow as Terraform —&nbsp;<code>init</code>,&nbsp;<code>plan</code>,&nbsp;<code>apply</code>,&nbsp;<code>destroy</code>. For the vast majority of teams, migrating comes down to replacing the binary.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What's the actual difference with Terraform?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The main difference is the license, and everything it implies in the long run.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Terraform is now distributed under the BSL, which restricts commercial uses that could be considered competitive with HashiCorp — a deliberately vague notion that HashiCorp (now a subsidiary of IBM) may interpret differently in the future. OpenTofu is distributed under MPL 2.0, a true open-source license with no commercial restrictions.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Beyond the license, the two projects have started to diverge technically since the fork. The most notable differences to date:&lt;ul> &lt;li>&lt;strong>State encryption:&lt;/strong> OpenTofu natively supports client-side encryption of state files — a feature long requested by the community that Terraform has still not implemented.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<ul></li> <li><strong>Governance:</strong> OpenTofu is steered by a multi-organization technical committee within the Linux Foundation. Terraform is controlled by IBM via HashiCorp, with a roadmap driven by commercial priorities.</li> <li><strong>Compatibility:</strong> OpenTofu maintains syntactic and functional compatibility with Terraform. Existing providers, modules, and configurations work without modification for the vast majority of use cases.</li> <li><strong>The <code>.tofu</code> extension:</strong> OpenTofu supports this extension alongside <code>.tf</code>, allowing module authors to provide OpenTofu-specific variants while remaining compatible with Terraform.</li> <li><strong>Terraform Actions:</strong> HashiCorp introduced "actions" in Terraform 1.9+, a feature that lets you trigger custom behaviors during resource lifecycle events. OpenTofu does not yet support them — this is the inherent trade-off of any fork: new proprietary Terraform features are not automatically available, and their implementation in OpenTofu depends on the technical committee's priorities.</li> </ul>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Why teams are migrating to OpenTofu</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Three reasons come up consistently.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Legal risk.</strong>&nbsp;The BSL prohibits using Terraform in products that could compete with HashiCorp's commercial offerings. For teams building internal platforms, cloud products, or managed services, this uncertainty is a real operational risk — especially since the definition of "competitive" belongs to HashiCorp and can evolve. On top of that, there is a less visible but equally significant reality: in the Terraform registry, open-source providers get no special visibility. Getting an "official" badge requires negotiating directly with HashiCorp — and paying for it. In the OpenTofu registry, all providers are on equal footing, regardless of the size or resources of their maintainers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Strategic autonomy over tooling.</strong>&nbsp;Your infrastructure as code is the foundation of everything else. Depending on a tool controlled by a US company subject to the Cloud Act means introducing an additional dependency that many organizations would rather avoid. OpenTofu, under Linux Foundation / CNCF governance, offers continuity independent of any commercial actor.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Features Terraform doesn't ship.</strong>&nbsp;Native state file encryption is the most frequently cited example: requested by the community for years, implemented within months by OpenTofu. It is also a signal about how quickly community-driven governance can respond to real needs, compared to a roadmap driven by commercial interests.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Migrating from Terraform to OpenTofu</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For the vast majority of teams, migration takes a matter of minutes. All you need to do is make sure the state is clean, install OpenTofu, and replace&nbsp;<code>terraform</code>&nbsp;with&nbsp;<code>tofu</code>&nbsp;in your commands.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Make sure your state is clean before migrating terraform plan </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># → "No changes. Your infrastructure matches the configuration."</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p> # Install OpenTofu on macOS brew install opentofu </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Install OpenTofu on Linux </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh | sh </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Resume your normal workflow </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu init </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu plan</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu apply</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Existing <code>.tf</code> files do not need to be modified. The OpenTofu registry mirrors all providers available on the Terraform Registry — including the Clever Cloud provider.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">OpenTofu on Clever Cloud: nothing to change</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Our official provider (<code>CleverCloud/clevercloud</code>, currently version 1.10) works identically with both Terraform and OpenTofu. The provider source, HCL syntax, and all available resources are exactly the same. A minimal example to deploy a Node.js application with a PostgreSQL database:</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>terraform {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;required_providers {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;clevercloud = {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp; = "CleverCloud/clevercloud"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version = "~&gt; 1.10"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>provider "clevercloud" {organisation}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>resource "clevercloud_node" "app" {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;name &nbsp; &nbsp; &nbsp; = "mon-app-node"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;region &nbsp; &nbsp; = "par"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;min_flavor = "XS"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;max_flavor = "M"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>resource "clevercloud_postgresql" "db" {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;name &nbsp; = "ma-base-postgres"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;region = "par"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;plan &nbsp; = "dev"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu init</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu plan</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code>tofu apply</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The OpenTofu + Clever Cloud combination is a fully sovereign IaC stack: open-source tooling under Linux Foundation / CNCF governance, infrastructure hosted in our own data centers in France, outside the reach of the US Cloud Act. It is the choice increasingly made by teams who want full control over their entire toolchain — not just their data.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><em>The Clever Cloud provider is available on the <a href="https://registry.terraform.io/providers/CleverCloud/clevercloud/latest">Terraform Registry</a> and fully open source on <a href="https://github.com/CleverCloud/terraform-provider-clevercloud">GitHub</a>. </em><br></em></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Q&amp;A</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><em><br></em><strong>Is OpenTofu compatible with my existing Terraform configurations?</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For the vast majority of use cases, yes. OpenTofu maintains syntactic and functional compatibility with Terraform. Existing <code>.tf</code> files, providers, and modules work without modification. Testing in a non-production environment before switching critical workloads is recommended.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><br></em><strong>Is OpenTofu production-ready?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Yes. The first stable version was released in January 2024. The project has since surpassed 10 million downloads and is used in production by organizations of all sizes, including Fortune 500 companies. Its integration into the CNCF in April 2025 reinforced its credibility for enterprise environments.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><br></em><strong>What is the open-source alternative to Terraform?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>OpenTofu is the primary open-source alternative to Terraform. Distributed under MPL 2.0, maintained by the Linux Foundation, and a CNCF member, it is the direct continuation of Terraform in its original open-source state.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><br></em><strong>Is the Clever Cloud Terraform provider compatible with OpenTofu?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Yes, with no configuration changes required. Our official provider (<code>CleverCloud/clevercloud</code>) works identically with both Terraform and OpenTofu.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em><br></em><strong>How does OpenTofu work?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the same way as Terraform: you describe the target state of your infrastructure in HCL, OpenTofu computes the necessary changes (<code>tofu plan</code>) and applies them (<code>tofu apply</code>). It manages dependencies between resources, the state, and the full lifecycle of each resource. This is also where IBM's acquisition of HashiCorp introduces additional uncertainty: projects built around Terraform, such as CDK for Terraform, could be deprioritized or discontinued based on IBM's commercial decisions. With OpenTofu, the roadmap is public, discussed through open RFCs, and does not depend on decisions made behind closed doors by a single actor.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>When choose a PaaS for a public sector project</title>
		<link>https://www.clever.cloud/blog/features/2026/03/18/when-choose-a-paas-for-a-public-sector-project/</link>
		
		<dc:creator><![CDATA[Marjorie Darrigade]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 10:53:34 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[Public sector PaaS]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=23889</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 18 clever cloud banniere blog paas secteur public eng" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng.png 800w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>This transformation is taking place within a context of cost reduction, rationalization of existing infrastructures, and the pooling of IT resources.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In this constrained environment, the question is not only which provider or technology to choose, but which application execution model is best suited to the project at hand. PaaS (Platform as a Service) is one of the available options, provided its benefits, limitations, and applicable frameworks are clearly understood.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Challenges and issues specific to the public sector</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Public organizations face structural constraints that directly influence their technical decisions. <strong>Budget pressure </strong>is constant, with explicit objectives to control or even reduce IT operating costs. Technical teams are often understaffed, with <strong>recruitment challenges for specialized roles </strong>such as system administrators, developers, cybersecurity experts, and cloud or DevOps engineers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In addition, public organizations often rely on a <strong>heterogeneous and sometimes aging application landscape</strong>, built on technologies or <strong>environments that are no longer maintained </strong>or are difficult to evolve. Security, availability, and regulatory compliance requirements are high, while project timelines must remain <strong>aligned</strong> with the operational needs of administrations, local authorities, and public institutions.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">How PaaS can address these challenges in the public sector</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Using a cloud platform can address part of these challenges, without being a universal solution. One of its main benefits is the <strong>reduction of operational workload</strong>. In practice, this means that operating systems, application runtimes, deployment processes, restarts, and monitoring mechanisms are managed at the platform level. Technical teams no longer need to handle day-to-day infrastructure management and can focus on developing, improving, and maintaining applications.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>From a security and update perspective, an application hosting solution also helps maintain technical environments more consistently up to date. In the public sector, where <strong>legacy management </strong>is a key concern, this reduces risks associated with obsolete systems, unmaintained dependencies, and delayed security patching. While this approach does not eliminate existing legacy systems, it helps structure their operation and supports gradual modernization without requiring a full overhaul of the information system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In this context, a PaaS for public services can be a relevant lever, provided it is selected for clearly identified use cases.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Not all public projects fall under the same deployment framework</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Public sector digital projects vary widely. An internal business application, a citizen-facing digital service, a data platform, or a research project do not involve the same constraints or levels of requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Some contexts, particularly those related to <strong>defense or the processing of sensitive information</strong>, require enhanced guarantees in terms of security, control, and sovereignty. In such cases, specific qualification frameworks such as <strong>SecNumCloud</strong> may be required, limiting the available technical options. PaaS is therefore not suitable for all scenarios, and its use must be assessed based on data sensitivity and applicable regulatory requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Existing public frameworks for deploying PaaS</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Contrary to common belief, public sector organizations already have operational frameworks to access compliant cloud and application hosting services.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For administrations and public institutions, using <a href="https://www.ugap.fr/" target="_blank" rel="noreferrer noopener"><strong>UGAP</strong></a> provides access to a national purchasing body with pooled and legally secure contracts.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At a regional level, initiatives such as <a href="https://www.clever.cloud/fr/blog/presse/2025/09/11/clever-cloud-rejoint-la-fabrique-ia-territoriale-en-pays-de-la-loire/" target="_blank" rel="noreferrer noopener"><strong>La Fabrique IA Territoriale</strong></a>, led by <a href="https://gigalis.org/" target="_blank" rel="noreferrer noopener"><strong>GIGALIS</strong></a><strong>,</strong> offer local authorities and institutions in the Pays de la Loire region a structured framework to access digital and cloud services, with a focus on mutualization and support.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the healthcare sector, hospitals can rely on <strong><a href="https://resah.fr/" target="_blank" rel="noreferrer noopener">Resah</a></strong>, which references solutions tailored to the specific requirements of healthcare environments.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>These frameworks do not define technical use cases but provide concrete access points to services compliant with public procurement regulations.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">When PaaS is particularly relevant</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A managed cloud model is especially well suited when the goal is to <strong>build a new application without the need to handle system administration</strong>. It is also relevant for modernizing or refactoring existing applications, where the main objective is to simplify operations while improving reliability and security.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For application projects requiring fast deployment cycles, better cost predictability, and reduced administrative overhead, a cloud offering for public sector organizations can be a consistent choice, provided the functional and regulatory scope is clearly defined.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Key considerations before making this choice</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Before choosing a PaaS, several factors must be carefully evaluated: the actual scope of platform responsibility, reversibility conditions, data location and protection, and alignment between data sensitivity and the guarantees provided. These elements determine whether the model is appropriate and sustainable over time.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Are you working on an application project within a public service and wondering whether a PaaS model is relevant in your context?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Identifying the right contractual framework helps save time and ensures compliance with public sector digital projects.</p>
<!-- /wp:paragraph -->

<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://www.clever.cloud/contact/" target="_blank" rel="noreferrer noopener">Contact our team</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p>Or access Clever Cloud directly via public platforms:<br><strong>UGAP</strong> for administrations and public institutions, <strong>La Fabrique IA Territoriale</strong> for organizations in the Pays de la Loire region, and <strong>Resah</strong> for healthcare institutions.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br></p>
<!-- /wp:paragraph -->

<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 18 clever cloud banniere blog paas secteur public eng" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng.png 800w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>This transformation is taking place within a context of cost reduction, rationalization of existing infrastructures, and the pooling of IT resources.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In this constrained environment, the question is not only which provider or technology to choose, but which application execution model is best suited to the project at hand. PaaS (Platform as a Service) is one of the available options, provided its benefits, limitations, and applicable frameworks are clearly understood.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Challenges and issues specific to the public sector</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Public organizations face structural constraints that directly influence their technical decisions. <strong>Budget pressure </strong>is constant, with explicit objectives to control or even reduce IT operating costs. Technical teams are often understaffed, with <strong>recruitment challenges for specialized roles </strong>such as system administrators, developers, cybersecurity experts, and cloud or DevOps engineers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In addition, public organizations often rely on a <strong>heterogeneous and sometimes aging application landscape</strong>, built on technologies or <strong>environments that are no longer maintained </strong>or are difficult to evolve. Security, availability, and regulatory compliance requirements are high, while project timelines must remain <strong>aligned</strong> with the operational needs of administrations, local authorities, and public institutions.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">How PaaS can address these challenges in the public sector</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Using a cloud platform can address part of these challenges, without being a universal solution. One of its main benefits is the <strong>reduction of operational workload</strong>. In practice, this means that operating systems, application runtimes, deployment processes, restarts, and monitoring mechanisms are managed at the platform level. Technical teams no longer need to handle day-to-day infrastructure management and can focus on developing, improving, and maintaining applications.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>From a security and update perspective, an application hosting solution also helps maintain technical environments more consistently up to date. In the public sector, where <strong>legacy management </strong>is a key concern, this reduces risks associated with obsolete systems, unmaintained dependencies, and delayed security patching. While this approach does not eliminate existing legacy systems, it helps structure their operation and supports gradual modernization without requiring a full overhaul of the information system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In this context, a PaaS for public services can be a relevant lever, provided it is selected for clearly identified use cases.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Not all public projects fall under the same deployment framework</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Public sector digital projects vary widely. An internal business application, a citizen-facing digital service, a data platform, or a research project do not involve the same constraints or levels of requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Some contexts, particularly those related to <strong>defense or the processing of sensitive information</strong>, require enhanced guarantees in terms of security, control, and sovereignty. In such cases, specific qualification frameworks such as <strong>SecNumCloud</strong> may be required, limiting the available technical options. PaaS is therefore not suitable for all scenarios, and its use must be assessed based on data sensitivity and applicable regulatory requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Existing public frameworks for deploying PaaS</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Contrary to common belief, public sector organizations already have operational frameworks to access compliant cloud and application hosting services.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For administrations and public institutions, using <a href="https://www.ugap.fr/" target="_blank" rel="noreferrer noopener"><strong>UGAP</strong></a> provides access to a national purchasing body with pooled and legally secure contracts.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At a regional level, initiatives such as <a href="https://www.clever.cloud/fr/blog/presse/2025/09/11/clever-cloud-rejoint-la-fabrique-ia-territoriale-en-pays-de-la-loire/" target="_blank" rel="noreferrer noopener"><strong>La Fabrique IA Territoriale</strong></a>, led by <a href="https://gigalis.org/" target="_blank" rel="noreferrer noopener"><strong>GIGALIS</strong></a><strong>,</strong> offer local authorities and institutions in the Pays de la Loire region a structured framework to access digital and cloud services, with a focus on mutualization and support.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the healthcare sector, hospitals can rely on <strong><a href="https://resah.fr/" target="_blank" rel="noreferrer noopener">Resah</a></strong>, which references solutions tailored to the specific requirements of healthcare environments.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>These frameworks do not define technical use cases but provide concrete access points to services compliant with public procurement regulations.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">When PaaS is particularly relevant</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A managed cloud model is especially well suited when the goal is to <strong>build a new application without the need to handle system administration</strong>. It is also relevant for modernizing or refactoring existing applications, where the main objective is to simplify operations while improving reliability and security.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For application projects requiring fast deployment cycles, better cost predictability, and reduced administrative overhead, a cloud offering for public sector organizations can be a consistent choice, provided the functional and regulatory scope is clearly defined.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Key considerations before making this choice</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Before choosing a PaaS, several factors must be carefully evaluated: the actual scope of platform responsibility, reversibility conditions, data location and protection, and alignment between data sensitivity and the guarantees provided. These elements determine whether the model is appropriate and sustainable over time.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Are you working on an application project within a public service and wondering whether a PaaS model is relevant in your context?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Identifying the right contractual framework helps save time and ensures compliance with public sector digital projects.</p>
<!-- /wp:paragraph -->

<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://www.clever.cloud/contact/" target="_blank" rel="noreferrer noopener">Contact our team</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p>Or access Clever Cloud directly via public platforms:<br><strong>UGAP</strong> for administrations and public institutions, <strong>La Fabrique IA Territoriale</strong> for organizations in the Pays de la Loire region, and <strong>Resah</strong> for healthcare institutions.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br></p>
<!-- /wp:paragraph -->

<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
