Kubernetes OpenShift Tech

Building a Modern Load Balancer and NAT gateway with Fedora bootable containers

18. Jun 2026

In my team, we have a space called “innovation week” where each engineer gets a week to work on a cool idea twice a year. From our internal documentation:

Innovation week is a space for engineers to work on a cool idea that they’ve had but which may not directly contribute to the team’s products or processes. Engineers are free to work on something that’s related to an existing tool or to invest this time to learn a new technology or tool.

I got my first hands-on experience with RHEL 10 image mode at the Red Hat Summit Zurich in January 2026. Since then, I’ve been kicking around the idea to build a modern highly available (HA) load balancer (LB) and NAT gateway appliance based on RHEL image mode (or rather the technology underpinning RHEL image mode: bootable containers).

This idea is a clear fit for innovation week as it ticks all the boxes: it’s a cool idea; it’s not immediately contributing to our products, but related to something we run in production; and it’s a learning opportunity for new tools. However, ultimately, I decided on this project for my innovation week of H1 2026 because I was eager to get more hands-on experience with bootable containers.

In the rest of this blog post, we’ll take a closer look at the design and the various components (both off-the-shelf and custom) that make up the proof-of-concept (PoC) implementation of this idea. Additionally, I’ll cover my learnings from a longer period of hands-on work with bootable containers.

If you’re not familiar with bootable containers yet, I recommend reading Fedora bootc’s “What is a Bootable Container?” and optionally also Fedora bootc’s “Getting Started with Bootable Containers”.

Architecture and Design

The PoC design consists of two main parts:

  1. A bootable container that contains all the software and generic config that’s required to set up a pair of VMs that act as a highly available (HA) load balancer and NAT gateway for a Kubernetes cluster running in a private network.
  2. A service on each VM that fetches all cluster-specific configuration from the cluster in front of which it is deployed. The most dynamic cluster-specific configuration are the backend node IPs for the Kubernetes API and the ingress controller. However, the controller also fetches other configurations from the cluster such as the specific floating IPs to use, SSH public keys, and credentials to manage cloud provider floating IP attachments to the active replica.

I discussed this design, along with a few alternatives, with other VSHNeers over the last few months, but we quickly came to the conclusion that the design outlined above is well suited to our primary use case: a load balancer and NAT gateway appliance for OpenShift clusters deployed in private networks on cloud infrastructure that doesn’t offer suitable managed LB and NAT gateway products.

In particular, we liked that this design allows us to leverage our existing rich tool set for managing Kubernetes clusters (Project Syn) to deploy the load balancer and NAT gateway configuration through the same pipeline as the cluster configuration.

Component choices

For building the bootable container base image, I considered RHEL 10 image mode, the Fedora bootc base images, and the Universal Blue base images. I ended up going with the Fedora 44 bootc base image, since that image strikes a nice balance between minimal and familiar, without introducing additional complexities such as managing RHEL entitlements for building the bootable container.

Initially, I had planned to use Ignition to apply custom config on VM first boot. However, after realizing that Ignition requires a bunch of auxiliary tooling and scripts that are missing from the Fedora bootc base image, I ended up using cloud-init instead.

For the actual load balancing and NAT gateway functionality, I mostly stuck to what we’re running in production: HAProxy for load balancing API and ingress traffic, Keepalived for managing internal VIP attachment with Floaty for cloud provider floating IP attachment, and conntrackd for egress TCP connection state synchronization between the two LB VMs.

For traffic routing, which is implemented using iptables on our production LBs, I decided to try out firewalld. This decision turned out to be quite well-suited to a declarative configuration approach, and I was able to set up fairly solid firewall and routing policies for the PoC with only a handful of firewalld config files.

For network interface management, I leveraged NetworkManager, which is Fedora’s default choice for network interface management. This was an easy choice, since I have plenty of experience with it from managing OpenShift clusters.

Finally, for building the service that fetches the cluster-specific config from Kubernetes, I used kubebuilder to build a custom Kubernetes operator in Go (with the slight twist that the operator’s controller-manager will run outside the cluster). Again, this is familiar technology: we’ve written a few Kubernetes operators already, most recently Espejote (I highly recommend the Espejote blog post if you haven’t read it already).

Building the custom bootable container

I spent the first day or so familiarizing myself with the process of building a custom bootable container outside a carefully curated lab environment. The first breakthrough was my discovery of the Universal Blue image-template repository on GitHub: that repository provides a nice experience for building custom bootable containers out of the box, including a fairly comprehensive set of build commands encoded in a Justfile (just is a modern take on make).

However, I quickly realized that my current local environment (Ubuntu 24.04 LTS) isn’t the ideal platform for some bootable containers workflows. In particular, I ended up using a Fedora Atomic VM to run the bootc-image-builder which allows building a bootable VM image for various platforms from a bootable container. For the PoC, I used bootc-image-builder to generate a qcow2 image that I could boot in libvirt/QEMU.

As already noted above, the second big takeaway from building my own bootable container was that the Ignition first boot experience of Fedora/RHEL CoreOS requires quite a bit more than just installing the ignition package. If you’re curious, feel free to check out how Fedora CoreOS builds its Ignition first boot experience with Dracut. In the spirit of iterating quickly, I ended up picking cloud-init as the tool for applying first boot configuration instead.

