<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Gerard Samuel</title><link>https://gerardsamuel.me/posts/</link><description>Recent content in Posts on Gerard Samuel</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 06 Feb 2025 11:17:51 -0500</lastBuildDate><atom:link href="https://gerardsamuel.me/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Securing Cilium's Gateway Api with cert-manager</title><link>https://gerardsamuel.me/posts/how-to-secure-cilium-gateway-api-with-cert-manager/</link><pubDate>Thu, 06 Feb 2025 11:17:51 -0500</pubDate><guid>https://gerardsamuel.me/posts/how-to-secure-cilium-gateway-api-with-cert-manager/</guid><description>&lt;p&gt;In my Hashicorp &lt;a href="https://www.nomadproject.io/" target="_blank" rel="noreferrer"&gt;Nomad&lt;/a&gt; cluster, I am using &lt;a href="https://traefik.io/traefik/" target="_blank" rel="noreferrer"&gt;Traefik&lt;/a&gt; to proxy external connections to the running containers, and Traefik also terminates TLS connections. While it is perfectly okay to duplicate this role in Kubernetes, I decided to go another route and leverage Gateway API as the reverse proxy. To build upon my existing work with &lt;a href="https://gerardsamuel.me/posts/howto-setup-kubernetes-cilium-bgp-with-unifi-v4.1-router/" &gt;Gateway API&lt;/a&gt;, let me set up an HTTP/HTTPS proxy with redirection using Gateway API and secure it with &lt;a href="https://cert-manager.io/" target="_blank" rel="noreferrer"&gt;cert-manager&lt;/a&gt; and a few friends.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/how-to-secure-cilium-gateway-api-with-cert-manager/featured.png"/></item><item><title>Kubernetes BGP Connectivity with a UniFi router</title><link>https://gerardsamuel.me/posts/howto-setup-kubernetes-cilium-bgp-with-unifi-v4.1-router/</link><pubDate>Tue, 21 Jan 2025 18:24:57 -0500</pubDate><guid>https://gerardsamuel.me/posts/howto-setup-kubernetes-cilium-bgp-with-unifi-v4.1-router/</guid><description>&lt;p&gt;In my previous article on building a &lt;a href="https://gerardsamuel.me/posts/getting-started-with-talos-linux-on-proxmox/" &gt;Kubernetes cluster with Talos Linux&lt;/a&gt;, I used a Kubernetes Service of type NodePort to expose a workload to my homelab network. However, exposing workloads using NodePorts is not efficient or standard practice. In this article, I will document how I configured Cilium&amp;rsquo;s &lt;a href="https://docs.cilium.io/en/stable/network/servicemesh/gateway-api/gateway-api/#gateway-api-support" target="_blank" rel="noreferrer"&gt;Gateway API&lt;/a&gt; as a basic reverse proxy and &lt;a href="https://docs.cilium.io/en/stable/network/bgp-control-plane/bgp-control-plane/#cilium-bgp-control-plane" target="_blank" rel="noreferrer"&gt;BGP Control Plane&lt;/a&gt; to inject routing paths into the routing table of a UniFi router for the reverse proxy IP address.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/howto-setup-kubernetes-cilium-bgp-with-unifi-v4.1-router/featured.png"/></item><item><title>Getting started with Talos Linux on Proxmox</title><link>https://gerardsamuel.me/posts/getting-started-with-talos-linux-on-proxmox/</link><pubDate>Fri, 27 Dec 2024 12:35:34 -0500</pubDate><guid>https://gerardsamuel.me/posts/getting-started-with-talos-linux-on-proxmox/</guid><description>&lt;p&gt;So far in my container journey, I have used stand-alone hosts with &lt;a href="https://podman.io/" target="_blank" rel="noreferrer"&gt;Podman&lt;/a&gt; and Hashicorp &lt;a href="https://www.nomadproject.io/" target="_blank" rel="noreferrer"&gt;Nomad&lt;/a&gt; (again backed by Podman) for container orchestration. While these endeavors worked, they were not the most popular option for managing a containerized workload cluster. Enter Kubernetes. Some months ago, I successfully deployed &lt;a href="https://docs.rke2.io/" target="_blank" rel="noreferrer"&gt;RKE2&lt;/a&gt; with &lt;a href="https://www.rancher.com/" target="_blank" rel="noreferrer"&gt;Rancher&lt;/a&gt;, but the solution was not stable. For example, during host reboots, Pods may not come back in a healthy state. Recently, I learned about Talos Linux and decided to try it. This article documents my effort to set up a Talos cluster in Proxmox virtual machines.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/getting-started-with-talos-linux-on-proxmox/featured.png"/></item><item><title>Google Cloud Workload Identities with GitLab</title><link>https://gerardsamuel.me/posts/how-to-configure-google-cloud-workload-identities-with-gitlab/</link><pubDate>Mon, 25 Nov 2024 13:20:59 -0500</pubDate><guid>https://gerardsamuel.me/posts/how-to-configure-google-cloud-workload-identities-with-gitlab/</guid><description>&lt;p&gt;Using JSON keys to authenticate with Google Cloud is highly frowned upon. Unless you have no other &lt;a href="https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys" target="_blank" rel="noreferrer"&gt;option&lt;/a&gt;, Google Cloud provides a more secure means of authenticating externally executed code. My use case is for authentication in GitLab pipelines so that I can automate tasks. Think Terraform jobs or updating the files for a website stored in a Google Cloud storage bucket. I will use Google Cloud&amp;rsquo;s Workload Identity Federation solution and the OIDC (Open ID Connect) &lt;a href="https://openid.net/developers/how-connect-works/" target="_blank" rel="noreferrer"&gt;protocol&lt;/a&gt; in this solution.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/how-to-configure-google-cloud-workload-identities-with-gitlab/featured.png"/></item><item><title>How to setup a self-managed Podman Gitlab Runner</title><link>https://gerardsamuel.me/posts/how-to-setup-self-managed-podman-gitlab-runner/</link><pubDate>Mon, 18 Nov 2024 20:24:17 -0500</pubDate><guid>https://gerardsamuel.me/posts/how-to-setup-self-managed-podman-gitlab-runner/</guid><description>&lt;p&gt;I want to get my hands dirty with &lt;a href="https://en.wikipedia.org/wiki/CI/CD" target="_blank" rel="noreferrer"&gt;CI/CD&lt;/a&gt;. After looking around at cloud-hosted options such as Google Cloud Build and Azure DevOps/Pipelines, I decided to keep this process local by leveraging self-managed &lt;a href="https://docs.gitlab.com/ee/ci/pipelines/" target="_blank" rel="noreferrer"&gt;GitLab CI/CD pipelines&lt;/a&gt;.
To run a GitLab pipeline, you need only a special configuration file, &lt;code&gt;.gitlab-ci.yml&lt;/code&gt;, at the root of your GitLab project/repository and at least one or more compute resources to execute jobs. In this article, I will discuss how I set up a &lt;a href="https://docs.gitlab.com/runner/" target="_blank" rel="noreferrer"&gt;GitLab runner&lt;/a&gt; using &lt;a href="https://podman.io" target="_blank" rel="noreferrer"&gt;Podman&lt;/a&gt;.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/how-to-setup-self-managed-podman-gitlab-runner/featured.png"/></item><item><title>Google Cloud federation with Microsoft Entra ID - Part 2</title><link>https://gerardsamuel.me/posts/how-to-federate-google-cloud-entra-id-part2/</link><pubDate>Sat, 14 Sep 2024 13:23:00 -0500</pubDate><guid>https://gerardsamuel.me/posts/how-to-federate-google-cloud-entra-id-part2/</guid><description>&lt;p&gt;In my previous &lt;a href="https://gerardsamuel.me/posts/how-to-federate-google-cloud-entra-id-part1/" &gt;article&lt;/a&gt; on Google Cloud federation and account provisioning with Microsoft Entra ID, I showed how to get started to configure it. This article constitutes the second part, utilizing &lt;a href="https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language" target="_blank" rel="noreferrer"&gt;SAML&lt;/a&gt; authentication to complete the solution.
Once you complete the steps here, you will have a secure means of logging into Google Cloud with your Entra ID account.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/how-to-federate-google-cloud-entra-id-part2/featured.svg"/></item><item><title>Google Cloud federation with Microsoft Entra ID - Part 1</title><link>https://gerardsamuel.me/posts/how-to-federate-google-cloud-entra-id-part1/</link><pubDate>Sat, 07 Sep 2024 10:52:59 -0500</pubDate><guid>https://gerardsamuel.me/posts/how-to-federate-google-cloud-entra-id-part1/</guid><description>&lt;p&gt;I wanted to use a single account to log into my Azure and Google Cloud environments and automatically provision &amp;ldquo;source of truth&amp;rdquo; accounts from Entra ID to Google Cloud Identity. This article will explain how I configured account provisioning of the identity federation solution between Microsoft Entra ID and Google Cloud Identity.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/how-to-federate-google-cloud-entra-id-part1/featured.svg"/></item><item><title>How to Setup a Proxmox Cluster</title><link>https://gerardsamuel.me/posts/how-to-setup-a-proxmox-cluster/</link><pubDate>Fri, 02 Aug 2024 17:31:04 -0400</pubDate><guid>https://gerardsamuel.me/posts/how-to-setup-a-proxmox-cluster/</guid><description>&lt;p&gt;I needed a means of spinning up virtual machines to try out solutions such as Kubernetes or GitLab runners, etc, on a long-term basis. I did not want to incur the cost of running operating systems on Cloud Infrastructure. ESXi was definitely not happening, as Broadcom had muddied the waters at the time. At first, I tried &lt;a href="https://www.proxmox.com/en/" target="_blank" rel="noreferrer"&gt;Proxmox&lt;/a&gt;, and then I tried Suse &lt;a href="https://harvesterhci.io/" target="_blank" rel="noreferrer"&gt;Harvester&lt;/a&gt;. I contemplated &lt;a href="https://xcp-ng.org/" target="_blank" rel="noreferrer"&gt;XCP-ng&lt;/a&gt;. After weighing what I needed, I settled back to Proxmox VE.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/how-to-setup-a-proxmox-cluster/featured.webp"/></item><item><title>How to Setup Hashicorp Consul</title><link>https://gerardsamuel.me/posts/how-to-setup-hashicorp-consul/</link><pubDate>Sun, 28 Jul 2024 11:22:54 -0500</pubDate><guid>https://gerardsamuel.me/posts/how-to-setup-hashicorp-consul/</guid><description>&lt;p&gt;So what exactly is Hashicorp Consul? Here is what the Hashicorp has to &lt;a href="https://developer.hashicorp.com/consul/docs/intro" target="_blank" rel="noreferrer"&gt;say&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;HashiCorp Consul is a service networking solution that enables teams to manage secure network connectivity between services and across on-prem and multi-cloud environments and runtimes. Consul offers service discovery, service mesh, traffic management, and automated updates to network infrastructure devices.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;For the time being, I am targeting Consul&amp;rsquo;s service discovery features. In this article, I will show you how I went about this.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/how-to-setup-hashicorp-consul/featured.webp"/></item><item><title>Configuring Hashicorp Vault</title><link>https://gerardsamuel.me/posts/configuring-hashicorp-vault/</link><pubDate>Sun, 21 Jul 2024 21:32:35 -0400</pubDate><guid>https://gerardsamuel.me/posts/configuring-hashicorp-vault/</guid><description>&lt;p&gt;We have all been there. That newly installed application required confidential material to function. Where should that material be securely stored?
Or, you just took over ownership of a system where the database credentials are stored in plain text!
We all know (or should know) that protecting secrets is important. Just about anyone, intentional or not, could be a threat actor. Our trust and integrity depend on securing our secrets.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/configuring-hashicorp-vault/featured.webp"/></item><item><title>Getting Started With Smallstep</title><link>https://gerardsamuel.me/posts/getting-started-with-smallstep/</link><pubDate>Sun, 14 Jul 2024 14:20:35 -0400</pubDate><guid>https://gerardsamuel.me/posts/getting-started-with-smallstep/</guid><description>&lt;p&gt;I needed to host an internal PKI (Private Key Infrastructure) to test a secrets management solution.
Microsoft Windows PKI requires a complete Active Directory setup, which is overkill for what I needed. Plus, I wanted something open-source.
Smallstep&amp;rsquo;s step-ca is open source and is a well-featured private key solution.
This post will explain how I set it up using a Nitrokey HSM on a Raspberry Pi 4.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/getting-started-with-smallstep/featured.webp"/></item><item><title>Google Document AI: Bulk Import and Results</title><link>https://gerardsamuel.me/posts/google-document-ai-bulk-import-and-results/</link><pubDate>Mon, 20 Nov 2023 15:51:08 -0400</pubDate><guid>https://gerardsamuel.me/posts/google-document-ai-bulk-import-and-results/</guid><description>&lt;p&gt;Continuing from my last post on &lt;a href="https://gerardsamuel.me/posts/google-document-ai-how-to-get-started/" &gt;Document AI&lt;/a&gt;, I am going to show what the bulk import experience is like and a peek at the extracted data.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/google-document-ai-bulk-import-and-results/featured.webp"/></item><item><title>Google Document AI: How to Get Started</title><link>https://gerardsamuel.me/posts/google-document-ai-how-to-get-started/</link><pubDate>Wed, 18 Oct 2023 15:16:01 -0400</pubDate><guid>https://gerardsamuel.me/posts/google-document-ai-how-to-get-started/</guid><description>&lt;p&gt;Document AI is a Google Cloud solution that imports structured data from unstructured or semi structured documents.
The output can then be treated as first class data citizens for analysis with your other data sources to gain deeper insight from your “dark” document data.
In this first post on Document AI, I will go over the initial steps to get started.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://gerardsamuel.me/posts/google-document-ai-how-to-get-started/featured.webp"/></item></channel></rss>