<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cloud Native Architecture – Platform Engineering</title><link>https://deploy-preview-36--cncfarchitecture.netlify.app/reference_architectures/platform-engineering/</link><description>Recent content in Platform Engineering on Cloud Native Architecture</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 17 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://deploy-preview-36--cncfarchitecture.netlify.app/reference_architectures/platform-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Architectures: ZEISS Vision Care - Order Fulfillment</title><link>https://deploy-preview-36--cncfarchitecture.netlify.app/architectures/zeiss/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-36--cncfarchitecture.netlify.app/architectures/zeiss/</guid><description>
&lt;h2 id="relevant-cncf-projects">Relevant CNCF projects&lt;/h2>
&lt;div class="row row-cols-1 row-cols-md-3 mb-4">
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Kubernetes
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/kubernetes/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/kubernetes/icon/color/kubernetes-icon-color.svg" alt="kubernetes logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2020&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> 1.32.3&lt;/li>
&lt;/ul>
&lt;p>Hosts &amp;gt; 200 microservices supporting order fulfillment processes on managed Kubernetes. Provides the core compute platform for containerized services.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Dapr
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/dapr/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/dapr/stacked/color/dapr-stacked-color.svg" alt="dapr logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2020&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> 1.17.0&lt;/li>
&lt;/ul>
&lt;p>Provides common building blocks like service invocation, pub/sub, and state management across microservices; vendor-neutral abstractions enable portability across cloud providers.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
KEDA
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/keda/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/keda/icon/color/keda-icon-color.svg" alt="keda logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2021/2022&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> 2.19.0&lt;/li>
&lt;/ul>
&lt;p>Event-driven scaling. KEDA acts as an event-driven scaler; examples of triggers include message-broker queue depth and resource utilization.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
OpenTelemetry
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/opentelemetry/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/opentelemetry/icon/color/opentelemetry-icon-color.svg" alt="opentelemetry logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2020&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> Collector Contrib 0.145.0&lt;/li>
&lt;/ul>
&lt;p>Provides consistent instrumentation and exports telemetry to multiple targets.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Helm
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/helm/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/helm/icon/color/helm-icon-color.svg" alt="helm logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2020&lt;/li>
&lt;/ul>
&lt;p>Package management and templating for Kubernetes deployments.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="organization">Organization&lt;/h2>
&lt;p>ZEISS Vision Care produces spectacle lenses, instruments for refraction, and glasses adjustment equipment. Often, lenses are manufactured to an individual consumer&amp;rsquo;s prescription, effectively a batch size of one, which makes order fulfillment a multi-step coordination process.&lt;/p>
&lt;p>Our Business Enablement &amp;amp; IT team develops, designs, and operates the order fulfillment platform that underpins this process.&lt;/p>
&lt;h2 id="synopsis">Synopsis&lt;/h2>
&lt;p>We are reworking the order fulfillment process using a greenfield approach to modernize core systems. Our goal is a reliable, scalable platform that can evolve with business needs while remaining cost-efficient. The platform supports several key capabilities:&lt;/p>
&lt;ul>
&lt;li>Order routing: decide where the order should be produced.&lt;/li>
&lt;li>Order document generation: generate the necessary manufacturing and shipping documents for the order.&lt;/li>
&lt;li>Logistics routing: decide how to ship the order to the customer.&lt;/li>
&lt;li>Additional auxiliary domains as required.&lt;/li>
&lt;/ul>
&lt;h2 id="architecture-overview--goals">Architecture overview &amp;amp; Goals&lt;/h2>
&lt;h3 id="goals">Goals&lt;/h3>
&lt;p>The architecture is designed for future-proofing and scale. By leveraging event-driven scaling with KEDA and decoupled microservices via Dapr, the system is built to seamlessly absorb high-volume, global order loads as new processes are continuously migrated to the new platform.&lt;/p>
&lt;p>&lt;strong>Key Requirements:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Modern cloud-based infrastructure&lt;/li>
&lt;li>High reliability and scalability&lt;/li>
&lt;li>Maintainable and extensible&lt;/li>
&lt;li>Cost-effective operations&lt;/li>
&lt;/ul>
&lt;h3 id="architecture-overview">Architecture Overview&lt;/h3>
&lt;p>&lt;img src="./images/solutionArchitecture.svg" alt="Architecture">&lt;/p>
&lt;h4 id="data--storage-strategy">Data &amp;amp; Storage Strategy&lt;/h4>
&lt;p>The platform uses Azure-managed data services as backing stores:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>MSSQL&lt;/strong>: Transactional order data and relational schemas&lt;/li>
&lt;li>&lt;strong>Cosmos DB&lt;/strong>: Scaled state management and cross-region replication&lt;/li>
&lt;li>&lt;strong>Azure Blob Storage&lt;/strong>: Order documents and manufacturing files&lt;/li>
&lt;li>&lt;strong>Redis&lt;/strong>: Caching operations to improve latency and throughput&lt;/li>
&lt;/ul>
&lt;p>Dapr&amp;rsquo;s state abstraction layer is used for Cosmos DB, Azure Blob Storage, and Redis, decoupling microservices from those storage backends and enabling migrations without application-level changes. For Azure Blob Storage, we also use Dapr&amp;rsquo;s blob binding to interact with data, in addition to the state abstraction layer.&lt;/p>
&lt;h4 id="messaging--asynchronous-communication">Messaging &amp;amp; Asynchronous Communication&lt;/h4>
&lt;p>Azure Service Bus serves as the central message broker for asynchronous processes. Services publish and subscribe to topics via Dapr&amp;rsquo;s pub/sub building block, enabling loose coupling between applications. This event-driven approach provides resilience and allows each service to scale independently based on demand.&lt;/p>
&lt;h4 id="network--service-discovery">Network &amp;amp; Service Discovery&lt;/h4>
&lt;p>Services use Dapr&amp;rsquo;s service invocation building block instead of hardcoded endpoints, enabling resilience and the ability to replace or upgrade service implementations without changing callers. External traffic is routed to services via Ingress NGINX.&lt;/p>
&lt;h4 id="cicd--deployment">CI/CD &amp;amp; Deployment&lt;/h4>
&lt;p>Azure DevOps Pipelines automate building, testing, and deploying applications. We use a single, centralized Helm chart and store deployment configuration in Git as the single source of truth; the pipeline generates environment- and service-specific &lt;code>values.yaml&lt;/code> files and deploys each service as its own Helm release to Kubernetes.&lt;/p>
&lt;h2 id="can-you-expand-on-why-you-are-using-those-projectsservices">Can you expand on why you are using those projects/services?&lt;/h2>
&lt;p>We rely heavily on CNCF projects and open-source tooling to form the backbone of our platform:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Kubernetes (AKS)&lt;/strong> &lt;em>(Using since 2020)&lt;/em>: Hosts &amp;gt; 200 microservices supporting order fulfillment workflows. It provides the core compute platform for containerized services, offering a flexible model that supports multiple frameworks, programming languages, and dynamic scaling.&lt;/li>
&lt;li>&lt;strong>Dapr&lt;/strong> &lt;em>(Using since 2020)&lt;/em>: Provides common building blocks like service invocation, pub/sub, and state management across microservices. Dapr enables vendor-neutral capabilities, addressing service discovery and maintaining portability.&lt;/li>
&lt;li>&lt;strong>KEDA&lt;/strong> &lt;em>(Using since 2021/2022)&lt;/em>: Event-driven scaling based on Azure Service Bus queue depth and CPU/memory utilization. This allows the system to scale aggressively to match real-time demand while running economically during quieter periods.&lt;/li>
&lt;li>&lt;strong>Helm&lt;/strong>: Package management and templating. Charts are stored in Git, enabling reproducible deployments across environments since the project&amp;rsquo;s inception.&lt;/li>
&lt;li>&lt;strong>Ingress NGINX&lt;/strong> &lt;em>(currently in use, pending replacement – see Future Outlook)&lt;/em>: External traffic routing and load balancing.&lt;/li>
&lt;li>&lt;strong>OpenTelemetry Collector&lt;/strong> &lt;em>(Using since 2020)&lt;/em>: Provides consistent instrumentation and exports telemetry to multiple targets. It enables distributed tracing and metrics collection across microservices, ensuring observability and performance monitoring.&lt;/li>
&lt;/ul>
&lt;h2 id="what-has-worked-well">What has worked well?&lt;/h2>
&lt;p>Kubernetes, Helm, and KEDA have proven reliable and are widely used.&lt;/p>
&lt;p>&lt;strong>Scaling to Zero and Back:&lt;/strong>
We initially attempted to scale services to 0 replicas with KEDA to minimize costs, but this introduced operational challenges: delayed data flows during testing when pods needed to start up, and frequent scale churn during traffic pauses between messages. We learned that setting a minimum replica count for baseline load while scaling out for peaks was much more cost-effective and reliable for our specific workload patterns.&lt;/p>
&lt;p>&lt;strong>The Advantage of Abstraction:&lt;/strong>
A major architectural risk early on was building the entire system on Dapr (starting at pre-1.0 release 0.7.0). Early adoption carried organizational risk and we initially faced instability with actors under heavy load. Over time, those issues were fully resolved. The decision proved highly beneficial: Dapr’s maturity and vendor-neutral approach validated the initial decision, giving the platform extreme portability, flexibility, and saving custom boilerplate.&lt;/p>
&lt;p>&lt;strong>Platform Evolution:&lt;/strong>
Dapr is consistently evolving, allowing us to streamline our platform by replacing specific SDKs with built-in functionalities over time. For instance, we are transitioning from Azure App Configuration to Dapr&amp;rsquo;s Configuration Building Block. In hindsight, we would have standardized on CNCF native components sooner (e.g., migrating earlier to OpenTelemetry Collector and a CNCF ingress solution) to avoid replacing vendor-specific SDKs mid-project.&lt;/p>
&lt;p>&lt;strong>Data Ownership and Boundaries:&lt;/strong>
A critical lesson was the strict enforcement of data ownership. In a microservices architecture with over 200 services, we learned that clearly defining which service owns which data is non-negotiable. We found that any direct data access between services, bypassing their dedicated APIs, inevitably leads to tight coupling and maintenance challenges. Adhering to Domain-Driven Design (DDD) principles, where each service exposes its data only through a well-defined API, was essential for maintaining a scalable and evolvable system. This prevented a &amp;ldquo;distributed monolith&amp;rdquo; and ensured long-term architectural integrity.&lt;/p>
&lt;h2 id="what-sort-of-glue-have-you-had-to-develop">What sort of &amp;ldquo;glue&amp;rdquo; have you had to develop?&lt;/h2>
&lt;p>Since we had a greenfield start, we were not constrained by legacy endpoints or migration paths. However, managing over 200 microservices required strict boundaries and standardized communication patterns. We heavily utilized Domain-Driven Design (DDD) principles—specifically &lt;strong>Bounded Contexts&lt;/strong> to ensure each microservice owns its data and domain logic.&lt;/p>
&lt;p>To enforce these boundaries and standardize the &amp;ldquo;glue&amp;rdquo; between services, we developed:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Standardized Helm Templates&lt;/strong>: A unified set of Helm charts that abstract away the complexity of Kubernetes manifests and Dapr sidecar configuration. Developers provide application-specific KEDA &lt;code>ScaledObject&lt;/code> definitions and Dapr component definitions.&lt;/li>
&lt;li>&lt;strong>Common Libraries&lt;/strong>: While Dapr abstracts away many infrastructure concerns, we built thin, language-specific wrappers around the Dapr SDKs to enforce internal logging and error-handling standards.&lt;/li>
&lt;/ul>
&lt;h2 id="impact--results">Impact &amp;amp; Results&lt;/h2>
&lt;p>By adopting this cloud-native stack, we have built a highly scalable and future-ready order fulfillment system. A key driver of this success has been our extensive use of Dapr, which not only significantly reduced boilerplate code but also provided us with a high degree of vendor neutrality. This abstraction layer means we are not tightly coupled to specific cloud providers&amp;rsquo; SDKs, enabling an architecture that is portable, flexible, and robust enough for long-term growth.&lt;/p>
&lt;h2 id="whats-next-for-your-architecture">What&amp;rsquo;s next for your architecture?&lt;/h2>
&lt;p>We are constantly investigating how to run our services as efficiently and economically as possible. A near-term priority is replacing our existing Ingress NGINX setup. Because the Kubernetes project has &lt;a href="https://kubernetes.io/blog/2025/11/11/ingress-nginx-retirement/">officially announced the retirement of the ingress-nginx project&lt;/a>, we are actively evaluating alternatives—including NGINX Gateway Fabric, Envoy Gateway, and Traefik—while striving to preserve our routing behavior, TLS automation, and operational stability. Transitioning to the Gateway API is a key step in future-proofing our external traffic routing.&lt;/p>
&lt;h2 id="discussion">Discussion&lt;/h2>
&lt;p>End user members may participate in the &lt;a href="https://github.com/cncf/tab/discussions/135">discussion thread&lt;/a> for this architecture.&lt;/p></description></item><item><title>Architectures: End-to-End Cloud Native Telco Platform Automation at Swisscom</title><link>https://deploy-preview-36--cncfarchitecture.netlify.app/architectures/swisscom-cloud-native-telco/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-36--cncfarchitecture.netlify.app/architectures/swisscom-cloud-native-telco/</guid><description>
&lt;h2 id="relevant-projects">Relevant Projects&lt;/h2>
&lt;h3 id="cncf-projects">CNCF Projects&lt;/h3>
&lt;div class="row row-cols-1 row-cols-md-3 mb-4">
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Kubernetes
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/kubernetes/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/kubernetes/icon/color/kubernetes-icon-color.svg" alt="kubernetes logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2021&lt;/p>
&lt;p>The Kubernetes API is the database backend and control plane of the entire automation platform. It acts as the runtime for all CNFs, operators, and platform services. Custom Resource Definitions extend the API to cover telco-specific concerns like IPAM, DNS, and network function configuration.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Flux
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/flux/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/flux/icon/color/flux-icon-color.svg" alt="flux logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2022&lt;/p>
&lt;p>Flux is the GitOps engine for continuous reconciliation. It monitors Git repositories and synchronizes all desired state — CNF deployment manifests, Custom Resources, DNS endpoints, certificate requests, IP claims, and test definitions — into Kubernetes clusters.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
cert-manager
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/cert-manager/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/cert-manager/icon/color/cert-manager-icon-color.svg" alt="cert-manager logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2023&lt;/p>
&lt;p>Automated certificate lifecycle management integrated with Swisscom&amp;rsquo;s internal PKI. Certificate requests are expressed as Kubernetes CRs, reconciled by Flux, and managed by cert-manager. Private keys never leave the cluster.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Headlamp
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/headlamp/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/headlamp/icon/color/headlamp-icon-color.svg" alt="headlamp logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2025&lt;/p>
&lt;p>Kubernetes dashboard for the management cluster, providing cluster visibility, RBAC-based access control, a CRD documentation browser, and extensible plugin system. Swisscom is listed as an official Headlamp adopter.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
SDC (Schema Driven Configuration)
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://docs.sdcio.dev/">&lt;img src="https://landscape.cncf.io/logos/c5f5fbc1c0b595d28bcfc1f443d46b7c0e4aa4c0dc9f239b0e0fa90ca3a4fda4.svg" alt="sdc logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2024&lt;/p>
&lt;p>Used as the Config Sync Operator to push assembled configurations to CNFs. SDC enables vendor-agnostic, declarative configuration management using YANG schemas and NETCONF/gNMI protocols. Swisscom adopted SDC as its strategic configuration management solution and actively contributes features including config blame, drift detection, validation, testing compatibility with CNFs, and NETCONF Actions support. Swisscom is listed as an official SDC adopter.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
CoreDNS
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/coredns/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/coredns/icon/color/coredns-icon-color.svg" alt="coredns logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2021&lt;/p>
&lt;p>In-cluster DNS service discovery for Kubernetes services. Also used with conditional forwarding to route queries for private 5G zones (e.g., 3gppnetwork.org) to the authoritative PowerDNS servers.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
ExternalDNS
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://kubernetes-sigs.github.io/external-dns/latest/">&lt;img src="https://kubernetes-sigs.github.io/external-dns/latest/docs/img/external-dns.png" alt="externaldns logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2023&lt;/p>
&lt;p>Kubernetes-native automation of DNS records in PowerDNS using Custom Resources and annotations.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
MetalLB
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/metallb/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/metallb/icon/color/metallb-icon-color.svg" alt="metallb logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2022&lt;/p>
&lt;p>Load balancer for bare-metal Kubernetes clusters. MetalLB IP address pools are managed via KRM, with IP addresses dynamically allocated from NetBox via the NetBox Operator.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Kubebuilder / controller-runtime
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://github.com/kubernetes-sigs/kubebuilder">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/kubernetes/icon/color/kubernetes-icon-color.svg" alt="kubernetes logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2022&lt;/p>
&lt;p>Scaffolding framework and libraries for building custom Kubernetes operators. Used to build all domain-specific operators for CNF configuration abstraction, IPAM integration, config synchronization, and DNS automation.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h3 id="other-projects">Other Projects&lt;/h3>
&lt;div class="row row-cols-1 row-cols-md-3 mb-4">
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
PowerDNS
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.powerdns.com">&lt;img src="https://upload.wikimedia.org/wikipedia/commons/9/9e/Logo_of_PowerDNS.svg" alt="powerdns logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2023&lt;/p>
&lt;p>Authoritative DNS server supporting automation of advanced resource records (NAPTR, SRV) required for 5G/SIP via ExternalDNS.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
NetBox Operator
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://github.com/netbox-community/netbox-operator">&lt;img src="https://raw.githubusercontent.com/netbox-community/netbox/main/docs/netbox_logo_light.svg" alt="netbox logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2024&lt;/p>
&lt;p>Kubernetes operator for IPAM integration, open-sourced by Swisscom. Brings IPAM into the Kubernetes API with a claim model inspired by PersistentVolumeClaims — dynamically allocating IP prefixes and addresses from NetBox, managing their lifecycle through Kubernetes garbage collection, and supporting sticky IPs for disaster recovery.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
NetBox
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://github.com/netbox-community/netbox">&lt;img src="https://raw.githubusercontent.com/netbox-community/netbox/main/docs/netbox_logo_light.svg" alt="netbox logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Using since:&lt;/strong> 2023&lt;/p>
&lt;p>IP Address Management (IPAM) and network infrastructure modeling. Used as the IPAM backend for dynamic IP allocation across all CNFs and platform services.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="tldr-or-synopsis">TL;DR or Synopsis&lt;/h2>
&lt;p>Swisscom has built a cloud native telco platform for the end-to-end automation of its 5G standalone core network and cross-domain resource orchestration. The architecture replaces traditional imperative network management (Jenkins pipelines, Ansible playbooks) with a fully declarative, Kubernetes-native automation model driven by GitOps and the Kubernetes Resource Model (KRM).&lt;/p>
&lt;p>A mobile core development environment contains approximately 2,000 pods with over 5,000 interdependent configuration parameters across Cloud-Native Network Functions (CNFs) such as UPF, SMF, AMF, UDM, UDR, BSF, NRF, NSSF, and AUSF. Engineers express high-level intents as Kubernetes Custom Resources; custom operators dynamically assemble full configurations at runtime — fetching IP addresses from IPAM, secrets from Vault, certificates from PKI, and infrastructure details from the cluster.&lt;/p>
&lt;p>While the 5G core is the primary domain, the orchestration framework extends across multiple network domains and infrastructure services, applying the same intent-based automation patterns consistently.&lt;/p>
&lt;h2 id="organisation">Organisation&lt;/h2>
&lt;p>Swisscom is the leading Telecommunications/ISP and ICT company and offers mobile, Internet and TV products, as well as comprehensive IT and digital services to private and business customers.
Swisscom&amp;rsquo;s expertise in cloud native technologies is well-established, as evidenced by its status as a former Gold member and Management Board member of the Cloud Foundry Foundation, along with its certification for Cloud Foundry.
Additionally, Swisscom demonstrates a strong commitment to the Open-Source community, having been a CNCF Silver Member for several years and serving as a Kubernetes Certified Service Provider (KCSP) partner.
Our skilled employees have delivered numerous talks and presentations at prestigious events such as KubeCon, Cloud Native Zürich, Swiss Cloud Native Day, KCD Suisse Romande, ContainerDays.&lt;/p>
&lt;p>The company has embarked on a strategic transformation from a traditional telecom operator (&amp;ldquo;Telco&amp;rdquo;) to a technology company (&amp;ldquo;TechCo&amp;rdquo;) with 5G as a central driver.
Swisscom operates an extensive 5G Non-Standalone (NSA) network covering 99% of the Swiss population. The cloud native platform described here powers the 5G Standalone (SA) core.&lt;/p>
&lt;h2 id="teams">Teams&lt;/h2>
&lt;p>Multiple teams collaborate on this platform:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Cloud Native Resource Orchestration&lt;/strong> — creates a robust framework for orchestrating cloud-native resources such as CNFs, IPAM, Networks, DNS, Kubernetes Clusters, and more. Designs and operates GitOps pipelines, builds Kubernetes operators, and develops the management cluster UI/UX.&lt;/li>
&lt;li>&lt;strong>Mobile Cloud Native Engineering&lt;/strong> — designs, implements, and operates the cloud native 5G core platform, including GitOps pipelines, Kubernetes operators, and network function lifecycle management.&lt;/li>
&lt;li>&lt;strong>DNS Engineering&lt;/strong> — builds and operates the highly reliable cloud native DNS service underpinning the 5G core and other infrastructures.&lt;/li>
&lt;li>&lt;strong>Network Engineering&lt;/strong> — provides IPAM and Network-as-a-Service.&lt;/li>
&lt;li>&lt;strong>Platform &amp;amp; Developer Experience&lt;/strong> — manages Kubernetes clusters and builds developer tooling.&lt;/li>
&lt;/ul>
&lt;h2 id="architecture-overview--goals">Architecture overview &amp;amp; Goals&lt;/h2>
&lt;h3 id="goals">Goals&lt;/h3>
&lt;ol>
&lt;li>&lt;strong>Full GitOps for the 5G Core&lt;/strong> — Extend GitOps beyond CNF deployment to include network function configuration, certificate management, DNS record provisioning, IP address management, and testing — achieving continuous reconciliation across all layers.&lt;/li>
&lt;li>&lt;strong>Declarative, Intent-Based Configuration&lt;/strong> — Replace static, low-level configuration manifests with abstract, intent-driven Custom Resources. Engineers specify &lt;em>what&lt;/em> they want using a high level intent (e.g., &amp;ldquo;this CNF needs an IP address from a subnet in network zone A&amp;rdquo;) rather than &lt;em>how&lt;/em> to achieve it, with Kubernetes operators dynamically assembling configurations at runtime.&lt;/li>
&lt;li>&lt;strong>Automated CD&lt;/strong> — High level of automation for telco deployment rollouts. This includes rethinking Change Processes as well as building solid CI/CD/CT pipelines to ensure a highly reliable network.&lt;/li>
&lt;li>&lt;strong>In-Band with Kubernetes&lt;/strong> — Bring all automation in-band with the Kubernetes API, eliminating out-of-band tools like Jenkins pipelines and Ansible playbooks. This ensures that the Kubernetes orchestrator has full visibility and control over all resources, enabling self-healing and reconciliation.&lt;/li>
&lt;li>&lt;strong>Cloud Native DNS Service&lt;/strong> — Operate a highly reliable, geo-redundant, on-premises DNS service for the 5G core using open-source technologies (CoreDNS, PowerDNS, ExternalDNS), fully automated via GitOps and Kubernetes Custom Resources.&lt;/li>
&lt;li>&lt;strong>Contribute to the Ecosystem and Shape the Industry Discussion&lt;/strong> — Open-source key components built or contributed to during this journey (NetBox Operator, SDC, demo code) to enable other organizations to adopt similar patterns. Contribute to Meetups and Conferences in order to achieve broader success of Cloud Native adoption in the Telco Community.&lt;/li>
&lt;/ol>
&lt;h3 id="architecture-overview">Architecture overview&lt;/h3>
&lt;p>The platform is organized in three layers:&lt;/p>
&lt;p>&lt;img src="./images/swisscom-cloud-native-telco-automation-layers.svg" alt="Cloud Native Telco Automation Layers">&lt;/p>
&lt;p>The &lt;strong>Intent Layer&lt;/strong> stores high-level desired state in Git — engineers define &lt;em>what&lt;/em> they want using concise Custom Resources (e.g., a DNN configuration with hostname, region, and SNSSAI).&lt;/p>
&lt;p>The &lt;strong>Automation Layer&lt;/strong> runs on Kubernetes and continuously reconciles. Flux pulls intents from Git. Custom operators dynamically assemble full configurations by fetching IP addresses from NetBox (via the NetBox Operator) and creating connectivity in a Network-as-a-Service platform. It then pushes the KRM formatted Runtime Configuration to a Git repository for the Runtime layer to consume.&lt;/p>
&lt;p>The &lt;strong>Runtime Layer&lt;/strong> hosts the 5G core CNFs and supporting services. Flux pulls intents from Git. SDC pushes the assembled configuration to CNFs via NETCONF/gNMI. MetalLB, cert-manager, External Secrets Operator, ExternalDNS are used to configure the Workload cluster.&lt;/p>
&lt;p>&lt;img src="./images/swisscom-cloud-native-telco-automation-architecture-overview.svg" alt="Cloud Native Telco Automation Architecture Overview">&lt;/p>
&lt;h3 id="key-design-principles">Key Design Principles&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>GitOps + KRM&lt;/strong>: Git stores high-level intents; Kubernetes manages dynamic, low-level configuration assembly. This is a shared source of truth across Git and Kubernetes.&lt;/li>
&lt;li>&lt;strong>Continuous Reconciliation&lt;/strong>: Every aspect of the system is continuously reconciled against the desired state — following the four OpenGitOps principles.&lt;/li>
&lt;li>&lt;strong>Abstraction over Complexity&lt;/strong>: Engineers work with simple, high-level intents; operators handle the complex assembly.&lt;/li>
&lt;/ul>
&lt;h2 id="can-you-expand-on-why-you-are-using-those-projectsservices">Can you expand on why you are using those projects/services?&lt;/h2>
&lt;h3 id="from-gitops-to-krm">From GitOps to KRM&lt;/h3>
&lt;p>Standard GitOps tools (Flux, Argo CD) combined with Helm/Kustomize have limitations for complex telco use cases: they cannot use live Kubernetes resources as inputs during rendering, cannot invoke custom business logic during template processing, and cannot dynamically assemble configurations from multiple sources. By extending GitOps with the Kubernetes Resource Model (KRM) — Custom Resource Definitions, Custom Resources, and custom Operators — the platform achieves dynamic configuration assembly at runtime.&lt;/p>
&lt;h3 id="configuration-abstraction--dynamic-assembly">Configuration Abstraction &amp;amp; Dynamic Assembly&lt;/h3>
&lt;p>A typical 5G core configuration includes IP addresses, VLAN IDs, DNS records, NF variables, secret references, and certificate references. Previously, engineers had to know all values upfront and embed them statically. The new intent-based model inverts this. The following is an example of a DNN configuration in pseudo-yaml-code.&lt;/p>
&lt;p>On the intent layer, only a very stripped-down KRM manifest exists:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">telco.swisscom.com/v1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Dnn&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">hostname&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;gprs.swisscom.com&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ipv4&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">region&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ch-east&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">type&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">MobileInternet&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">snssai&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">10&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This KRM manifest is stored in git and synced to the Management cluster using Flux. From this, the Operators in the automation layer create intermediate resources, in this case an IP Address via NetBox:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">netbox.dev/v1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">IpAddressClaim&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">parentPrefixSelector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">region&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ch-east&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from Dnn.spec.region&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">family&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;IPv4&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from Dnn.spec.ipv4&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">status&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ipAddress&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1.2.3.4&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Automation Layer creates the following low level resources for the Runtime Layer:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">config.sdcio.dev/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Config&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">labels&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">config.sdcio.dev/targetName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ch-east &lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from Dnn.spec.region&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">config.sdcio.dev/targetNamespace&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">default&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">priority&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">10&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">config&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">path&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">/&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">value&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">dnn&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;gprs.swisscom.com&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from Dnn.spec.hostname&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ip&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1.2.3.4&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from IpAddressClaim.status.ipAddress&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">snssai&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">10&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from Dnn.spec.snssai&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">type&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">MobileInternet &lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from Dnn.spec.type&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">---&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">externaldns.k8s.io/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">DNSEndpoint&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">endpoints&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">dnsName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;gprs.swisscom.com&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from Dnn.spec.hostname&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">recordType&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">A&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">targets&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#0000cf;font-weight:bold">1.2.3.4&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#8f5902;font-style:italic"># from IpAddressClaim.status.ipAddress&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>SDC will now sync the configuration to the 5G CNF and ExternalDNS will create the DNS records in the authoritative PowerDNS backend.&lt;/p>
&lt;h2 id="what-has-worked-well">What has worked well?&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Intent-based configuration&lt;/strong> dramatically reduced the complexity engineers face. Instead of managing thousands of interdependent parameters, they work with concise Custom Resources.&lt;/li>
&lt;li>&lt;strong>Full GitOps reconciliation&lt;/strong> across all layers (deployment, configuration, DNS, certificates, IPAM), configuration drift is detected and reverted to ensure consistency.&lt;/li>
&lt;li>&lt;strong>Custom Kubernetes Operators&lt;/strong> (built with Kubebuilder/controller-runtime) proved to be the right pattern for telco domain-specific concerns, providing full reconciliation support and native KRM integration.&lt;/li>
&lt;li>&lt;strong>The claim model for IPAM&lt;/strong> (NetBox Operator) elegantly solved dynamic IP allocation by following established Kubernetes patterns (PVC analogy).&lt;/li>
&lt;li>&lt;strong>Bringing all automation in-band with Kubernetes&lt;/strong> gave the orchestrator full visibility and control, enabling self-healing and eliminating the brittleness of out-of-band tools.&lt;/li>
&lt;li>&lt;strong>DNS resilience engineering&lt;/strong> — dedicated hackathons, chaos testing, and disaster recovery playbooks significantly improved DNS service reliability.&lt;/li>
&lt;li>&lt;strong>Cross-team collaboration&lt;/strong> on a shared platform and KRM patterns accelerated adoption across multiple network domains.&lt;/li>
&lt;/ul>
&lt;h2 id="what-has-not-worked-well">What has not worked well?&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>NETCONF as a configuration protocol&lt;/strong> introduces complexity — it requires SDC as an intermediary and prevents fully Kubernetes-native configuration. Ideally, CNF vendors would support native K8s APIs using CRs/CRDs or Secrets/ConfigMaps.&lt;/li>
&lt;li>&lt;strong>Tooling gap for KRM-based configuration assembly&lt;/strong> — no mature, community-standard Kubernetes-native tool exists for dynamic configuration hydration. Swisscom had to build custom operators to fill this gap.&lt;/li>
&lt;li>&lt;strong>GitOps+KRM auditability trade-off&lt;/strong> — with dynamically assembled configurations, not all state is visible in Git history. The team continues to explore automated intermediary Git layers.&lt;/li>
&lt;li>&lt;strong>Cumbersome vendor configuration manifests&lt;/strong> — large, monolithic configuration files from CNF vendors (with ~5,000 interdependent parameters) required significant effort to decompose into intent-based abstractions.&lt;/li>
&lt;li>&lt;strong>Telco’s imperative model and Kubernetes’ declarative approach do not align well&lt;/strong> - SDC follows the declarative paradigm, where users define the desired state and SDC determines the actions to achieve it. In contrast, NETCONF/gNMI use an imperative model that requires explicit ordered steps (“do A, then B, then C”). Translating declarative goals into imperative sequences is complex when user‑defined ordering matters, such as for firewall rules where evaluation order affects behaviour. Example: &lt;a href="https://github.com/sdcio/data-server/issues/394">Issue &amp;ldquo;Support user sorted lists&amp;rdquo;&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="what-sort-of-glue-have-you-had-to-develop">What sort of &amp;ldquo;glue&amp;rdquo; have you had to develop?&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Custom Kubernetes Operators&lt;/strong> — domain-specific operators for CNF configuration abstraction, config synchronization, IPAM integration, and DNS automation, all scaffolded with Kubebuilder and controller-runtime.&lt;/li>
&lt;li>&lt;strong>Configuration hydration logic&lt;/strong> — the CNF Config Operator dynamically assembles full configurations from multiple sources (NetBox, Vault, cluster environment) based on high-level intents.&lt;/li>
&lt;li>&lt;strong>SDC contributions&lt;/strong> — &lt;a href="https://github.com/search?q=org%3Asdcio+author%3Aalexandernorth&amp;amp;type=pullrequests">significant development work on SDC&lt;/a> including early testing of CNF compatibility, configuration validation, monitoring, config blame, drift detection, and NETCONF Actions support.&lt;/li>
&lt;li>&lt;strong>ExternalDNS NAPTR support&lt;/strong> — contributed &lt;a href="https://github.com/kubernetes-sigs/external-dns/pull/4212">PR #4212&lt;/a> to enable NAPTR record support for SIP phone calls.&lt;/li>
&lt;li>&lt;strong>Resilient DNS architecture&lt;/strong> — created a reference architecture and open sourced on &lt;a href="https://github.com/swisscom/cloud-native-telco/tree/main/prototypes/dns">GitHub&lt;/a>.&lt;/li>
&lt;li>&lt;strong>Headlamp plugins&lt;/strong> — &lt;a href="https://github.com/kubernetes-sigs/headlamp/pulls?q=is%3Apr+author%3Afaebr+">Custom Resource plugin&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="how-did-the-architecture-evolve">How did the Architecture Evolve&lt;/h2>
&lt;h3 id="journey">Journey&lt;/h3>
&lt;p>The architecture evolved significantly from traditional imperative automation to the current declarative, KRM-based model:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Phase 1 — Ansible + Jenkins&lt;/strong>: Initial automation used Ansible playbooks triggered by Jenkins pipelines. Configuration was fire-and-forget with no continuous reconciliation.&lt;/li>
&lt;li>&lt;strong>Phase 2 — GitOps for deployment&lt;/strong>: Introduced Flux for CNF deployment, but configuration remained out-of-band via Ansible/NETCONF.&lt;/li>
&lt;li>&lt;strong>Phase 3 — Full GitOps + KRM&lt;/strong>: Extended GitOps to cover configuration, DNS, IPAM, certificates, and testing. Built custom operators and adopted SDC for config synchronization. Achieved continuous reconciliation across all layers.&lt;/li>
&lt;/ol>
&lt;h3 id="key-lessons">Key lessons&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>De facto GitOps for operators is not true GitOps&lt;/strong> — creating Helm releases in Git while configuring NFs via NETCONF out-of-band breaks the GitOps model. Bringing configuration into the Kubernetes API was essential.&lt;/li>
&lt;li>&lt;strong>Bringing everything in-band with Kubernetes&lt;/strong> enables self-healing, reconciliation, and eliminates the brittleness of out-of-band tools.&lt;/li>
&lt;li>&lt;strong>Git as the &lt;em>only&lt;/em> source of truth is insufficient&lt;/strong> — the shared source of truth model (Git for intents, Kubernetes for dynamic state) was a deliberate and necessary evolution.&lt;/li>
&lt;li>&lt;strong>Abstraction is critical&lt;/strong> — engineers cannot effectively manage 5,000+ parameters directly. Intent-based CRs with dynamic assembly significantly reduced cognitive load and errors.&lt;/li>
&lt;li>&lt;strong>Custom Kubernetes Operators&lt;/strong> are the right pattern for domain-specific concerns that existing tools cannot address.&lt;/li>
&lt;li>&lt;strong>Contribute upstream&lt;/strong> — local patches create long-term maintenance burden. Swisscom prioritizes upstream contributions (ExternalDNS, SDC, NetBox Operator) for sustainability.&lt;/li>
&lt;/ul>
&lt;h3 id="whats-next-for-your-architecture">What&amp;rsquo;s next for your architecture?&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Mature SDC Integration&lt;/strong> — Continue expanding SDC for full lifecycle management with continuous reconciliation via gNMI and NETCONF, including completion of NETCONF Actions support.&lt;/li>
&lt;li>&lt;strong>Eliminate NETCONF Dependency&lt;/strong> — Work with CNF vendors to move toward fully Kubernetes-native configuration APIs, reducing reliance on legacy telco protocols.&lt;/li>
&lt;li>&lt;strong>Advanced Dynamic Configuration Assembly&lt;/strong> — Develop more sophisticated Kubernetes operators for multi-source configuration hydration, enabling even more complex intent-based workflows across multiple network domains.&lt;/li>
&lt;li>&lt;strong>Multi-Cluster &amp;amp; Edge Expansion&lt;/strong> — Scale the architecture to additional edge locations and Kubernetes clusters while maintaining consistent GitOps-driven automation.&lt;/li>
&lt;li>&lt;strong>Community Tooling for KRM&lt;/strong> — Contribute toward a mature, Kubernetes-native tool for dynamic configuration assembly that the wider cloud native community can adopt, addressing the current gap in tooling identified during the project.&lt;/li>
&lt;li>&lt;strong>Resilience &amp;amp; Reliability&lt;/strong> — Ongoing improvements to cross-cluster redundancy, disaster recovery playbooks, chaos testing framework, and enhanced monitoring/alerting.&lt;/li>
&lt;li>&lt;strong>Observability &amp;amp; AIOps&lt;/strong> — Integrate AI-driven operations capabilities leveraging the rich telemetry data from the platform&amp;rsquo;s monitoring stack.&lt;/li>
&lt;li>&lt;strong>Cross-Domain Expansion&lt;/strong> — Extend the orchestration framework to additional network domains and infrastructure services beyond the 5G core, applying the same intent-based automation patterns consistently.&lt;/li>
&lt;/ul>
&lt;h2 id="community-contributions">Community Contributions&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Contribution&lt;/th>
&lt;th>Details&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>NetBox Operator&lt;/strong>&lt;/td>
&lt;td>Open-sourced under &lt;a href="https://github.com/netbox-community/netbox-operator">https://github.com/netbox-community/netbox-operator&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>SDC Contributions&lt;/strong>&lt;/td>
&lt;td>Active contributor to the &lt;a href="https://docs.sdcio.dev/">SDC project&lt;/a> (on its path to CNCF incubation)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>KRM Demo Code&lt;/strong>&lt;/td>
&lt;td>&lt;a href="https://github.com/swisscom/containerdays-2024-krm">https://github.com/swisscom/containerdays-2024-krm&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Conference Talks&lt;/strong>&lt;/td>
&lt;td>&lt;a href="https://github.com/swisscom/cloud-native-telco/">KubeCon EU, ContainerDays, Open Source Summit EU&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>CNCF/LFN Whitepaper&lt;/strong>&lt;/td>
&lt;td>Co-authored &lt;a href="https://github.com/lfn-cnti/bestpractices/blob/main/doc/whitepaper/Accelerating_Cloud_Native_in_Telco.md">Accelerating Cloud Native in Telco&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="discussion">Discussion&lt;/h2>
&lt;p>End user members may participate in the &lt;a href="https://github.com/cncf/tab/discussions/136">discussion thread&lt;/a> for this architecture.&lt;/p></description></item><item><title>Architectures: A modern and sovereign Private Cloud «Kubernetes Service» for Swiss-based enterprises.</title><link>https://deploy-preview-36--cncfarchitecture.netlify.app/architectures/swisscom-kubernetes-service/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-36--cncfarchitecture.netlify.app/architectures/swisscom-kubernetes-service/</guid><description>
&lt;h2 id="relevant-cncf-projects">Relevant CNCF projects&lt;/h2>
&lt;div class="row row-cols-1 row-cols-md-3 mb-4">
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Kubernetes
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/kubernetes/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/kubernetes/icon/color/kubernetes-icon-color.svg" alt="kubernetes logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> 1.32.8 (CNIP)&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> 1.31.x - 1.34.x (SKP)&lt;/li>
&lt;/ul>
&lt;p>Kubernetes enables high availability, scalability, and performance for infrastructure, offering a centralized and policy-driven platform to manage network and service data supporting Managed Kubernetes for our cloud customers.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
KubeVirt
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/kubevirt/">&lt;img src="https://github.com/cncf/artwork/raw/main/projects/kubevirt/horizontal/color/kubevirt-horizontal-color.svg" alt="kubevirt logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v1.5.0 (CNIP)&lt;/li>
&lt;/ul>
&lt;p>Cluster resources are constructed using KubeVirt for virtual machine abstraction of Control Plane and Worker instances.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Kube-OVN
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/kube-ovn/">&lt;img src="https://github.com/cncf/artwork/raw/main/projects/kube-ovn/horizontal/color/kube-ovn-horizontal-color.svg" alt="kube-ovn logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v1.13.14 (CNIP)&lt;/li>
&lt;/ul>
&lt;p>Kube-OVN is utilized as network stack of the infrastructure cluster to enable intra-cluster/east-west network communication of user clusters. It enables a policy-driven security model as well as customer network isolation using VPCs.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
MetalLB
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/metallb/">&lt;img src="https://github.com/cncf/artwork/raw/main/projects/metallb/horizontal/color/metallb-horizontal-color.svg" alt="metallb logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v0.15.3&lt;/li>
&lt;/ul>
&lt;p>MetalLB is an integral component of the infrastructure deployment process, offering automated access to the framework that provisions individual user cluster resources on bare metal Kubernetes environments.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Container Storage Interface (CSI)
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://github.com/container-storage-interface">&lt;img src="https://github.com/cncf/artwork/raw/main/other/csi/horizontal/color/csi-horizontal-color.svg" alt="csi logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v25.06.3 (trident-csi)&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v0.4.5 (kubevirt-csi)&lt;/li>
&lt;/ul>
&lt;p>Kubevirt-CSI is the standard storage interface for persistent volumes in user clusters. Trident-CSI manages NetApp storage requests and can also be used directly to integrate with Swisscom&amp;rsquo;s File Service Kubernetes, which provides iSCSI and NFS shared storage across all Availability Zones.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Kyverno
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/kyverno/">&lt;img src="https://github.com/cncf/artwork/raw/main/projects/kyverno/horizontal/color/kyverno-horizontal-color.svg" alt="kyverno logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v1.13.4 (CNIP)&lt;/li>
&lt;/ul>
&lt;p>Kyverno serves as the default policy engine for infrastructure and user clusters, providing robust security constraints.
In addition to Kyverno, also Chainsaw (a Kyverno sub-project) is used for automated, declarative e2e testing.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
ArgoCD
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/argo/">&lt;img src="https://github.com/cncf/artwork/raw/main/projects/argo/horizontal/color/argo-horizontal-color.svg" alt="argo logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v3.2.0 (CNIP)&lt;/li>
&lt;/ul>
&lt;p>ArgoCD allows us to deliver comprehensive infrastructure using a fully automated GitOps methodology.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Helm
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/helm/">&lt;img src="https://github.com/cncf/artwork/raw/main/projects/helm/horizontal/color/helm-horizontal-color.svg" alt="helm logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v3.5.1 (CNIP)&lt;/li>
&lt;/ul>
&lt;p>Helm automates the creation, packaging, configuration, and deployment of Kubernetes applications by creating reusable charts.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
CloudNativePG
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/cloudnativepg/">&lt;img src="https://landscape.cncf.io/logos/d795f87b2810954c88802c0b4bd6b3eee5a840c32cbee7276b25831cfb09e1cd.svg" alt="cnpg logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2024&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v1.27.0 (CNIP)&lt;/li>
&lt;/ul>
&lt;p>CloudNativePG (CNPG) manages PostgreSQL databases in cloud-native environments. It handles the full lifecycle of highly available PostgreSQL clusters (primary/standby with native streaming replication), including declarative deployment, scaling, backups, self-healing, failover and monitoring.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="describe-your-organisation">Describe your organisation&lt;/h2>
&lt;p>Swisscom is the leading ICT company in Switzerland and offers mobile, Internet and TV, as well as comprehensive IT and digital services to private and business customers.
Swisscom&amp;rsquo;s expertise in cloud native technologies is well-established, as evidenced by its status as a former Gold member and Management Board member of the Cloud Foundry Foundation, along with its certification for Cloud Foundry.
Additionally, Swisscom demonstrates a strong commitment to the Open-Source community, having been a CNCF Silver Member for several years and serving as a Kubernetes Certified Service Provider (KCSP) partner.
Our skilled employees have delivered numerous speeches and presentations at prestigious events such as KubeCon, Cloud Native Zürich, Swiss Cloud Native Day, KCD Suisse Romande, ContainerDays, among others.&lt;/p>
&lt;p>Our next generation Private Cloud Container as a Service offering «Kubernetes Service» for the B2B market addresses customer’s need for scalable and highly available Kubernetes workload as a flexible and secure IT foundation.
It is part of our Swiss-based Enterprise Service Cloud (ESC) market channel as a sovereign, Private Cloud Kubernetes offering for effortless provisioning and usage of our customer’s container workloads.&lt;/p>
&lt;h2 id="describe-your-entity-andor-team">Describe your entity and/or team&lt;/h2>
&lt;p>The development and delivery of the new «Kubernetes Service» is done at within Swisscom&amp;rsquo;s IT-Clouds Value Stream and shared across two teams:&lt;/p>
&lt;ul>
&lt;li>Pathfinders: responsible for the Cloud Native Infrastructure Platform (CNIP).
CNIP handles the creation, delivery, and lifecycle management of the KubeVirt-based virtual machines (VMs). These VMs function as nodes for both the Control Plane and Workers. The VMs are ephemeral and can be re-created immediately in case of any failure. They are solely used to enable container-based workloads and do not act as standalone VMs.&lt;/li>
&lt;li>Guardians: responsible for the Swisscom Kubernetes Platform (SKP), which runs on top of CNIP.
It consists of the installation of Kubermatic Kubernetes Platform (KKP) for the customer tenant (environment) and the setup and support of the highly available Control Plane for any customer (user) cluster.&lt;/li>
&lt;/ul>
&lt;p>The layered approach allows Swisscom to manage technological aspects distinctly by segregating the cloud native infrastructure (managed by the Pathfinders team) from the Kubernetes platform (managed by the Guardians team).
This strategy ensures considerable flexibility, permitting each layer to be combined or integrated with other technologies in the future.&lt;/p>
&lt;p>&lt;img src="./images/kubernetes-service-team-deliverables.png" alt="Kubernetes Service is a combination of CNIP &amp;amp; SKP deliverables">&lt;/p>
&lt;h2 id="brief-overview-of-your-architecture-and-any-potential-goals-you-are-trying-to-achieve-with-it">Brief overview of your architecture and any potential goals you are trying to achieve with it?&lt;/h2>
&lt;h3 id="summary">Summary&lt;/h3>
&lt;p>Kubernetes Service is the successor to our current container offering, representing a significant shift towards a more cloud-native approach using advanced Open-Source technology.
Currently bound to a vendor-specific implementation, Swisscom has opted to employ open-source tools for the development of cloud native products for customer use. This strategy aims to minimize dependencies and mitigate the risk of vendor lock-ins.&lt;/p>
&lt;p>By adopting this architecture, Swisscom can uphold quality within the cloud native domain while maintaining a competitive pricing model due to reduced reliance on external licensing and subscription models.
Furthermore, having the ability to develop, maintain, and operate all components internally enhances our decision-making processes and strengthens our roadmap capabilities.&lt;/p>
&lt;p>Another important point is that our customers&amp;rsquo; data will always remain within Switzerland and under Swiss law. Since we fully own the platform and do not rely on any external vendors, we can confidently guarantee true data sovereignty, hosted entirely on our premises without relying on vague marketing claims. Additionally, because Swisscom is not subject to the US Cloud Act or similar foreign regulations, no non-Swiss legislation can access the data.&lt;/p>
&lt;h3 id="brief-overview-of-architecture">Brief overview of architecture&lt;/h3>
&lt;p>A simplified high-level diagram describes Kubernetes Service, including multi-tenancy and security aspects:&lt;/p>
&lt;p>&lt;img src="./images/kubernetes-service-central-infra.png" alt="Central Kubernetes Infra Cluster is used to provide customer environments/tenants based on consolidated infrastructure">&lt;/p>
&lt;p>As illustrated in the figure, two separate and independent user tenants, BLUE and RED, are established on shared resources (depicted in yellow), managed by the Kubernetes Infrastructure Cluster. The foundation for all virtual abstractions is the Consolidated Infrastructure (COI) in Swisscom’s data centers.&lt;/p>
&lt;p>Each customer-specific environment comprises a management zone (MGMT Zone) and a workload zone.
These zones address shared responsibilities, where Swisscom provides the Control Plane for each customer&amp;rsquo;s environment (illustrated in blue and orange in the next figure).&lt;/p>
&lt;p>Customers have the flexibility to deploy workloads within the workload zone independently of the management resources as required.
Furthermore, each customer is able to maintain multiple environments. This provides an alternative method for segregating workloads at the tenant level instead of the Kubernetes cluster level, thereby ensuring comprehensive isolation from the outset.&lt;/p>
&lt;p>&lt;img src="./images/kubernetes-service-isolated-envs.png" alt="Each customer environment is isolated and comprises a management zone and workload zone">&lt;/p>
&lt;h3 id="goals-and-objectives">Goals and objectives&lt;/h3>
&lt;p>One of the primary objectives of the product refresh is to offer more desired features to customers.
Compared to the current offering, enhancements include:&lt;/p>
&lt;ul>
&lt;li>Upstream Kubernetes versions with faster updates&lt;/li>
&lt;li>Node Autoscaling&lt;/li>
&lt;li>Integrated Backup functionalities&lt;/li>
&lt;li>Native Kubernetes Load Balancer&lt;/li>
&lt;li>Modern customer self-service portal&lt;/li>
&lt;li>Additional Kubernetes add-ons available via Application Catalog&lt;/li>
&lt;/ul>
&lt;p>Moreover, additional options are directly available to our customers:&lt;/p>
&lt;ul>
&lt;li>Choose from different Container Network Interfaces (CNI)&lt;/li>
&lt;li>Access persistent storage through kubevirt-csi&lt;/li>
&lt;/ul>
&lt;p>With KubeVirt providing abstraction, KVM is employed as the hypervisor on bare-metal servers. From the customer&amp;rsquo;s perspective (Customer X), the administrator of their user cluster manages all selections and abstractions shown in the figure below, enabling customers to make independent decisions, e.g. choosing a default CNI from the available options (Cilium, Canal, None).&lt;/p>
&lt;p>&lt;img src="./images/kubernetes-service-ingredients.png" alt="Ingredients of Kubernetes Service and abstraction towards user/customer">&lt;/p>
&lt;p>In addition to technical improvements, we aimed to minimise reliance on external vendors and build a truly sovereign cloud solution that can compete with Public Cloud offerings, free from outside service dependencies. Our goal is for customers to run their Kubernetes workloads in our sovereign ESC Cloud, providing a comprehensive alternative to US hyperscalers - in terms of functionality and, most importantly, data privacy.&lt;/p>
&lt;h2 id="can-you-expand-on-why-you-are-using-those-projectsservices">Can you expand on why you are using those projects/services?&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Cloud-Native Implementation&lt;/strong>:
Utilized CNCF projects and technologies to deploy a comprehensive stack consistent with a microservices-based architecture, resulting in enhanced scalability and operational agility.&lt;/li>
&lt;li>&lt;strong>Kubernetes for Orchestration&lt;/strong>:
Adopted Kubernetes to manage containerized workloads, enabling automated deployment, scaling, and resilience on management as well as user cluster level.&lt;/li>
&lt;li>&lt;strong>Kube-OVN as network layer&lt;/strong>:
With Kube-OVN as CNI on the infrastructure clusters and it&amp;rsquo;s VPC functionality, it allows customer environments to be fully segregated on a shared platform, providing maximum flexibility and strong security enforcement. It enables the teams to use familiar cloud-native development, operations, and debugging tools and skills.&lt;/li>
&lt;li>&lt;strong>KubeVirt for VM abstraction&lt;/strong>:
A high-quality, Kubernetes-native virtual machine abstraction facilitates the deployment of container-based resources on a centralized cloud-native infrastructure platform, while maintaining flexibility for future use of VM resources.&lt;/li>
&lt;li>&lt;strong>Open-Source &amp;amp; Cost Efficiency&lt;/strong>:
CNCF components deliver vendor-neutral, cost-effective solutions that are fundamental to container orchestration and observability. These open-source tools form the foundation of our sovereign cloud initiative, empowering internal teams to design customized architectures independently of third-party vendors. Utilizing CNCF technologies allows us to maintain flexibility, scalability, and comprehensive control over our cloud infrastructure, supporting our strategic objectives of autonomy and innovation.&lt;/li>
&lt;li>&lt;strong>Declarative &amp;amp; Configuration-Driven Approach&lt;/strong>:
CNCF tools align with the low-code/no-code principle by enabling declarative configuration management.&lt;/li>
&lt;/ul>
&lt;h2 id="what-has-worked-well">What has worked well?&lt;/h2>
&lt;p>The implementation has eventually lead to the product launch of Kubernetes Service in August 2025, with some strong outcomes:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Layered Architecture for Enhanced Robustness&lt;/strong>:
The integration of Cloud Native Infrastructure Platform (CNIP) and Swisscom Kubernetes Platform (SKP) forms the foundation of the new Kubernetes Service, enabling flexible handling as separate platform layers for streamlined future operations.&lt;/li>
&lt;li>&lt;strong>Vendor-Agnostic Production Platform&lt;/strong>:
By eliminating proprietary technology, a resilient and adaptable foundation has been established to host managed Kubernetes clusters within Swisscom&amp;rsquo;s Private Cloud, ensuring a high degree of flexibility and scalability, as well as privacy.&lt;/li>
&lt;li>&lt;strong>Modern Cloud-Native Foundation&lt;/strong>:
The implementation of Kubernetes to deliver managed Kubernetes clusters to end customers enables a unified cloud-native stack across all layers of responsibility, promoting consistency and efficiency.&lt;/li>
&lt;li>&lt;strong>Best Practice Design&lt;/strong>:
Collaborating with Kubermatic, a modern Kubernetes platform was designed, incorporating the latest technologies such as KubeVirt and Kube-OVN, to ensure an enterprise-ready solution for end customers.&lt;/li>
&lt;li>&lt;strong>Operational Excellence&lt;/strong>:
Equipping teams with essential cloud-native and Kubernetes expertise enhances the attractiveness of Swisscom&amp;rsquo;s tech stack to potential candidates and reinforces the company&amp;rsquo;s commitment to the Open-Source community.&lt;/li>
&lt;li>&lt;strong>Successful Internal Adoption&lt;/strong>:
The Kubernetes Service was successfully launched as Swisscom&amp;rsquo;s internal Container platform, achieving significant traction with over 60% of workloads migrated within the first 9 months of operation.&lt;/li>
&lt;/ul>
&lt;h2 id="what-has-not-worked-well">What has not worked well?&lt;/h2>
&lt;p>While the architecture delivered significant improvements, several challenges emerged during implementation:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Enterprise-Readiness of Cloud Native Technologies&lt;/strong>:
Despite successful scaling in test and internal production environments, many advanced cloud-native technologies faced difficulties when deployed in enterprise-grade settings for end customers (e.g., B2B market). This highlighted the need for further refinement and testing in real-world scenarios.&lt;/p>
&lt;p>For KubeVirt, for instance, there are only limited real-world examples, best practices or reference designs available to draw upon for large-scale, production-grade business deployments. Switching fully to Kube-OVN as the main network layer also demands extra effort and is less straightforward than traditional network solutions with established production lifecycles.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Limited Support and Professional Services&lt;/strong>:
The availability of professional support, particularly 24/7, for open-source and cloud-native technologies is limited. This poses challenges for enterprises seeking to adopt these technologies and provide services with guaranteed service levels (SLAs).&lt;/p>
&lt;p>A possible solution is for more companies to provide professional support and make these services more transparent. Furthermore, the CNCF could introduce a &amp;ldquo;Certified Supporter&amp;rdquo; verification system to strengthen trust in firms that offer professional support.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Knowledge Gaps and Skills Requirements&lt;/strong>:
Adopting new technologies demands specialized knowledge and expertise. In-house engineers required additional training and support to effectively maintain and troubleshoot products built on these technologies.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Customer Acceptance and Migration Challenges&lt;/strong>:
Introducing a new platform based on modern technologies, without a proven track record in enterprise-grade deployments, required significant effort to educate customers, facilitate migration from legacy stacks, and promote the benefits of a sovereign cloud solution. This process demanded substantial resources and support to ensure a smooth transition.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="what-sort-of-glue-have-you-had-to-develop-to-enable-usage-of-your-architecture-">What sort of “glue” have you had to develop to enable usage of your architecture ?&lt;/h2>
&lt;p>The reference architecture provides a strong foundation, making it practical and easy to use. The below elements were designed to simplify adoption, improve usability, and ensure seamless interaction across layers acting as the &amp;ldquo;glue&amp;rdquo;:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Unified Abstraction APIs&lt;/strong>: Developed APIs (Open Service Broker spec) that hide complexity and provide a consistent interface for orchestration and other consuming Operational Support Systems (OSS).&lt;/li>
&lt;li>&lt;strong>Advanced Routing Functionality&lt;/strong>: In order to integrate the customer environments into the Swisscom Core Network (MPLS), we developed and implemented our own concept of edge routers using BGP on FRRouting pods. This custom solution supports NAT, Fail-over (VRRP) as well as north-south firewalling (traffic from/to customer environments). These router pods are managed by an operator and configured with custom resource definitions.&lt;/li>
&lt;li>&lt;strong>Policy Integration Layer&lt;/strong>: Built operators to dynamically apply and manage Kyverno policies across different stages without requiring deep technical intervention.&lt;/li>
&lt;li>&lt;strong>Firewall Management&lt;/strong>: Implemented operators and API endpoints to allow customers to manage firewall rules on the SDN layer of the KubeVirt infrastructure, via Kube-OVN network policies.&lt;/li>
&lt;li>&lt;strong>Workflow Orchestration Logic&lt;/strong>: Developed and implemented the entire platform orchestration logic and automated pipelines from bottom-up.&lt;/li>
&lt;li>&lt;strong>Commandline tooling&lt;/strong>: Various commandline tools for human operators to manage and control the entire platform and all parts of it with ease.&lt;/li>
&lt;li>&lt;strong>Testing &amp;amp; Fine-tuning&lt;/strong>: With limited experience in large-scale bare-metal Kubernetes deployments, we had to do a lot of testing, validation and fine-tuning. We had to make sure, that the platform scales properly with more workloads being migrated every day.&lt;/li>
&lt;/ul>
&lt;h2 id="has-your-architecture-evolved-what-lessons-have-you-learned-from-previous-iterations">Has your architecture evolved? What lessons have you learned from previous iterations?&lt;/h2>
&lt;p>Our architecture and product have undergone significant evolution through iterative development, driven by customer feedback and emerging requirements.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Iterative Development Approach&lt;/strong>:
We began by establishing foundational layers and meeting the needs of our internal Swisscom customers. Subsequent iterations introduced advanced features for end customers, incorporating feedback from both internal and external stakeholders.&lt;/li>
&lt;li>&lt;strong>Continuous Improvement and Feedback Loop&lt;/strong>:
Each iteration allowed us to gather valuable insights and add new functionalities, refining our product and enhancing customer satisfaction.&lt;/li>
&lt;li>&lt;strong>Steep Learning Curve and Expertise Development&lt;/strong>:
As we ramped up the product, our teams faced a significant learning curve, developing essential expertise and professionalizing DevOps processes to ensure seamless operation.&lt;/li>
&lt;li>&lt;strong>Strategic Partnerships and Support&lt;/strong>:
Our collaboration with Kubermatic enabled us to leverage professional support for key components, including KubeVirt and Kube-OVN, ultimately maturing our production platform and solidifying its readiness for enterprise-grade deployments.&lt;/li>
&lt;/ul>
&lt;p>Through this iterative process, we&amp;rsquo;ve gained valuable lessons and refined our architecture to better meet the needs of our customers, while developing the expertise and partnerships necessary to drive continued success.&lt;/p>
&lt;h3 id="outcome">Outcome&lt;/h3>
&lt;p>By embracing open-source and cloud native technologies, Swisscom successfully created a sovereign cloud solution, modernizing its container offering while reducing vendor lock-in and providing advanced features to customers. The new «Kubernetes Service» demonstrates the power of cloud native architectures in creating flexible, scalable, and cost-effective solutions for enterprise-grade services, all while ensuring true data sovereignty and regulatory compliance. This approach positions Swisscom as a leader in sovereign cloud solutions, offering Swiss (and European) customers a trusted alternative to global hyperscalers.&lt;/p>
&lt;h2 id="whats-next-for-your-architecture-what-are-you-looking-to-do-next">What’s next for your architecture? What are you looking to do next?&lt;/h2>
&lt;p>Building on the success of our proven reference architecture, which now supports both internal and external customer workloads in production, we&amp;rsquo;re focused on expanding and enhancing our offerings:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Hybrid Cloud Expansion and Multi-Cloud Flexibility&lt;/strong>:
We&amp;rsquo;re working to enable seamless public cloud deployments, complementing our existing Swiss-based data centers and strengthening hybrid cloud use cases.&lt;/li>
&lt;li>&lt;strong>Edge Cloud Support&lt;/strong>:
With cloud sovereignty in mind, we are developing a «Kubernetes Service On-Prem» extension that will deliver the Private Cloud product on a Cloud Edge Stack at customer premises, enabling an autonomous instance of our Kubernetes Service. This is currently in development with an interested customer.&lt;/li>
&lt;li>&lt;strong>GPU-Enabled Workloads and Emerging Technologies&lt;/strong>:
Next, we&amp;rsquo;ll be integrating GPU support and exploring other emerging technologies to unlock new possibilities for compute-intensive applications.&lt;/li>
&lt;li>&lt;strong>Customer-Driven Features and Enhancements&lt;/strong>:
We&amp;rsquo;re committed to delivering additional features and functionalities requested by our customers, further enriching our platform and services.&lt;/li>
&lt;li>&lt;strong>Simplified Onboarding and Resource Optimization&lt;/strong>:
To improve efficiency and resource utilization, we&amp;rsquo;ll be introducing a shared cluster concept, allowing for more flexible and efficient use of our bare-metal infrastructure.&lt;/li>
&lt;li>&lt;strong>Exploring New Use Cases - VM Workloads&lt;/strong>:
We&amp;rsquo;re also investigating the possibility of hosting classical VM workloads on our Cloud Native Infrastructure Platform (CNIP), expanding the platform&amp;rsquo;s use cases beyond container-based workloads and further increasing its versatility.&lt;/li>
&lt;/ul>
&lt;p>By pursuing these initiatives, we aim to continue delivering value to our customers, drive innovation, and grow our architecture and services to meet evolving needs.&lt;/p>
&lt;h2 id="discussion">Discussion&lt;/h2>
&lt;p>End user members may participate in the &lt;a href="https://github.com/cncf/tab/discussions/134">discussion thread&lt;/a> for this architecture.&lt;/p></description></item><item><title>Architectures: Enabling Allianz Direct's scaling through Platform Engineering</title><link>https://deploy-preview-36--cncfarchitecture.netlify.app/architectures/allianz/</link><pubDate>Mon, 28 Oct 2024 00:00:00 +0000</pubDate><guid>https://deploy-preview-36--cncfarchitecture.netlify.app/architectures/allianz/</guid><description>
&lt;h2 id="relevant-cncf-projects">Relevant CNCF projects&lt;/h2>
&lt;div class="row row-cols-1 row-cols-md-3 mb-4">
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Kubernetes
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/kubernetes/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/kubernetes/icon/color/kubernetes-icon-color.svg" alt="kubernetes logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2021&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> 1.29.6&lt;/li>
&lt;/ul>
&lt;p>Kubernetes has been the foundation for our Internal Developer Platform and almost all of Adobe&amp;rsquo;s containerized workloads run on Kubernetes clusters.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Helm
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/helm/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/helm/icon/color/helm-icon-color.svg" alt="helm logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2021&lt;/li>
&lt;li>&lt;strong>Current version:&lt;/strong> v3.12.3&lt;/li>
&lt;/ul>
&lt;p>Helm is our package manager and helps us abstract out some of the complexity by including them as dependencies and only exposing the values.yaml file.&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="col mb-4">
&lt;div class="card h-100">
&lt;div class="card-header">
Argo
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>&lt;a href="https://www.cncf.io/projects/argo/">&lt;img src="https://raw.githubusercontent.com/cncf/artwork/main/projects/argo/icon/color/argo-icon-color.svg" alt="prometheus logo">&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Using since:&lt;/strong> 2021&lt;/li>
&lt;/ul>
&lt;p>We are using all four projects under Argo:&lt;/p>
&lt;ul>
&lt;li>Argo CD: v2.9.22&lt;/li>
&lt;/ul>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="platform-engineering---allianz-direct">Platform Engineering @ Allianz Direct&lt;/h2>
&lt;p>Allianz Direct has been working on building Platform Engineering for the past several years. We have created a cloud-native future-proof platform which offers an organisation-wide-devops(orgOps) experience on top of public cloud. Business, Software Engineers, Security, Compliance, Architecture, Support and Cost Efficiency are few of our stakeholders.&lt;/p>
&lt;h3 id="platform-engineering-team-topology---internal">Platform Engineering Team Topology - internal&lt;/h3>
&lt;p>The PE team is internally organised in DDOs - Distributed DevOps, where each ddo owns a Domain.
This setup follows the reverse Conway manoeuver where the reference architecture structure dictates
the teams setup.
The PE team consist of 13 members. All of them internal employees.&lt;/p>
&lt;p>The PE team is being supported by auxiliary teams:
Developer Service Hub (DSH): entry level engineers handling the low complexity tasks such as: access management,
1st level technical support, SRE onboarding, ticket sorting and filtering
Cloud Auditing Hub (CAH): entry level engineers with a focus on compliance and audit
Production Management Hub (PMH): entry level engineers with a focus on incident and problem management
Technical Tribe Leads (TTL): Technical leads on the Tribe (department) level that became our evangelist for best practices and
continuous innovation partners.&lt;/p>
&lt;h3 id="platform-engineering-team-topology---external">Platform Engineering Team Topology - external&lt;/h3>
&lt;p>Externally, the team has decided to scale by building on the concept of FDOs - Federated DevOps, where
each squad (developing team) has built internal devops expertise focusing a minimum amount of time on
Operations concerns. A FDO community has flourished and enabled successfully an extremely aggressive organisation scale up
The PE serves an approx. 500 engineers and 1500 employees.&lt;/p>
&lt;h2 id="platform-engineering-architecture">Platform Engineering Architecture&lt;/h2>
&lt;p>The PE team has built a Cloud Native Platform
that serves the core B2C business of a fully digital insurance player acting on
several european markets.&lt;/p>
&lt;p>&lt;img src="./images/PEArchitecture.jpg" alt="High Level Diagram">&lt;/p>
&lt;p>It serves also all the newly created B2B business initiatives.
The highly aggressive scale-up of the both B2B and B2B businesses forced the PE team to redesign the architecture towards
a multi-tenant architecture with minimum operational effort.
On top, the Platform has become a Organisation Group Standard and an example for Global initiatives. This forced the PE team to
choose a light architecture under a second Platform based on Fargate ECS, reducing the operational effort and talent demand to minimum.&lt;/p>
&lt;p>PE team delivered several cloud native best practices:&lt;/p>
&lt;ul>
&lt;li>GitOps (ORGops to be more precise)&lt;/li>
&lt;li>Stateless clusters orchestrated by a management cluster&lt;/li>
&lt;li>Fargate ECS multitenancy&lt;/li>
&lt;li>DevSecOps&lt;/li>
&lt;li>SRE&lt;/li>
&lt;/ul>
&lt;h3 id="special-projects-that-served-us-well">Special projects that served us well&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>AWS obsession with customers served us well. The technical support and continuous relation with AWS architects
helped us maximise our effectiveness and evolve our architecture as well as complementing our stack with SaaS services
such as EKS, Redis, MSK.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>AWS managed Kubernetes gave us the flexibility we needed to meet our users needs with as little overhead as
possible. Most of our application choices come directly from our users, however our
infrastructure choices were made to balance our compliance needs, usability and supportability.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ArgoCD has become instrumental for us and the core of our internal innovation. We are currently using it for spinning
up and managing our multitenant implementation whether that is on namespace level or Fargate ECS level.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>PAGT(Prometheus, Alert manager, Grafana and Thanos) stack is the core of our Observability.
It is complemented by OTEL and ELK Stack and enabled us to build a state of the art SRE journey for all our Stakeholders&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="things-that-worked-well-for-us">Things that worked well for us&lt;/h3>
&lt;p>EKS and now EKS + Fargate ECS works great for us. We can fully owns our core domains and stay hardened with minimum effort.
Complementing our Stack with AWS services especially on Persistence, Data Streaming and Storage increase our innovation speed.
ArgoCD with helm, Atlantis with terraform and Crossplane are working great for us, allowing us to follow the GitOps way,
a great way of working for heavily regulated industries.&lt;/p>
&lt;h2 id="stakeholders-value-streams">Stakeholders value streams&lt;/h2>
&lt;h3 id="business">&lt;strong>Business&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Cost savings of X%&lt;/li>
&lt;li>Business Delivery expedited by X%&lt;/li>
&lt;li>Security incidents reduced by X%&lt;/li>
&lt;li>Reliability incidents reduced by X%&lt;/li>
&lt;li>Organizational Performance increased by X%&lt;/li>
&lt;/ul>
&lt;h3 id="end-customers">&lt;strong>End-Customers&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>User Experience improved by X%&lt;/li>
&lt;li>Fast Feedback loop increased by X%&lt;/li>
&lt;li>Reliability increased by X%&lt;/li>
&lt;/ul>
&lt;h3 id="developers">&lt;strong>Developers&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>DevX improved by X%&lt;/li>
&lt;li>Fast Software Delivery improved by X%&lt;/li>
&lt;li>Productivity increased by X%&lt;/li>
&lt;li>High Quality increased by X%&lt;/li>
&lt;li>Innovation increased by X%&lt;/li>
&lt;/ul>
&lt;h3 id="security">&lt;strong>Security&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Cloud native Security costs reduced by X%&lt;/li>
&lt;/ul>
&lt;h3 id="compliance">&lt;strong>Compliance&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Cloud compliance costs reduced by X%&lt;/li>
&lt;/ul>
&lt;h3 id="legal">&lt;strong>Legal&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Cloud native legal cost reduced by X%&lt;/li>
&lt;/ul>
&lt;h3 id="qa">&lt;strong>QA&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Automation increased by X%&lt;/li>
&lt;/ul>
&lt;h3 id="finopssustainability">&lt;strong>FinOps/Sustainability&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Cloud Costs reduced by X%&lt;/li>
&lt;/ul>
&lt;h2 id="some-things-did-not-work-as-expected">Some things did not work as expected&lt;/h2>
&lt;p>Service Mesh did not work well for us. The Operational costs and lack of integration on the CNI level made us revert the journey.
Sidecar, eBPF Service Mesh seems to be the way forward for us.&lt;/p>
&lt;h2 id="architecture-evolution">Architecture evolution&lt;/h2>
&lt;p>The Architecture was designed as a single tenant but due to its success it needed to evolve to support multitenancy on
AWS account level, next on namespace level and now, due to the Global impact, on the Fargate ECS level.
Inevitably we ended with three Platforms(Architectures) that need to be simplify towards a maximum two that will evolve rapidly.
Migration work is inevitable.&lt;/p>
&lt;h2 id="the-journey">The Journey&lt;/h2>
&lt;p>It took us 4 years to move towards the current Platform Engineering setup. There is more to come. The full Journey as it happened till today 28.10.2024 can be seen in the following diagram:&lt;/p>
&lt;p>&lt;img src="./images/PEJourney.jpg" alt="High Level Diagram">&lt;/p></description></item></channel></rss>