You can find the source code I used to build the fedora-bootc-loadbalancer bootable container on GitHub at simu/fedora-bootc-loadbalancer. Notably, this repository currently lacks any CI that regularly builds the container and associated qcow2 base image. For the PoC, I was doing all the container builds locally.

Testing the custom bootable container

While one of the advantages of bootable containers is that you can just run them in podman to test changes, I did most of the testing locally in libvirt/QEMU. The main reason for testing in libvirt was that I didn’t fancy spending a bunch of time trying to replicate a VM with multiple network interfaces when running the bootable container in podman.

There are two main approaches for creating VMs from a bootable container image: you can either boot the VM from any bootc-enabled ISO and use bootc switch to pivot the VM to your custom bootable container, or you can build an ISO or importable disk image of your bootable container with bootc-image-builder.

I used bootc-image-builder to generate a qcow2 image of the bootable container and created VMs from that image. I chose this approach, since provisioning the LB VMs from a custom base image is my preferred option for a potential future production setup. Additionally, once I started relying on the custom Kubernetes controller to render initial cluster-specific configurations during first boot, creating VMs from a custom base image which includes the controller binary was much simpler.

For the PoC, I used our OpenShift Lab cluster’s integrated container registry to store the bootable container. This, in combination with deploying an authentication config for bootc via cloud-init, allowed me to update the VMs with bootc upgrade and also enabled bootc switch to change the deployed image tag. Being able to fetch the latest bootable container from the registry allowed me to test changes to the bootable container relatively quickly even without the rapid iteration that’s enabled by running the bootable container in podman locally.

Note that while I used a private registry for the PoC, the bootable container doesn’t contain any secrets, and an eventual production-ready version would host the bootable container on a public registry. All required secrets are cluster-specific and should be injected at first boot via cloud-init or Ignition or updated through the Kubernetes API once the VM is operational to avoid having to build a separate bootable container for each cluster.

In addition to testing new versions via bootc upgrade, I also regularly built a new qcow2 base image from the latest version of the bootable container. Doing so allowed me to refine and improve the first boot process by creating new VMs based on the latest version of the bootable container.

Building the bootc-loadbalancer-controller-manager

Building and testing the Kubernetes operator that fetches the cluster-specific config from the Kubernetes API and renders appropriate configurations for the various services on the VMs was quite straight forward: I did a lot of the initial prototyping and testing against a local Kind cluster which enabled very quick iteration.

Once the controller was able to render the essential service configurations (HAProxy front and back ends, Keepalived config for the private VIPs, Floaty config for the public VIPs, and conntrackd config) based on the custom resource, I started to integrate the controller in the bootable container.

For the PoC, the integration of the controller into the bootable container build process was quite primitive: I simply copied the compiled Go binary into the repository that I used to build the bootable container and the container build process copied it to /usr/bin/bootc-loadbalancer-controller-manager in the container. Additionally, I added a very simple systemd service which runs the controller to the bootable container.

For the PoC, I side-stepped Kubernetes authentication for the controller: early testing used the Kind cluster’s admin kubeconfig injected into the LB VM through cloud-init. For the integration testing towards the end of the week, I used the service account and RBAC that’s generated by kubebuilder and a manually created long-lived service account token.

In the future, we’d probably want to build a more dynamic authentication mechanism in the controller, possibly using Kubernetes’ TokenRequest API.

Towards the end of the week, I extended the controller with a mechanism that reloads (or restarts) services on the LB VMs when their configuration is updated. This is implemented by hashing all configurations and tracking the currently deployed hashes for each LB VM in the custom resource’s status field. For a production-ready implementation, we’d probably want a secondary loop which triggers a reconciliation every time it sees one of the managed configuration files get changed on disk.

You can find the code for the Kubernetes controller on GitHub at simu/bootc-load-balancer-controller. Also note that the published version of the bootable container source code at simu/fedora-bootc-loadbalancer clones the controller GitHub repository and compiles the controller binary for each container build instead of relying on a manual copy.

SELinux adventures

Naturally, no blog post about building a custom system on Fedora is complete without some SELinux adventures.

After integrating the Kubernetes controller into the bootable container, I started testing the various service configurations. The initial tests were done on a single VM and with some creative integrations, such as configuring the API HAProxy backend on the libvirt VM to point to the Kind cluster on the host. During the initial testing I quickly found that the Keepalived configuration (which was copied almost verbatim from the working production LBs) didn’t work as expected: SELinux was saying “no” to Keepalived setting up the VRRP notification FIFO and Floaty reading from the same FIFO.

To my pleasant surprise, working with SELinux is quite ergonomic in 2026 (shout out to Computing for Geeks’ SELinux Survival Guide for Fedora which provides a fairly comprehensive overview of modern SELinux tooling).

First, I verified that SELinux was the root cause for Keepalived VRRP notifications not working correctly by temporarily switching to SELinux permissive mode with setenforce 0. After that, I refreshed my memory on how to work with SELinux, and installed the audit and policycoreutils-python-utils packages in my bootable container, since those aren’t part of the Fedora bootc base image.

At that point, I was able to extract the SELinux audit log entries in a nice format (including suggestions for remediation) with sealert. I then used the command line suggested by sealert, using ausearch and audit2allow to turn the log entries into a custom policy. Once the custom policy allowed Keepalived and Floaty to operate normally, I extracted the plain text policy definition and included a step to compile and install the custom policy in the bootable container build script.

