• The source code for this lab exercise is available on GitHub.

    GitOps is the practice of delivering infrastructure and applications in a declarative manner based on a single, authoritative source of truth. Oftentimes, the source of truth is defined within a Git repository, hence the term GitOps, though recent developments have started to decouple Git from GitOps with the source of truth defined in OCI artifacts instead in what is known as “Git-less GitOps”. Closely related is the concept of continuous delivery (CD) which is implemented in GitOps by continuously reconciling the actual state of the infrastructure and applications to match the desired configuration stored in the latest Git commit.

    Most GitOps implementations revolve around 2 CNCF Graduated projects:

    1. Flux: originally a WeaveWorks project; now spearheaded by ControlPlane
    2. Argo CD: actively developed on by startups and enterprise IT vendors such as Akuity and Red Hat

    This lab demonstrates the deployment of a sample podinfo application with GitOps using Argo CD deployed via the operator.

    (more…)
    + ,
  • Ceph is a distributed, scalable, fault-tolerant solution for provisioning block, file and object storage to applications.

    1. In Provisioning Ceph storage with cephadm, we provisioned a minimal Ceph cluster with cephadm and configured an RBD pool to provision block storage for applications
    2. In Running stateful workloads on Kubernetes with Rook Ceph, we deployed Ceph to Kubernetes with Rook using mostly default settings and provisioned block storage for MinIO with minimal effort

    While deploying Ceph to Kubernetes with Rook is simple and is sufficient for most Kubernetes use cases, certain scenarios may benefit from configuring Rook with an external Ceph cluster instead or as an additional option:

    1. Enables storage (Ceph) to scale independently of compute (Kubernetes)
    2. For large-scale deployments with high storage performance requirements best served by a dedicated Ceph cluster
    3. Sharing a Ceph cluster between Kubernetes clusters for multi-tenancy and maximizing storage utilization
    4. Deploying and managing Ceph separately from Kubernetes to separate administration duties among teams
    5. Providing additional storage capacity to Kubernetes workloads by deploying Ceph both internally and externally

    In the lab instructions to follow, we’ll configure a Ceph cluster with cephadm and configure Rook to connect to the external Ceph cluster.

    (more…)
    + ,
  • Ceph is an open source, distributed storage system for providing block, file and object storage to applications. Under the hood, Ceph manages all storage as objects within RADOS (Reliable Autonomic Distributed Object Store) and uses the CRUSH (Controlled Replication Under Scalable Hashing) algorithm to determine object placement.

    Common use cases of Ceph include:

    Ceph provides many options for deployment such as with Ansible, Puppet or Rook. In this lab, we’ll deploy a Ceph cluster with cephadm consisting of 3 nodes and 3 disks which we’ll use to provision a block device mounted to an external host. Note that this minimal setup is for demonstration purposes only and is not suitable for production.

    (more…)
    +
  • DISCLAIMER: The contents in this article must NOT be considered as official CKS training material by any means and is provided solely for reference. CKS candidates are strongly encouraged to consult official CNCF training content such as LFS260: Kubernetes Security Essentials and study independently for the exam.

    Encrypting data at rest and in transit should be part of any robust IT security strategy. Furthermore, a zero-trust approach to workload security mandates encryption in transit not only for north-south traffic but also east-west traffic. In Kubernetes, the latter corresponds to Pod-to-Pod communication.

    This article and accompanying hands-on lab demonstrates Pod-to-Pod encryption with Istio Ambient Mesh, also known as ambient mode.

    (more…)
    + , ,
  • I purchased the LFS260: Kubernetes Security Essentials course about a month ago and was working through the course material recently in preparation for the Certified Kubernetes Security Specialist (CKS) exam. The course included plenty of hands-on lab exercises covering each topic in detail which I followed through by creating a 2-node kubeadm cluster on AWS with Amazon EC2.

    (more…)
    + , ,
  • Inspired by How eBPF will solve Service Mesh – Goodbye Sidecars | Isovalent Blog

    Service meshes are an infrastructure layer designed for the microservices era and typically provide the following features on top of microservices-oriented platforms such as Kubernetes:

    • Resilient connectivity
    • L7 traffic management
    • Identity-based security
    • Observability and tracing
    • Transparency

    (source: “How eBPF will solve Service Mesh – Goodbye Sidecars | Isovalent Blog”)

    N.B. by microservices-oriented platforms such as Kubernetes, we really mean it’s the only such type of platform that is still relevant in 2025 and beyond. See LFS158x: Introduction to Kubernetes for a quick primer on Kubernetes and LFS144x: Introduction to Istio for a quick primer on the Istio service mesh.

    (more…)
    + , , ,
  • The source code for this lab exercise is available on GitHub.

    Apache Kafka (Kafka) is an open source event streaming platform governed by the vendor-neutral Apache Software Foundation. It is optimized for processing vast amounts of data in real time, focused on availability, reliability and scalability. At the heart of Kafka is the publish-subscribe (pub/sub) model, topics and messages, with producers writing (producing) messages to one or more topics and consumers reading (consuming) messages from one or more topics.

    (more…)
    + , ,
  • Recall that each Kubernetes request goes through 3 stages as it is evaluated by the API server:

    1. Authentication: who you are
    2. Authorization: what actions are allowed
    3. Admission control: additional validation and mutation checks before the finalized request is accepted (rejected)
    Kubernetes request flow

    See also: Controlling Access to the Kubernetes API | Kubernetes

    (more…)
    + ,
  • The source code for this lab exercise is available on GitHub.

    In our previous article Running stateful workloads on Kubernetes with Rook Ceph, we saw how Kubernetes CSI enables us to take volume snapshots on supported storage backends as a first step towards protecting our data on Kubernetes. However, snapshots operate at the infrastructure level so they do not understand how applications operate, manage and structure their data. This implies that snapshots, by nature, are crash-consistent but not application-consistent. For busy stateful workloads such as databases processing many transactions per second, crash-consistency is insufficient for data protection since in-progress transactions are not recorded so restoring from a snapshot may still lead to data loss and leave the application in an inconsistent state.

    Kanister provides a robust and flexible solution for defining your own actions for performing application-aware backups on Kubernetes. It is a CNCF sandbox project originally created by the Veeam Kasten team as an integral component of their enterprise-ready Kubernetes data protection platform. It does this by defining blueprints, which serve as templates for application-specific backup and restore logic. The backup administrator or application owner may then instantiate actions defined in these blueprints by creating ActionSets which perform the actual application-specific backup and recovery procedures.

    (more…)
    + , , ,
  • Keycloak is an open source identity provider (IdP) with single-sign on (SSO) capabilities. It supports the most widely used enterprise authentication protocols, namely OpenID Connect (OIDC), OAuth 2.0, and SAML. With Keycloak, users sign in once and share the same identity across multiple applications and platforms in a transparent manner. On the other hand, applications defer authentication to Keycloak using a standard protocol without managing the authentication flow themselves.

    (more…)
    + ,