<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Naren, writing about software</title>
    <link>https://nrnx.dev</link>
    <description>Notes on building software, the things that broke along the way, and what I learned fixing them.</description>
    <language>en-us</language>
    <lastBuildDate>Tue, 08 Sep 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://nrnx.dev/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Reach services across clouds with internal load balancers</title>
      <link>https://nrnx.dev/blog/reaching-services-across-clouds</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/reaching-services-across-clouds</guid>
      <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>One load balancer per service, or one Traefik routing by hostname. What each costs, why GKE pods need a masquerade fix, and how names resolve.</description>
      <category>Kubernetes</category>
      <category>Infrastructure</category>
      <category>Networking</category>
    </item>
    <item>
      <title>Connect GKE to AKS over a VPN, and prove it works</title>
      <link>https://nrnx.dev/blog/gke-to-aks-over-a-vpn</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/gke-to-aks-over-a-vpn</guid>
      <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Build the tunnel between Google Cloud and Azure with BGP, advertise only what should cross, then test four layers until real traffic flows.</description>
      <category>Kubernetes</category>
      <category>Infrastructure</category>
      <category>Networking</category>
    </item>
    <item>
      <title>Building an AI hyperscaler on Kubernetes</title>
      <link>https://nrnx.dev/blog/building-an-ai-hyperscaler-on-kubernetes</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/building-an-ai-hyperscaler-on-kubernetes</guid>
      <pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>How an AI cloud fits together on Kubernetes, from what customers actually buy and the seven layers between datacenter and console to four products on one GPU pool and how tenants share it safely, the lessons AWS and Google learned about cells and control planes, and what changes with scale.</description>
      <category>AI</category>
      <category>Kubernetes</category>
      <category>Infrastructure</category>
    </item>
    <item>
      <title>An SBOM is an ingredients list, not a safety check</title>
      <link>https://nrnx.dev/blog/what-an-sbom-is-for</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/what-an-sbom-is-for</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>What goes into a software bill of materials, what having one actually buys you, and the question it still cannot answer.</description>
      <category>Security</category>
      <category>Supply Chain</category>
    </item>
    <item>
      <title>How RSA works, without the number theory</title>
      <link>https://nrnx.dev/blog/how-rsa-works</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/how-rsa-works</guid>
      <pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Why a padlock anyone can check but only you can close is what actually holds up HTTPS, SSH and signed commits.</description>
      <category>Cryptography</category>
      <category>Security</category>
    </item>
    <item>
      <title>Sign and verify your first container image with Cosign</title>
      <link>https://nrnx.dev/blog/signing-images-with-cosign</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/signing-images-with-cosign</guid>
      <pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>From an unsigned image to a keyless signature anyone can verify, using Sigstore&apos;s public infrastructure. No key to lose.</description>
      <category>Security</category>
      <category>Supply Chain</category>
    </item>
    <item>
      <title>Moving Kubernetes workloads across an air gap with Hauler</title>
      <link>https://nrnx.dev/blog/air-gapped-delivery-with-hauler</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/air-gapped-delivery-with-hauler</guid>
      <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Declare images and charts in one manifest, package them into a single archive, carry it across, and serve it from a binary with no dependencies.</description>
      <category>Infrastructure</category>
      <category>Kubernetes</category>
      <category>Security</category>
    </item>
    <item>
      <title>Scanning images, filesystems and IaC with Trivy</title>
      <link>https://nrnx.dev/blog/scanning-with-trivy</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/scanning-with-trivy</guid>
      <pubDate>Mon, 21 Jul 2025 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>One scanner for container images, dependencies, Terraform and secrets: install it, read its output, and fail a build on the right things.</description>
      <category>Security</category>
      <category>Tooling</category>
      <category>Infrastructure</category>
    </item>
    <item>
      <title>Generate an SBOM from a container image with Syft</title>
      <link>https://nrnx.dev/blog/generating-sboms-with-syft</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/generating-sboms-with-syft</guid>
      <pubDate>Fri, 06 Jun 2025 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Install Syft, scan an image or a directory, choose an output format, and wire it into CI so every build produces one.</description>
      <category>Security</category>
      <category>Supply Chain</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>Building Kubernetes-as-a-Service from bare metal</title>
      <link>https://nrnx.dev/blog/building-kubernetes-as-a-service</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/building-kubernetes-as-a-service</guid>
      <pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>What it takes to run managed Kubernetes when you are the cloud, from hosted control planes, cells and etcd to networking, storage, upgrades and tenant isolation without cloud APIs, plus a version small enough to build on a laptop.</description>
      <category>Kubernetes</category>
      <category>Infrastructure</category>
      <category>Platform</category>
    </item>
    <item>
      <title>Getting a deeper SBOM out of cdxgen</title>
      <link>https://nrnx.dev/blog/deep-sboms-with-cdxgen</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/deep-sboms-with-cdxgen</guid>
      <pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>cdxgen reads your lockfiles and build system rather than the finished image. How to run it, and when that difference matters.</description>
      <category>Security</category>
      <category>Supply Chain</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>CycloneDX, the security-first bill of materials</title>
      <link>https://nrnx.dev/blog/cyclonedx-explained</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/cyclonedx-explained</guid>
      <pubDate>Wed, 19 Mar 2025 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>How CycloneDX models components, dependencies and vulnerabilities, and when to pick it over SPDX.</description>
      <category>Security</category>
      <category>Supply Chain</category>
    </item>
    <item>
      <title>Hello, again</title>
      <link>https://nrnx.dev/blog/hello-again</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/hello-again</guid>
      <pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Why I&apos;m starting a blog for the third time, and what I&apos;m going to do differently.</description>
      <category>Meta</category>
    </item>
    <item>
      <title>Troubleshooting cluster failures</title>
      <link>https://nrnx.dev/blog/troubleshooting-cluster-failures</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/troubleshooting-cluster-failures</guid>
      <pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>When a node, the control plane or the network fails, a structured workflow for finding the cause, and audit logs for reconstructing who did what.</description>
      <category>Kubernetes</category>
    </item>
    <item>
      <title>Debugging, monitoring and logging</title>
      <link>https://nrnx.dev/blog/debugging-monitoring-and-logging</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/debugging-monitoring-and-logging</guid>
      <pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>A systematic way to debug Pods, Services and Deployments, then the two things that make debugging possible, metrics with Prometheus and Grafana and centralized logs.</description>
      <category>Kubernetes</category>
    </item>
    <item>
      <title>SPDX, the licence-first bill of materials</title>
      <link>https://nrnx.dev/blog/spdx-explained</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/spdx-explained</guid>
      <pubDate>Tue, 12 Nov 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Where SPDX came from, how its document model is shaped, and why licence teams reach for it before security teams do.</description>
      <category>Security</category>
      <category>Supply Chain</category>
    </item>
    <item>
      <title>Runtime security: Falco, immutable containers and audit logs</title>
      <link>https://nrnx.dev/blog/runtime-security</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/runtime-security</guid>
      <pubDate>Mon, 04 Nov 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Watch a running cluster for attacks with Falco, stop running containers from being changed with a read-only root filesystem, and record every API request with audit logs.</description>
      <category>Kubernetes</category>
      <category>Security</category>
    </item>
    <item>
      <title>Supply chain security for Kubernetes</title>
      <link>https://nrnx.dev/blog/kubernetes-supply-chain-security</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/kubernetes-supply-chain-security</guid>
      <pubDate>Tue, 15 Oct 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Everything between a commit and a running Pod can be attacked. Minimal and signed images, scanning in CI, locked-down pipelines and secrets, and checks at runtime.</description>
      <category>Kubernetes</category>
      <category>Security</category>
      <category>Supply Chain</category>
    </item>
    <item>
      <title>Your first ten minutes in k9s</title>
      <link>https://nrnx.dev/blog/k9s-first-ten-minutes</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/k9s-first-ten-minutes</guid>
      <pubDate>Thu, 26 Sep 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Install it, point it at a cluster, and learn the handful of keys that replace most of the kubectl you type.</description>
      <category>Kubernetes</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>Pod security: PSA, AppArmor, seccomp and sandboxes</title>
      <link>https://nrnx.dev/blog/pod-security</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/pod-security</guid>
      <pubDate>Wed, 25 Sep 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Enforce Pod Security Standards per namespace, limit what a container can do with AppArmor and seccomp, and isolate untrusted workloads with gVisor or Kata Containers.</description>
      <category>Kubernetes</category>
      <category>Security</category>
    </item>
    <item>
      <title>Hardening a cluster: CIS benchmarks and API access</title>
      <link>https://nrnx.dev/blog/cis-benchmarks-and-api-access</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/cis-benchmarks-and-api-access</guid>
      <pubDate>Thu, 05 Sep 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Check a cluster against the CIS Kubernetes Benchmark with kube-bench, then control who can do what through the API server with authentication, RBAC and network policies.</description>
      <category>Kubernetes</category>
      <category>Security</category>
    </item>
    <item>
      <title>Git hooks that stop secrets before they land</title>
      <link>https://nrnx.dev/blog/git-hooks-that-catch-things</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/git-hooks-that-catch-things</guid>
      <pubDate>Thu, 22 Aug 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>A pre-commit hook that blocks AWS access key IDs, a commit-msg hook that enforces Conventional Commits, and Husky so a fresh clone arms them by itself.</description>
      <category>Engineering</category>
      <category>Security</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>Multi-container Pods: sidecars, ambassadors, adapters and init containers</title>
      <link>https://nrnx.dev/blog/multi-container-pods</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/multi-container-pods</guid>
      <pubDate>Fri, 16 Aug 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>When to put more than one container in a Pod, the three patterns for doing it, and init containers that run before your application starts.</description>
      <category>Kubernetes</category>
    </item>
    <item>
      <title>Liveness, readiness and startup probes</title>
      <link>https://nrnx.dev/blog/probes-and-health-checks</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/probes-and-health-checks</guid>
      <pubDate>Sat, 27 Jul 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>A running container is not always a working one. Probes tell Kubernetes when to restart a container, when to send it traffic, and when to wait out a slow start.</description>
      <category>Kubernetes</category>
    </item>
    <item>
      <title>Keeping a changelog people actually read</title>
      <link>https://nrnx.dev/blog/keeping-a-changelog</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/keeping-a-changelog</guid>
      <pubDate>Tue, 09 Jul 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>The six Keep a Changelog categories, why the Unreleased section is the part that makes it work, and what to automate.</description>
      <category>Engineering</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>ConfigMaps and Secrets</title>
      <link>https://nrnx.dev/blog/configmaps-and-secrets</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/configmaps-and-secrets</guid>
      <pubDate>Sun, 07 Jul 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Keep configuration out of your images with ConfigMaps, handle passwords and keys with Secrets, and know what base64 does and does not protect.</description>
      <category>Kubernetes</category>
      <category>Security</category>
    </item>
    <item>
      <title>Upgrading a cluster and backing up etcd</title>
      <link>https://nrnx.dev/blog/upgrades-and-etcd-backups</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/upgrades-and-etcd-backups</guid>
      <pubDate>Mon, 17 Jun 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Upgrade a kubeadm cluster one minor version at a time, control plane first, then take and restore etcd snapshots, because etcd holds the cluster&apos;s entire state.</description>
      <category>Kubernetes</category>
      <category>Infrastructure</category>
    </item>
    <item>
      <title>OpenSSL commands worth remembering</title>
      <link>https://nrnx.dev/blog/openssl-recipes</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/openssl-recipes</guid>
      <pubDate>Sat, 01 Jun 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Generate a key, make a CSR, inspect a certificate, debug a TLS handshake, and convert between the formats that keep breaking.</description>
      <category>Cryptography</category>
      <category>Security</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>Building a cluster with kubeadm</title>
      <link>https://nrnx.dev/blog/building-a-cluster-with-kubeadm</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/building-a-cluster-with-kubeadm</guid>
      <pubDate>Tue, 28 May 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Prepare the nodes, install a container runtime and the Kubernetes packages, bootstrap the control plane, add a network plugin and join the workers. Then what each core component does.</description>
      <category>Kubernetes</category>
      <category>Infrastructure</category>
    </item>
    <item>
      <title>Persistent storage: volumes, PVs, PVCs and StorageClasses</title>
      <link>https://nrnx.dev/blog/persistent-storage</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/persistent-storage</guid>
      <pubDate>Wed, 08 May 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>A container loses its files when it stops. Volumes, PersistentVolumes, PersistentVolumeClaims and StorageClasses are how Kubernetes keeps data that has to outlive it.</description>
      <category>Kubernetes</category>
      <category>Infrastructure</category>
    </item>
    <item>
      <title>Controlling Pod traffic with network policies</title>
      <link>https://nrnx.dev/blog/network-policies</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/network-policies</guid>
      <pubDate>Thu, 18 Apr 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Every Pod can reach every other Pod by default. Network policies cut that down to what you allow, starting from a default deny.</description>
      <category>Kubernetes</category>
      <category>Networking</category>
      <category>Security</category>
    </item>
    <item>
      <title>Reading the source beats reading the docs</title>
      <link>https://nrnx.dev/blog/reading-the-source</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/reading-the-source</guid>
      <pubDate>Mon, 15 Apr 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Docs tell you the happy path. The source tells you what actually happens when you leave it.</description>
      <category>Engineering</category>
      <category>TypeScript</category>
    </item>
    <item>
      <title>Services and Ingress: exposing your applications</title>
      <link>https://nrnx.dev/blog/services-and-ingress</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/services-and-ingress</guid>
      <pubDate>Fri, 29 Mar 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Give a changing set of Pods one stable address with a Service, choose the right Service type, and route outside traffic by host and path with Ingress.</description>
      <category>Kubernetes</category>
      <category>Networking</category>
    </item>
    <item>
      <title>Deployments, ReplicaSets, Jobs and CronJobs</title>
      <link>https://nrnx.dev/blog/deployments-jobs-and-cronjobs</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/deployments-jobs-and-cronjobs</guid>
      <pubDate>Sat, 09 Mar 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Run applications that stay up with Deployments and the ReplicaSets behind them, and tasks that finish with Jobs and CronJobs.</description>
      <category>Kubernetes</category>
    </item>
    <item>
      <title>The part of a migration nobody schedules</title>
      <link>https://nrnx.dev/blog/cost-of-a-migration</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/cost-of-a-migration</guid>
      <pubDate>Tue, 05 Mar 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>The migration itself takes a week. Deleting the old thing takes a year.</description>
      <category>Engineering</category>
      <category>Infrastructure</category>
    </item>
    <item>
      <title>Kubernetes objects: Pods, YAML and namespaces</title>
      <link>https://nrnx.dev/blog/pods-yaml-and-namespaces</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/pods-yaml-and-namespaces</guid>
      <pubDate>Sun, 18 Feb 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>What a Kubernetes object is, how a YAML manifest describes one, and the first two objects you will create, the Pod and the namespace.</description>
      <category>Kubernetes</category>
    </item>
    <item>
      <title>Your first Kubernetes cluster</title>
      <link>https://nrnx.dev/blog/your-first-kubernetes-cluster</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/your-first-kubernetes-cluster</guid>
      <pubDate>Mon, 29 Jan 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Install kubectl, then start a local cluster with Minikube or Kind and check that it answers.</description>
      <category>Kubernetes</category>
      <category>Tooling</category>
    </item>
    <item>
      <title>What Kubernetes is, and what a cluster is made of</title>
      <link>https://nrnx.dev/blog/what-is-kubernetes</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/what-is-kubernetes</guid>
      <pubDate>Tue, 09 Jan 2024 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Why containers need something to run them in production, and the two halves of every cluster, the control plane that decides and the worker nodes that do the work.</description>
      <category>Kubernetes</category>
    </item>
    <item>
      <title>Create a pre-signed URL for a Civo object store</title>
      <link>https://nrnx.dev/blog/civo-presigned-urls</link>
      <guid isPermaLink="true">https://nrnx.dev/blog/civo-presigned-urls</guid>
      <pubDate>Wed, 15 Mar 2023 00:00:00 GMT</pubDate>
      <dc:creator>Naren</dc:creator>
      <description>Upload a file to a Civo object store with s3cmd, then hand out a link that works for exactly one hour and then stops.</description>
      <category>Infrastructure</category>
      <category>Tooling</category>
      <category>Security</category>
    </item>
  </channel>
</rss>