After including the custom policy in the bootable container, VMs provisioned from (or updated to) the latest bootable container image automatically used the custom policy and there was no need to manually adjust SELinux anymore for fresh VMs.

After getting Keepalived and Floaty to work, I also extended the bootable container build script with some semanage port commands to label additional ports as http_port_t. This change allowed HAProxy to bind to all the configured front end ports, and to open connections to all the configured back ends.

Extending the controller to work without a Kubernetes API

While testing the controller on the LB VM, it quickly became clear that we needed a “bootstrap” rendering mode which works without a Kubernetes API. In this bootstrap mode, the controller renders initial configurations from a local YAML file which contains the custom resource and referenced cloud provider credentials secret.

After refactoring the controller’s reconcile logic to make it easier to call when there’s no working Kubernetes API, and introducing some extra command line arguments, the controller gained a “render-from-file” mode. The PoC uses this mode in cloud-init’s runcmd to generate initial configurations during first boot of each VM.

Configuring the network interfaces on the LB VMs

At this point, I had also implemented support for rendering custom NetworkManager .nmconnection configuration files in the controller. This enabled me to disable cloud-init’s network rendering completely and instead use the controller to configure the various network interfaces on each LB:

  • the public interface where client ingress traffic arrives and on which egress traffic is routed to the internet.
  • the private cluster network interface on which the LBs manage the default gateway IP and load balance the Kubernetes API.
  • a dummy interface on which all the cloud provider floating IPs are assigned so that loop back traffic on those IPs works as expected.

In order to generate these NetworkManager configurations, the controller must know which of the VM’s network interfaces are attached to the public internet and the cluster’s private network.

By default, the controller selects the interface that has the VM’s default route as the public interface. However, optionally, the public interface name can be specified as a command line argument. Additionally, the cluster network CIDR is a mandatory command line argument for the controller. The controller determines the private cluster network interface by searching for a network interface that’s assigned an IP in the cluster network CIDR.

The controller needs the interface names to read details about each interface from Linux. However, the controller then extracts the interfaces’ MAC addresses and uses those in the .nmconnection configuration files as stable identifiers for each interface. This approach ensures that the on-disk NetworkManager configuration doesn’t depend on the actual interface names (which may change in some circumstances in cloud provider environments).

At this point, the VMs were almost fully functional as load balancers (notably the services proxied by HAProxy weren’t yet reachable from outside the VM), but didn’t yet act as NAT gateways.

Configuring the firewall

While researching how to operate firewalld, I found the official firewalld blog post Policy Sets: A Home Router in four commands, which describes how a VM running firewalld can be turned into a functional simple router with only four commands.

After some testing, I started with firewalld’s gateway policy set as the base to define a custom firewalld configuration for the LB VMs. The final firewalld configuration extends the gateway policy to allow the LB VMs to act as NAT gateways/routers and exposes all the services proxied by HAProxy to external clients.

For the PoC implementation, the bootable container build script applies the following cluster-independent firewalld configurations:

  • It enables the gateway-lan-to-HOST, gateway-lan-to-world and gateway-world-to-host policies (which are part of the firewalld gateway policy set).
  • It adds a custom firewalld service definition for the OpenShift machine-config-server (TCP port 22623) in /usr/lib/firewalld/services.
  • It customizes the firewalld internal zone definition to allow traffic from the cluster network to the services exposed by HAProxy (Kubernetes API, machine-config-server, and ingress controller)

Additionally, the Kubernetes controller applies the following cluster-specific firewalld configurations:

  • It deploys a custom definition for the external zone which allows access to the services exposed by HAProxy (Kubernetes API and ingress controller) and blocks SSH access on the public floating IPs.
  • It adds the LB’s public interface to the external zone (via NetworkManager .nmconnection file)
  • It adds the LB’s private cluster network interface to the internal zone (via NetworkManager .nmconnection file)
  • It deploys a custom SNAT rule to use a floating IP as the source IP for traffic that’s forwarded from the cluster network to the public interface. This rule is deployed using firewalld’s direct mode, since the high-level firewalld configuration doesn’t currently allow configuring custom SNAT rules.

We translate the egress traffic source IP to a floating IP to ensure a failover of the internal gateway IP between the NAT gateway VMs doesn’t change the source IP of egress traffic, which would break established TCP connections to external servers. Keepalived and Floaty ensure that the internal default gateway VIP and the egress source floating IP are attached to the active LB replica. Finally, conntrackd ensures that egress TCP connection state is synchronized between the two LB replicas. All together, these three configurations provide transparent failover for TCP egress traffic.

End-to-end validation of the PoC

Initially, I had planned to set up a temporary OpenShift cluster for the end-to-end validation of the PoC.

However, I was running out of time, so I decided to do the end-to-end validation with a Talos Linux cluster running in a private libvirt network and a pair of VMs acting as LBs and NAT gateways for the cluster. Also, to avoid having to find real public IP addresses to use as floating IPs, I allocated fake cloud provider floating IPs from RFC-6890 TEST-NET-2 throughout the project.

The overall configuration of the end-to-end validation was set up as follows:

  • I allocated floating IPs for the API (198.51.100.100), the ingress controller (198.51.100.80) and the egress traffic (198.51.100.253) from TEST-NET-2.
  • I set up two libvirt networks:
    • a regular libvirt “NAT” network (192.168.122.0/24). This network acted as the LBs’ public network (host interface virbr0).
    • a libvirt “isolated” network (192.168.100.0/24). This network acted as the cluster’s private network (host interface virbr1).
  • The two LB VMs were each configured with a network interface in both of those libvirt networks.
    • Keepalived on the LB VMs managed 192.168.100.1 as the default gateway IP for the libvirt isolated network.
  • The Talos Linux VMs were configured with a single network interface in the isolated network (192.168.100.0/24) and received the default gateway IP via DHCP.
  • On the host machine, traffic from 198.51.100.253 which was received on virbr0 was masqueraded to the host’s primary IP. This established outbound connectivity for VMs in the isolated network.

Setting up this validation environment was not without its own challenges: I had to hack the libvirt dnsmasq config for the isolated network in order to distribute the default gateway IP managed by the LB VMs over DHCP. Additionally, I ended up building a very simple mock floating IP API which allowed the LB VMs to dynamically configure static next hop routes on the host. To use that API, I adapted the Keepalived example VRRP notification bash script to call the host’s mock API instead of using Floaty to handle the Keepalived VRRP notifications. Since this script is essentially a replacement for Floaty, the associated moving parts in the bootable container are called fake-floaty.

After a few iterations and some last-minute additions in the Kubernetes controller to generate HAProxy back ends suitable for Talos rather than OpenShift, I was able to bootstrap the Talos cluster with 198.51.100.100 as the Kubernetes API IP. Once the Talos cluster was bootstrapped, I also successfully validated the dynamic functionality of the PoC, watching the HAProxy configurations on the LBs get updated and HAProxy reloaded instantly when Talos nodes joined the cluster.

Conclusion and outlook

I learned a lot throughout the week. In particular, I gained a much deeper understanding of bootable containers and firewalld.

If you’re interested in digging into the implementation, you can find all the code on GitHub: the custom bootable container is built from simu/fedora-bootc-loadbalancer and the Kubernetes controller is built from simu/bootc-load-balancer-controller.

Overall, I believe the PoC showed promise. However, quite a bit of work is still needed to bring the implementation up to production quality. Currently, the happy path mostly works in a local environment, but I wasn’t able to verify the PoC on a real cloud provider due to time constraints and there are various failure paths where the controller hard crashes. Additionally, there are still a number of open questions, in particular in regard to the OpenShift bootstrap process. Further, some optional features which are available on our production LBs (such as the ability to configure HAProxy to expose node port services) aren’t implemented yet.

Finally, while there are currently no concrete plans to move forward with this project in the short term, the results we were able to show after a week of work on the PoC implementation are very promising. To conclude, we’ll definitely keep the bootable container approach in mind for any future products.

Simon Gerber

Simon Gerber is a DevOps engineer in VSHN.

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
General OpenShift Press Sovereignty

Digital Sovereignty Made in Switzerland: HIN Becomes a Global Red Hat Success Story

12. May 2026

A Swiss Success Story with Global Impact

When we originally published the HIN (Health Info Net) success story at VSHN, we already knew this project was something special.

Now, the story has reached a global stage: Red Hat officially published the modernization of HIN as a global customer success story and announced it during Red Hat Summit 2026 in Atlanta on May 11, 2026.

For us, this is far more than just another reference project. It is a strong validation that sovereign, open, cloud-native infrastructure is no longer a niche topic – it is becoming a strategic requirement for critical industries such as healthcare.

And it also highlights something important: Switzerland is no longer only discussing digital sovereignty in theory. It is actively building it.

Why HIN (Health Info Net) Matters

HIN is one of the most important digital healthcare platforms in Switzerland.

More than 50,000 healthcare professionals use HIN services, and over 90% of relevant actors in the Swiss healthcare ecosystem are connected through the platform. Secure communication, digital identities, and trust are at the core of the Swiss healthcare ecosystem – and HIN plays a central role in enabling this infrastructure.

This makes HIN far more than a typical IT platform. It is part of Switzerland’s critical digital infrastructure.

Modernizing such a platform is therefore not simply about upgrading technology. It is about resilience, security, operational flexibility, long-term independence, and trust.

From Legacy Infrastructure to a Sovereign Cloud-Native Platform

Like many established organizations, HIN faced the challenge of evolving a proven and highly trusted platform while preparing it for future requirements.

The goal was not change for the sake of change. The objective was to build a modern operating model that increases flexibility, automation, scalability, and security – without compromising stability and reliability.

Together with Red Hat and VSHN, HIN modernized its platform using Red Hat OpenShift and cloud-native technologies.

The result:

  • A more flexible and scalable platform architecture
  • Increased automation and operational efficiency
  • Stronger security segmentation and Zero Trust principles
  • Kubernetes Gateway API-based protection for web applications and APIs
  • Greater portability and long-term independence
  • A modern foundation for future healthcare services

One particularly important aspect was avoiding unnecessary vendor lock-in.

Digital sovereignty does not mean isolation. It means maintaining strategic control over critical infrastructure, data, operations, and future decisions. Open standards, Kubernetes, and Open Source technologies are key building blocks for achieving this.

Security and Sovereignty Go Hand in Hand

Healthcare platforms are among the most demanding environments when it comes to security and compliance.

The HIN platform therefore consistently applies Defense in Depth and Zero Trust concepts – including network microsegmentation, clear workload segmentation, and modern authentication mechanisms.

As part of this cloud-native security approach, HIN also uses Airlock Microgateway to protect applications and APIs directly within the OpenShift environment. This adds Kubernetes-native Web Application and API Protection close to the workloads and fits naturally into an automated, container-based operating model.

This is an important point that is often overlooked in sovereignty discussions:
Open infrastructure and digital sovereignty are not in conflict with security – they can significantly strengthen it.

Cloud-native architectures enable highly automated, resilient, and observable systems while still maintaining strong control over where and how workloads operate.

Recognition Beyond Switzerland

This project has now received recognition on multiple levels.

Earlier this year, VSHN received the Red Hat Partner Award 2025 for Platform Modernization for the joint success with HIN.

Now, Red Hat has further elevated the story through an official global success story announcement during Red Hat Summit 2026 in Atlanta.

For us, this recognition is not only about VSHN. It highlights the growing importance of sovereign digital infrastructure across Europe and Switzerland.

And it shows that Open Source, Kubernetes, and cloud-native operating models are no longer purely technical topics. They are increasingly becoming strategic foundations for critical industries and public trust.

A Blueprint for Sovereign Digital Infrastructure

We believe the HIN story represents far more than a single modernization project.

Organizations across Europe are currently rethinking:

  • dependencies on hyperscalers
  • operational resilience
  • data sovereignty
  • supply chain risks
  • long-term platform strategies
  • digital sovereignty requirements

In healthcare, these challenges become especially tangible.

HIN demonstrates that modern sovereign infrastructure is already possible today – with Open Source, strong ecosystem partnerships, and cloud-native operating models.

And perhaps most importantly: digital sovereignty can be practical, operationalized, and production-ready.

Not as a future vision.
But as infrastructure already running today.

Projects like this are not built by technology alone. A huge thank you to the entire HIN team for the excellent collaboration and trust – and to all VSHNeers whose incredible dedication made this project possible.

Download the Case Study

Health Info Net is modernizing healthcare with Red Hat and VSHN.

Learn More

👉 Red Hat Success Story

👉 Red Hat Case Study

👉 VSHN HIN Success Story

👉 Red Hat Partner Award Announcement

Markus Speth

Marketing, Communications, People

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
OpenShift Press

Security Update: Red Hat Consulting GitLab Incident

3. Oct 2025

Red Hat has recently disclosed a security incident involving its Consulting team’s GitLab instance. In this case, attackers gained unauthorized access to parts of that system, which contained project files from specific customer engagements. Importantly, this incident did not affect Red Hat’s products, subscription services, or customer support systems.

At VSHN, we have carefully reviewed the situation. Our Managed OpenShift service and customer environments are not affected by this incident:

  • We operate our own GitLab infrastructure for all customer repositories.
  • We do not rely on Red Hat Consulting services in delivering our products.
  • Our Managed OpenShift operations are isolated from third-party consulting platforms.
  • The leaked listing does not contain VSHN or its customers.

Although this incident has no direct impact on VSHN customers, we continue to closely monitor security advisories from Red Hat and other partners. Security is a shared responsibility, and we remain committed to protecting our customers’ data and platforms with the highest standards.

For details on the Red Hat incident, see the official Red Hat statement: https://www.redhat.com/en/blog/security-update-incident-related-red-hat-consulting-gitlab-instance

Leaked listing of the affected repositories: https://securitronlinux.com/linux/Paste.html

If you have any questions about this, please don’t hesitate to contact us: https://www.vshn.ch/en/contact/

Aarno Aukia

Aarno is Co-Founder of VSHN AG and provides technical enthusiasm as a Service as CTO.

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
Events General OpenShift

Strengthening Trust from Code to Deployment: Recap of Our Software Supply Chain Security Workshop

12. May 2025

Last Friday, we had the pleasure of hosting a hands-on workshop on the most pressing concerns in modern software development: Software Supply Chain Security. With Red Hat’s Manuel Schindler, VSHN’s Aarno Aukia, and Thomas Philipona from Tim&Koko, participants explored the why and how of building trust in modern development pipelines.

Why Software Supply Chain Security Matters

The session began with an engaging introduction by Thomas Philipona, Co-founder of Tim&Koko, who brought the topic to life using a relatable analogy: preparing a meal. For example, a chef needs clean tools, fresh ingredients, and trusted assistants to create a safe and tasty dish. In contrast, software teams need verified code, secure infrastructure, and transparent processes to build and deploy trustworthy applications.

This framing helped participants grasp the core risks: today’s complex development workflows, heavy use of third-party dependencies, and automated build systems can all be vulnerable to tampering or supply chain attacks, often with catastrophic consequences.

Turning the Supply Chain into a Trusted One

Following the introduction, Manuel Schindler (Red Hat) took over to dive into the tools and techniques that make up a Trusted Software Supply Chain. He outlined key practices and standards to reduce risk, increase visibility, and enforce integrity:

  • Software Bill of Materials (SBOMs): A detailed list of everything in your software, enabling traceability and vulnerability tracking.
  • SLSA (Supply-chain Levels for Software Artifacts): A framework for securing build pipelines from provenance tracking to tamper-resistant builds.
  • Artifact signing and attestation: Verifying that software components are authentic and unchanged.
  • Immutable infrastructure and secure artifact repositories: Locking down production environments to prevent post-deploy tampering.

From Theory to Practice

The hands-on portion of the workshop showcased how Red Hat’s Trusted Software Supply Chain toolset brings these concepts into action. Attendees were guided through a real-world DevSecOps pipeline integrating:

  • Red Hat OpenShift Pipelines & GitOps
  • Red Hat Quay & Advanced Cluster Security
  • Trusted Artifact Signer, Dependency Analytics, and Profile Analyzer
  • Automated generation of SBOMs and SLSA-compliant metadata

A live demo walked participants through the full lifecycle of securely integrating third-party software components — from scanning and signing to deployment with full traceability.

Looking Ahead

As software ecosystems grow increasingly interconnected, establishing trust across the entire software lifecycle is no longer optional. We’re proud to have facilitated this session with expert contributions from Tim&Koko, Red Hat, and VSHN, and to empower teams to take practical steps toward supply chain resilience.

Contact us for help applying these principles in your environment, to dive deeper, or to get a copy of the presentation.

Aarno Aukia

Aarno is Co-Founder of VSHN AG and provides technical enthusiasm as a Service as CTO.

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
General OpenShift Press

VSHN and IONOS win Red Hat Cloud Ecosystem Award

19. Nov 2024

Breaking News: VSHN and IONOS Win the Cloud Ecosystem Award at the Partner Day at Red Hat Summit: Connect Germany 2024 in Darmstadt!

We are thrilled to announce that VSHN – The DevOps Company and IONOS have been awarded the Cloud Ecosystem Award at the Red Hat Summit: Connect Germany 2024! This honor recognizes our shared innovation and outstanding collaboration on our solution: VSHN Managed OpenShift on IONOS.

Cloud Innovation at Its Best

The Cloud Ecosystem Award celebrates companies that push boundaries to deliver innovative cloud solutions and drive success for their customers. This recognition showcases the seamless integration of VSHN’s expertise in Managed OpenShift with the robust and scalable infrastructure provided by IONOS.

Together, we’ve created a solution that empowers businesses with the full power of Red Hat OpenShift, Red Hat’s leading Kubernetes platform – without the complexity of management and operations. Our customers benefit from a cloud-native experience that is secure, reliable, and tailored to their individual needs.

Why is VSHN Managed OpenShift on IONOS so special?

  • Unmatched Expertise: VSHN brings years of experience managing OpenShift clusters, offering an exceptional managed service.
  • Flexible and Scalable Infrastructure: IONOS provides a powerful European cloud environment with enterprise-grade reliability.
  • Customer Focus: Together, we ensure a smooth and stress-free Kubernetes adoption experience.
  • Commitment to Open Source: By leveraging Red Hat OpenShift, we emphasize transparency, collaboration, and cutting-edge technology.

Our partnership highlights a shared vision to make DevOps and Kubernetes accessible, efficient, and scalable for businesses of all sizes.

A Milestone for VSHN and IONOS

Winning the Cloud Ecosystem Award is not only a recognition of our technical excellence but also a testament to the power of partnerships. Combining VSHN’s DevOps expertise with IONOS’s cloud capabilities, we’ve redefined how businesses utilize Kubernetes in the cloud.

At the Red Hat Summit: Connect Germany 2024, our innovation and customer value were in the spotlight. This award validates our efforts and inspires us to continue pushing the boundaries of what’s possible in the cloud ecosystem.

What’s Next?

We remain committed to empowering businesses with advanced cloud-native solutions. With the recognition of the Cloud Ecosystem Award, we’re more motivated than ever to enhance our offerings, support our customers, and drive innovation in the cloud space.

VSHN Application Marketplace Now Available on IONOS

After cloudscale, Exoscale, and Enterprise On-Premises, we’re taking the next big step: The VSHN Application Marketplace is now also available with IONOS. The first service already available, Managed OpenShift by Red Hat, will be followed by many more offerings and services from ISVs (see our already available services in the VSHN Application Catalog).

This marks another milestone in realizing our vision of delivering sovereign and powerful services in collaboration with strong partners. Together with IONOS, we’re unlocking new opportunities for you to seamlessly and flexibly operate innovative applications across Europe – always focused on your needs.

Discover how we’re shaping the future of cloud technology together.

Learn More in Our Webinar

Thank You!

A huge thank you to our team at VSHN, our partner IONOS, and, of course, to you – our customers who place their trust in us. Together, we’re shaping the future of DevOps and cloud computing.

Stay tuned for more exciting updates and join us on this incredible journey!

About VSHN
VSHN is Switzerland’s leading DevOps company, supporting businesses with managed services, cloud-native solutions, and Kubernetes expertise.

About IONOS
IONOS is one of Europe’s leading cloud providers, offering a comprehensive portfolio of scalable, secure, and reliable cloud solutions.

Learn More:

Markus Speth

Marketing, Communications, People

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
OpenShift Tech

VSHN Managed OpenShift: What you need to know about OpenShift 4.16

16. Oct 2024

Upgrade to OpenShift version 4.16

As we start to prepare the upgrade to OpenShift v4.16 for all our customers clusters, it is a good opportunity to look again at what’s new in the Red Hat OpenShift 4.16 release. The release is based on Kubernetes 1.29 and CRI-O 1.29 and brings a handful of exciting new features which will make VSHN Managed OpenShift even more robust. Additionally, the new release also deprecates some legacy features which may require changes in your applications.

The Red Hat infographic highlights some of the key changes:

Red Hat OpenShift 4.16: What you need to know Infographic by Ju Lim

Changes which may require user action across all VSHN Managed OpenShift, including APPUiO

For VSHN Managed OpenShift, we’re highlighting the following changes which may require user action in our Release notes summary

Clusters which use OpenShift SDN as the network plugin can’t be upgraded to OpenShift 4.17+

This doesn’t affect most of the VSHN Managed OpenShift clusters since we’ve switched to Cilium as the default network (CNI) plugin a while ago and most of our older managed clusters have been migrated from OpenShift SDN to Cilium over the last couple of months.

The proxy service for the cluster monitoring stack components is changed from OpenShift OAuth to kube-rbac-proxy

Users who use custom integrations with the monitoring stack (such as a Grafana instance which is connected to the OpenShift monitoring stack) may need to update the RBAC configuration for the integration. If necessary, we’ll reach out to individual VSHN Managed OpenShift customers once we know more.

The ingress controller HAProxy is updated to 2.8

HAProxy 2.8 provides multiple options to disallow insecure cryptography. OpenShift 4.16 enables the option which disallows SHA-1 certificates for the ingress controller HAProxy. If you’re using Let’s Encrypt certificates for your applications no action is needed. If you’re using manually managed certificates for your Routes or Ingresses, you’ll need to ensure that you’re not using SHA-1 certificates.

Legacy service account API token secrets are no longer generated

In previous OpenShift releases, a legacy API token secret was created for each service account to enable access to the integrated OpenShift image registry. Starting with this release, these legacy API token secrets aren’t generated anymore. Instead, each service account’s image pull secret for the integrated image registry uses a bound service account token which is automatically refreshed before it expires.

If you’re using a service account token to access the OpenShift image registry from outside the cluster, you should create a long-lived token for the service account. See the Kubernetes documentation for details.

Linux control groups version 1 (cgroupv1) deprecated

The default cgroup version has been v2 for the last couple OpenShift releases. Starting from OpenShift 4.16, cgroup v1 is deprecated and it will be removed in a future release. The underlying reason for the pending removal is that Red Hat Enterprise Linux (RHEL) 10 and therefore also Red Hat CoreOS (RHCOS) 10 won’t support booting into cgroup v1 anymore.

If you’re running Java applications, we recommend that you make sure that you’re using a Java Runtime version which supports cgroup v2.

Warning for iptables usage

OpenShift 4.16 will generate warning event messages for pods which use the legacy IPTables kernel API, since the IPTables API will be removed in RHEL 10 and RHCOS 10.

If your software still uses IPTables, please make sure to update your software to use nftables or eBPF. If you are seeing these events for third-party software that isn’t managed by VSHN, please check with your vendor to ensure they will have an nftables or eBPF version available soon.

Other changes

Additionally, we’re highlighting the following changes:

RWOP with SELinux context mount is generally available

OpenShift 4.16 makes the ReadWriteOncePod access mode for PVs and PVCs generally available. In contrast to RWO where a PVC can be used by many pods on a single node, RWOP PVCs can only be used by a single pod on a single node. For CSI drivers which support RWOP, the SELinux context mount from the pod or container is used to mount the volume directly with the correct SELinux labels. This eliminates the need to recursively relabel the volume and can make pod startup significantly faster.

However, please note that VSHN Managed OpenShift doesn’t yet support the ReadWriteOncePod access mode on all supported infrastructure providers. Please reach out to us if you’re interested in this feature.

Monitoring stack replaces prometheus-adapter with metrics-server

OpenShift 4.16 removes prometheus-adapter and introduces metrics-server to provide the metrics.k8s.io API. This should reduce load on the cluster monitoring Prometheus stack.

Exciting upcoming features

We’re also excited about multiple upcoming features which aren’t yet generally available in OpenShift 4.16:

Node disruption policies

We’re looking forward to the “Node disruption policy” feature which will allow us to deploy some node-level configuration changes without node reboots. This should reduce the need for scheduling node-level changes to be rolled out during maintenance, and will enable us to say confidently whether a node-level change requires a reboot or not.

Route with externally managed certificates

OpenShift 4.16 introduces support for routes with externally managed certificates as a tech preview feature. We’re planning to evaluate this feature and make it available in VSHN Managed OpenShift once it reaches general availability.

This feature will allow users to request certificates with cert-manager (for example from Let’s Encrypt) and reference the cert-manager managed secret which contains the certificate directly in the Route instead of having to create an Ingress resource (that’s then translated to an OpenShift Route) which references the cert-manager certificate.

Changes not relevant to VSHN customers

There are a number of network related changes in this release, but these are not relevant for VSHN managed clusters as these are mostly running Cilium. In particular, OVNKubernetes gains support for AdminNetworkPolicy resources, which provide a mechanism to deploy cluster-wide network policies. Please note that similar results should be achievable with Cilium’s CiliumClusterWideNetworkPolicy resources, and Cilium is actively working on implementing support for AdminNetworkPolicy.

Summary

OpenShift 4.16 brings deprecates some features which may require changes to your applications in order to make future upgrades as smooth as possible. Additionally, OpenShift 4.16 is the last release that supports OpenShift SDN as the network plugin and disables support for SHA-1 certificates in the ingress controller. For those interested in the nitty gritty details of the OpenShift 4.16 release, we refer you to the detailed Red Hat release notes, which go through everything in detail.

VSHN customers will be notified about the upgrades to their specific clusters in the near future.

Interested in VSHN Managed OpenShift?

Head over to our product page VSHN Managed OpenShift to learn more about how VSHN can help you operate your own OpenShift cluster including setup, 24/7 operation, monitoring, backup and maintenance. Hosted in a public cloud of your choice or on-premises in your own data center. 

Simon Gerber

Simon Gerber is a DevOps engineer in VSHN.

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us
OpenShift Tech

VSHN Managed OpenShift: Upgrade to OpenShift version 4.15

17. Jul 2024

As we start to prepare to rollout upgrades to OpenShift v4.15 across all our customers clusters it is a good opportunity to look again at what was in the Red Hat OpenShift 4.15 release. It brought Kubernetes 1.28 and CRI-O 1.28 and it was largely focused on small improvements in the core platform and enhancements to how OpenShift runs on underlying infrastructure including bare-metal and public cloud providers.

The Red Hat infographic highlights some of the key changes:

What’s New in Red Hat OpenShift 4.15 Infographic by Sunil Malagi

For our VSHN Managed OpenShift and APPUiO customers, we want to highlight the key changes in the release that are relevant for them.

Across all VSHN Managed OpenShift clusters – including APPUiO

Our summary highlights that apply are the following:

  • OpenShift 4.15 is based on Kubernetes 1.28 and CRI-O 1.28
  • Update to CoreDNS 1.11.1
  • There are some node enhancements (such faster builds for unprivileged pods, and compatibility of multiple image repository mirroring objects)
  • The release also brings updated versions for the monitoring stack (Alertmanager to 0.26.0, kube-state-metrics to 2.10.1, node-exporter to 1.7.0, Prometheus to 2.48.0, Prometheus Adapter to 0.11.2, Prometheus Operator to 0.70.0, Thanos Querier to 0.32.5)
  • It also includes some additional improvements and fixes to the monitoring stack
  • There are some changes to the Bare-Metal Operator so that it now automatically powers off any host that is removed from the cluster
  • There are some platform fixes including some security related ones like securing the cluster metrics port using TLS
  • OLM (Operator Lifecycle Management is being introduced as v1 and this brings three new life cycle classifications for cluster operators that are being introduced: Platform Aligned, for operators whose maintenance streams align with the OpenShift version; Platform Agnostic, for operators who make use of maintenance streams, but they don’t need to align with the OpenShift version; and Rolling Stream, for operators which use a single stream of rolling updates.

On VSHN Managed OpenShift clusters with optional features enabled

The changes that might relate to some VSHN Managed OpenShift customers who have optional features enabled would include:

  • OpenShift Service Mesh 2.5 based on Istio 1.18 and Kiali 1.73
  • Enhancements to RHOS Pipelines
  • Machine API – Defining a VMware vSphere failure domain for a control plane machine set (Technology Preview)
  • Updates to hosted control planes within OSCP
  • Bare-Metal hardware provisioning fixes

Changes not relevant to VSHN customers

There are a number of network related changes in this release, but these are not relevant for VSHN managed clusters as these are mostly running Cilium. It is also interesting to note the deprecation of the OpenShift SDN network plugin, which means no new clusters can leverage that setup. Additionally, there are new features related to specific cloud providers (like Oracle Cloud Infrastructure) or specific hardware stacks (like IBM Z or IBM Power).

The changes to handling storage and in particular storage appliances is also not relevant for VSHN customers as none of the storage features affect how we handle our storage on cloud providers or on-prem.

Features in OpenShift open to customer PoCs before we enable for all VSHN customers

We do have an interesting customer PoC with Red Hat OpenShift Virtualization which is an interesting feature that continues to mature in OpenShift 4.15. We are excited to see the outcome of this PoC and to potentially making that available to all our customers looking to leverage VMs inside OpenShift. We know due to the pricing changes from Broadcom that this is an area many companies and organizations are looking at. Moving from OpenShift running on vSphere to running on bare metal and having VMs inside OpenShift is an exciting transformation, and we hope to be able to bring an update on this in an upcoming separate blog post.

Likewise, we are open to customers who would like to explore leveraging OpenShift Serverless (now based on Knative 1.11 in Openshift 4.15) or perhaps with the new OpenShift Distributed Tracing Platform that is now at version 3.2.1 in the OpenShift 4.15 release (this version includes both the new platform based on Tempo and the now deprecated version based on Jaeger). This can also be used together with the Red Hat Open Telemetry Collector in OpenShift 4.15. There are also new versions of OpenShift Developer Hub (based on Backspace), OpenShift Dev Spaces and OpenShift Local. These are all interesting tools, part of the Red Hat OpenShift Container Platform.

If any of the various platform features are interesting for any existing or new VSHN customers, we would encourage you to reach out so we can discuss potentially doing a PoC together.

Summary

Overall, OpenShift 4.15 brings lots of small improvements but no major groundbreaking features from the perspective of the clusters run by VSHN customers. For those interested in the nitty gritty details of the OpenShift 4.15 release, we refer you to the detailed Red Hat release notes, which go through everything in detail.

VSHN customers will soon be notified about the upgrades to their specific clusters.

Interested in VSHN Managed OpenShift?

Head over to our product page VSHN Managed OpenShift to learn more about how VSHN can help you operate your own OpenShift cluster including setup, 24/7 operation, monitoring, backup and maintenance. Hosted in a public cloud of your choice or on-premises in your own data center. 

Markus Speth

Marketing, Communications, People

Contact us

Our team of experts is available for you. In case of emergency also 24/7.

Contact us