<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Zero to Hero - cloud-native</title>
    <link rel="self" type="application/atom+xml" href="https://zerotohero.dev/tags/cloud-native/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://zerotohero.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2024-12-12T00:00:00+00:00</updated>
    <id>https://zerotohero.dev/tags/cloud-native/atom.xml</id>
    <entry xml:lang="en">
        <title>Understanding Docker&#x27;s 6MB Memory Limit: A Deep Dive</title>
        <published>2024-12-12T00:00:00+00:00</published>
        <updated>2024-12-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/inbox/docker-memory-limits/"/>
        <id>https://zerotohero.dev/inbox/docker-memory-limits/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/inbox/docker-memory-limits/">&lt;p&gt;Have you ever encountered this puzzling error message while working with Docker containers?&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Warning Failed 89s (x12 over 3m44s) kubelet Error: Error response from daemon: Minimum memory limit allowed is 6MB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you’re like many developers, your first instinct might be to check Kubernetes’ LimitRange resources:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; kubectl get limitrange&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;No&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; resources found&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;But wait - if there are no LimitRange resources defined, where is this 6MB limit coming from? Let’s dive deep into this common containerization puzzle.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-mystery-of-the-6mb-limit&quot;&gt;The Mystery of the 6MB Limit&lt;&#x2F;h2&gt;
&lt;p&gt;The key to understanding this issue lies in recognizing that this limit isn’t coming from Kubernetes at all - it’s actually a built-in restriction in Docker itself. This often surprises developers because it’s not documented prominently in Docker’s documentation.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;why-does-this-limit-exist&quot;&gt;Why Does This Limit Exist?&lt;&#x2F;h3&gt;
&lt;p&gt;The 6MB minimum memory limit serves as a critical safeguard in Docker’s architecture. It’s designed to prevent containers from being started with dangerously low memory limits that could lead to:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Immediate Out-of-Memory (OOM) kills&lt;&#x2F;li&gt;
&lt;li&gt;Unstable container behavior&lt;&#x2F;li&gt;
&lt;li&gt;System resource exhaustion&lt;&#x2F;li&gt;
&lt;li&gt;Cascading failures in container orchestration&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;configuration-options-what-can-you-do&quot;&gt;Configuration Options: What Can You Do?&lt;&#x2F;h2&gt;
&lt;p&gt;While this limit is hardcoded into Docker’s engine, you’re not entirely without options. Here are several approaches to dealing with this limitation:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-adjust-your-resource-allocation&quot;&gt;1. Adjust Your Resource Allocation&lt;&#x2F;h3&gt;
&lt;p&gt;The most straightforward solution is to ensure your containers have adequate memory allocation. If you’re hitting this limit, it’s worth questioning whether running with such minimal memory is truly optimal for your application.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-alternative-approaches&quot;&gt;2. Alternative Approaches&lt;&#x2F;h3&gt;
&lt;p&gt;If you absolutely need to work with very low memory limits, consider these options:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use Docker Swarm with Compatibility Mode&lt;&#x2F;strong&gt;: Running Docker Swarm with the &lt;code&gt;--compatibility&lt;&#x2F;code&gt; flag can alter how memory limits are interpreted&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Switch Container Runtimes&lt;&#x2F;strong&gt;: Consider using containerd or another container runtime that doesn’t impose this limitation&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Custom Docker Build&lt;&#x2F;strong&gt;: Though not recommended for production, you could technically modify Docker’s source code to adjust this limit&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;best-practices-and-recommendations&quot;&gt;Best Practices and Recommendations&lt;&#x2F;h2&gt;
&lt;p&gt;When working with container memory limits, consider these best practices:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Right-size Your Containers&lt;&#x2F;strong&gt;: Instead of trying to run with minimal memory, focus on appropriate sizing based on actual application needs&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Monitor Memory Usage&lt;&#x2F;strong&gt;: Use tools like cAdvisor or Prometheus to understand your actual memory usage patterns&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Test Thoroughly&lt;&#x2F;strong&gt;: Always test your containers under load to ensure memory limits are appropriate&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Document Your Settings&lt;&#x2F;strong&gt;: Make memory requirements and limits explicit in your deployment documentation&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;While Docker’s 6MB memory limit might seem restrictive at first, it’s actually a thoughtful safeguard that helps prevent potentially problematic container configurations. Understanding this limit - and working with it rather than against it - will help you build more reliable containerized applications.&lt;&#x2F;p&gt;
&lt;p&gt;Remember: Just because you can run a container with minimal memory doesn’t always mean you should. Focus on stability and reliability over minimal resource usage unless you have a compelling reason to do otherwise.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;additional-resources&quot;&gt;Additional Resources&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Docker Documentation on Resource Constraints&lt;&#x2F;li&gt;
&lt;li&gt;Kubernetes Memory Management Documentation&lt;&#x2F;li&gt;
&lt;li&gt;Container Runtime Comparisons&lt;&#x2F;li&gt;
&lt;li&gt;Memory Optimization Strategies for Containers&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Happy containerizing!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Building a Secure Webhook Server with Go and Docker: A Step-by-Step Guide</title>
        <published>2024-12-11T00:00:00+00:00</published>
        <updated>2024-12-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/go/docker-go/"/>
        <id>https://zerotohero.dev/go/docker-go/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/go/docker-go/">&lt;p&gt;In this tutorial, we’ll walk through the process of building and containerizing a secure webhook server using Go. We’ll cover everything from setting up the project structure to creating a production-ready Docker container.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;project-overview&quot;&gt;Project Overview&lt;&#x2F;h2&gt;
&lt;p&gt;Our webhook server is designed to handle secure GET requests with query parameters, process JSON data, and implement basic authentication. The server listens on port 8443 and includes detailed request logging for debugging purposes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Go 1.20 or later&lt;&#x2F;li&gt;
&lt;li&gt;Docker&lt;&#x2F;li&gt;
&lt;li&gt;Basic understanding of Go and Docker concepts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;project-structure&quot;&gt;Project Structure&lt;&#x2F;h2&gt;
&lt;p&gt;Let’s start with our project structure:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;├── Dockerfile&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;├── go.mod&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;└── main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;the-application-code&quot;&gt;The Application Code&lt;&#x2F;h2&gt;
&lt;p&gt;Our &lt;code&gt;main.go&lt;&#x2F;code&gt; implements a webhook server with the following features:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Secure parameter handling with URL decoding&lt;&#x2F;li&gt;
&lt;li&gt;JSON data processing&lt;&#x2F;li&gt;
&lt;li&gt;Path-based data retrieval&lt;&#x2F;li&gt;
&lt;li&gt;Detailed request logging&lt;&#x2F;li&gt;
&lt;li&gt;Basic authentication&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The server expects requests with a key parameter and returns JSON data based on the provided path. It includes basic security measures like key validation and proper error handling.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dependencies&quot;&gt;Dependencies&lt;&#x2F;h2&gt;
&lt;p&gt;Our &lt;code&gt;go.mod&lt;&#x2F;code&gt; file specifies the project dependencies:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;module vsecm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;scout&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;go&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CC241D;&quot;&gt; 1.23.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;require github&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;com&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;vmware&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;tanzu&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;secrets&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;manager&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;sdk v0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;28.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;&#x2F;&#x2F; ... other dependencies ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;dockerizing-the-application&quot;&gt;Dockerizing the Application&lt;&#x2F;h2&gt;
&lt;p&gt;The Dockerfile for our application uses a multi-stage build process to create a minimal and secure production image. Here’s a breakdown of our Dockerfile:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;docker&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Build stage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; golang:1.20-alpine &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;AS&lt;&#x2F;span&gt;&lt;span&gt; builder&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;WORKDIR&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Copy go mod and sum files&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span&gt; go.mod .&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Download all dependencies&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span&gt; go mod download&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Copy the source code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span&gt; main.go .&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Build the application&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span&gt; CGO_ENABLED=0 GOOS=linux go build -o webhook-server .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Final stage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; alpine:latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;WORKDIR&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;root&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Copy the binary from the builder stage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span&gt; --from=builder &#x2F;app&#x2F;webhook-server .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Expose the port the app runs on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;EXPOSE&lt;&#x2F;span&gt;&lt;span&gt; 8443&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Run the binary&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;CMD&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;&amp;quot;.&#x2F;webhook-server&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;key-features-of-our-dockerfile&quot;&gt;Key Features of Our Dockerfile:&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Multi-stage Build&lt;&#x2F;strong&gt;: We use a multi-stage build to keep our final image size small by only including the compiled binary.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dependency Management&lt;&#x2F;strong&gt;: The build stage properly handles Go module dependencies.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Static Binary&lt;&#x2F;strong&gt;: We compile a static binary that will run efficiently in the Alpine container.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security&lt;&#x2F;strong&gt;: Using Alpine as the base image reduces the attack surface of our container.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;building-and-running-the-container&quot;&gt;Building and Running the Container&lt;&#x2F;h2&gt;
&lt;p&gt;To build your Docker image:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; vsecm-scout .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To run the container:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; 8443:8443 vsecm-scout&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;best-practices-implemented&quot;&gt;Best Practices Implemented&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;URL parameter decoding for safe input handling&lt;&#x2F;li&gt;
&lt;li&gt;Basic authentication with key validation&lt;&#x2F;li&gt;
&lt;li&gt;Proper error handling and status codes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Docker Best Practices&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-stage builds for smaller images&lt;&#x2F;li&gt;
&lt;li&gt;Proper dependency management&lt;&#x2F;li&gt;
&lt;li&gt;Clear and maintainable Dockerfile structure&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Golang Best Practices&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Clear error handling&lt;&#x2F;li&gt;
&lt;li&gt;Structured logging&lt;&#x2F;li&gt;
&lt;li&gt;Clean code organization&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;testing-the-webhook-server&quot;&gt;Testing the Webhook Server&lt;&#x2F;h2&gt;
&lt;p&gt;Once running, you can test the webhook server with a curl command:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;http:&#x2F;&#x2F;localhost:8443&#x2F;webhook?key=key=coca-cola.cluster-001%26path=namespaces.cokeSystem.secrets.adminCredentials&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;This setup provides a solid foundation for a production-ready webhook server. The combination of Go’s robust standard library and Docker’s containerization makes it easy to deploy and scale this service in any environment.&lt;&#x2F;p&gt;
&lt;p&gt;Remember to always follow security best practices when deploying webhook servers in production environments, such as:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Using HTTPS in production&lt;&#x2F;li&gt;
&lt;li&gt;Implementing rate limiting&lt;&#x2F;li&gt;
&lt;li&gt;Adding more comprehensive authentication&lt;&#x2F;li&gt;
&lt;li&gt;Monitoring and logging&lt;&#x2F;li&gt;
&lt;li&gt;Regular security updates&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next Steps&lt;&#x2F;h2&gt;
&lt;p&gt;Consider enhancing the application with:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;TLS support&lt;&#x2F;li&gt;
&lt;li&gt;Rate limiting&lt;&#x2F;li&gt;
&lt;li&gt;Comprehensive logging&lt;&#x2F;li&gt;
&lt;li&gt;Metrics collection&lt;&#x2F;li&gt;
&lt;li&gt;Health check endpoints&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Happy coding!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Implementing Flexible Authentication Strategies in Go: A Real-World Example with External Secrets Operator</title>
        <published>2024-12-10T00:00:00+00:00</published>
        <updated>2024-12-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/go/auth-srategies/"/>
        <id>https://zerotohero.dev/go/auth-srategies/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/go/auth-srategies/">&lt;p&gt;In modern cloud-native applications, authentication requirements can vary significantly across different environments and use cases. In this post, I’ll share how we implemented a flexible authentication system for a webhook server that integrates with Kubernetes External Secrets Operator (ESO).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-challenge&quot;&gt;The Challenge&lt;&#x2F;h2&gt;
&lt;p&gt;Our webhook server needed to support different authentication methods depending on the deployment environment and security requirements. We wanted to support:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;JWT verification with a private key&lt;&#x2F;li&gt;
&lt;li&gt;JWKS-based verification (for Keycloak integration)&lt;&#x2F;li&gt;
&lt;li&gt;Simple shared secret authentication&lt;&#x2F;li&gt;
&lt;li&gt;An untrusted mode for development&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;the-solution-strategy-pattern&quot;&gt;The Solution: Strategy Pattern&lt;&#x2F;h2&gt;
&lt;p&gt;We decided to use the Strategy pattern to implement our authentication system. This pattern allows us to encapsulate different authentication methods and switch between them easily using environment variables.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s the core interface that defines our authentication strategy:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; AuthStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; interface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;    Authenticate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This simple interface allows us to implement different authentication methods while keeping the rest of our application code unchanged.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;implementing-the-strategies&quot;&gt;Implementing the Strategies&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-jwt-private-key-strategy&quot;&gt;1. JWT Private Key Strategy&lt;&#x2F;h3&gt;
&lt;p&gt;This strategy verifies JWTs using a private key stored in our secrets manager:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; JWTPrivateKeyStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    secretClient&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;vsecm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Client&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;s &lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;JWTPrivateKeyStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; Authenticate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    privateKey&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;secretClient&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;FetchPassword&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;jwt-private-key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; fmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Errorf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;failed to fetch private key: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;%v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;    &#x2F;&#x2F; JWT verification logic here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;2-jwks-strategy&quot;&gt;2. JWKS Strategy&lt;&#x2F;h3&gt;
&lt;p&gt;For integration with Keycloak or other OIDC providers, we implemented JWKS-based verification:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; JWKSStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    jwksURL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    keySet&lt;&#x2F;span&gt;&lt;span&gt;  jwk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;s &lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;JWKSStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; Authenticate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;    &#x2F;&#x2F; JWKS verification logic here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A key advantage of this approach is that we don’t need to store any secrets - we just use the public keys provided by the OIDC provider.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-shared-secret-strategy&quot;&gt;3. Shared Secret Strategy&lt;&#x2F;h3&gt;
&lt;p&gt;For simpler deployments, we implemented a basic shared secret authentication:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; SharedSecretStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    secretClient&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;vsecm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Client&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;s &lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;SharedSecretStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; Authenticate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    secret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;secretClient&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;FetchPassword&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;shared-secret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; fmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Errorf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;failed to fetch shared secret: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;%v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Secret comparison logic here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;4-untrusted-strategy-development-mode&quot;&gt;4. Untrusted Strategy (Development Mode)&lt;&#x2F;h3&gt;
&lt;p&gt;For development environments, we have a strategy that bypasses authentication:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; UntrustedStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;s &lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;UntrustedStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; Authenticate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;switching-between-strategies&quot;&gt;Switching Between Strategies&lt;&#x2F;h2&gt;
&lt;p&gt;The magic happens in our strategy factory:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; getAuthStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;()&lt;&#x2F;span&gt;&lt;span&gt; AuthStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    strategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; os&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Getenv&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;AUTH_STRATEGY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    switch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; strategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    case&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;jwt_private_key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;JWTPrivateKeyStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    case&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;jwks&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;JWKSStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    case&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;shared_secret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;SharedSecretStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    case&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;untrusted&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;UntrustedStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    default&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;        panic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;fmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Sprintf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;Unknown auth strategy: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; strategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;using-the-authentication-system&quot;&gt;Using the Authentication System&lt;&#x2F;h2&gt;
&lt;p&gt;The authentication system is implemented as middleware:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; authMiddleware&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;next&lt;&#x2F;span&gt;&lt;span&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;HandlerFunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;HandlerFunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    strategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; getAuthStrategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    return func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;ResponseWriter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;        authenticated&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; strategy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Authenticate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;            http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; fmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Sprintf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;Authentication error: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;%v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;),&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;                      http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;StatusInternalServerError&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        if !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;authenticated&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;            http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;Unauthorized&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;StatusUnauthorized&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;        next&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;ServeHTTP&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;benefits-of-this-approach&quot;&gt;Benefits of This Approach&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Flexibility&lt;&#x2F;strong&gt;: Easy to switch between authentication methods using environment variables.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Maintainability&lt;&#x2F;strong&gt;: Each authentication strategy is isolated in its own type.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Extensibility&lt;&#x2F;strong&gt;: New authentication methods can be added without changing existing code.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;&#x2F;strong&gt;: Proper separation of concerns and integration with secrets management.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Developer Experience&lt;&#x2F;strong&gt;: Easy to use development mode without compromising production security.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;real-world-usage&quot;&gt;Real-World Usage&lt;&#x2F;h2&gt;
&lt;p&gt;In our case, we’re using this system with the External Secrets Operator webhook. Here’s how we configure it in different environments:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Production&lt;&#x2F;strong&gt;: &lt;code&gt;AUTH_STRATEGY=jwks&lt;&#x2F;code&gt; for integration with Keycloak&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Staging&lt;&#x2F;strong&gt;: &lt;code&gt;AUTH_STRATEGY=jwt_private_key&lt;&#x2F;code&gt; for testing with our own JWT implementation&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Development&lt;&#x2F;strong&gt;: &lt;code&gt;AUTH_STRATEGY=untrusted&lt;&#x2F;code&gt; for rapid development&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;lessons-learned&quot;&gt;Lessons Learned&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start Simple&lt;&#x2F;strong&gt;: Begin with the simplest strategy that meets your needs.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Plan for Change&lt;&#x2F;strong&gt;: The Strategy pattern makes it easy to evolve your authentication system.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Security First&lt;&#x2F;strong&gt;: Even in development, have a clear path to production-grade security.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Matters&lt;&#x2F;strong&gt;: Environment-based configuration provides flexibility without complexity.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Building a flexible authentication system doesn’t have to be complicated. By using the Strategy pattern and good design principles, we created a system that’s both secure and adaptable to different environments and requirements.&lt;&#x2F;p&gt;
&lt;p&gt;Remember: security is not one-size-fits-all. The ability to adapt your authentication strategy to different environments and requirements is crucial for modern cloud-native applications.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Building a Secure Secrets Management Server in Go</title>
        <published>2024-12-10T00:00:00+00:00</published>
        <updated>2024-12-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/go/secure-secret-go-server-tls/"/>
        <id>https://zerotohero.dev/go/secure-secret-go-server-tls/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/go/secure-secret-go-server-tls/">&lt;p&gt;In modern cloud-native environments, managing secrets securely is crucial for maintaining the security of your infrastructure. This post walks through building a secure secrets management server in Go that handles TLS certificates and serves secrets via a REST API.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;overview&quot;&gt;Overview&lt;&#x2F;h2&gt;
&lt;p&gt;Our server needs to:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Fetch secrets from a secrets manager&lt;&#x2F;li&gt;
&lt;li&gt;Set up a TLS-enabled HTTP server&lt;&#x2F;li&gt;
&lt;li&gt;Serve specific secrets based on API requests&lt;&#x2F;li&gt;
&lt;li&gt;Handle secret paths and implement access control&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;implementation-details&quot;&gt;Implementation Details&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;secret-types-and-storage&quot;&gt;Secret Types and Storage&lt;&#x2F;h3&gt;
&lt;p&gt;The server handles two main types of secrets:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Infrastructure secrets (prefixed with &lt;code&gt;raw:vsecm-scout&lt;&#x2F;code&gt;)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;TLS certificates and keys&lt;&#x2F;li&gt;
&lt;li&gt;JWT signing keys&lt;&#x2F;li&gt;
&lt;li&gt;Other infrastructure-related secrets&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Application secrets (other &lt;code&gt;raw:&lt;&#x2F;code&gt; prefixed secrets)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Stored in a map for serving via the API&lt;&#x2F;li&gt;
&lt;li&gt;Can be accessed using path-based queries&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Here’s how we organize these secrets:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; (&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    jwtSecret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;      string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    secretsToServe&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt; map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;fetching-and-processing-secrets&quot;&gt;Fetching and Processing Secrets&lt;&#x2F;h3&gt;
&lt;p&gt;The server starts by fetching secrets from the secrets manager:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;sfr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; sentry&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Fetch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Fatalf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;Error fetching secrets: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;%v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It then processes these secrets, organizing them based on their prefix:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; secret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; secrets&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; secret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;[&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;Name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;].(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; secret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;[&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;].(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    switch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    case&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;raw:vsecm-scout-jwt-secret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;        jwtSecret&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    case&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;raw:vsecm-scout-crt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;        serverCert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;    &#x2F;&#x2F; ... other cases&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    default&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; strings&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;HasPrefix&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;raw:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt; &amp;amp;&amp;amp; !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;strings&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;HasPrefix&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;raw:vsecm-scout&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;            secretsToServe&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;strings&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;TrimPrefix&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;raw:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;)]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;tls-configuration&quot;&gt;TLS Configuration&lt;&#x2F;h3&gt;
&lt;p&gt;Security is paramount for a secrets management server. We use TLS to encrypt all communications:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;cert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; tls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;X509KeyPair&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;([]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;serverCert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;), []&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;byte&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;serverKey&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Fatalf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;Error loading server certificate and key: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;%v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; err&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;tlsConfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; := &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;tls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    Certificates&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;: []&lt;&#x2F;span&gt;&lt;span&gt;tls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Certificate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;cert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;},&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;server&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; := &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Server&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    Addr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;:      &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;:8443&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    TLSConfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; tlsConfig&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;api-implementation&quot;&gt;API Implementation&lt;&#x2F;h3&gt;
&lt;p&gt;The server exposes a webhook endpoint that serves secrets based on a key and path:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; webhookHandler&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;ResponseWriter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;Request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;    &#x2F;&#x2F; ... request validation ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; values&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Get&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    path&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; values&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Get&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;path&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    secretValue&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; exists&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; secretsToServe&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    if !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;exists&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;        http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;Invalid key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;StatusUnauthorized&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;    &#x2F;&#x2F; ... process and return the secret ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;path-based-secret-access&quot;&gt;Path-Based Secret Access&lt;&#x2F;h3&gt;
&lt;p&gt;The server implements a flexible path-based access system for secrets:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; getValueFromPath&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;data interface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{},&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; path&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;interface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{},&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;    parts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; strings&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Split&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;path&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; current&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; part&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; parts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        switch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; current&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;        case map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;interface&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;{}:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; ok&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; :=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;part&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;];&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; ok&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;                current&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; val&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;            }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;                return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; fmt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;Errorf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;key not found: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; part&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;        &#x2F;&#x2F; ... handle other cases ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; current&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This allows clients to access nested values within secrets using dot notation (e.g., “namespaces.cokeSystem.secrets.adminCredentials”).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;security-considerations&quot;&gt;Security Considerations&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;TLS&lt;&#x2F;strong&gt;: All communications are encrypted using TLS.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Access Control&lt;&#x2F;strong&gt;: Secrets are only served to clients with valid keys.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Path Validation&lt;&#x2F;strong&gt;: The server validates all path requests to prevent unauthorized access.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Error Handling&lt;&#x2F;strong&gt;: Careful error handling prevents information leakage.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;usage-example&quot;&gt;Usage Example&lt;&#x2F;h2&gt;
&lt;p&gt;To request a secret, clients make a GET request to the webhook endpoint:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;https:&#x2F;&#x2F;localhost:8443&#x2F;webhook?key=key=coca-cola.cluster-001&amp;amp;path=namespaces.cokeSystem.secrets.adminCredentials&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A89984;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The server will return the requested secret value if the key is valid and the path exists.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;future-improvements&quot;&gt;Future Improvements&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;JWT Validation&lt;&#x2F;strong&gt;: Implement JWT-based authentication using the stored JWT secret.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Rate Limiting&lt;&#x2F;strong&gt;: Add rate limiting to prevent brute force attacks.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Audit Logging&lt;&#x2F;strong&gt;: Implement detailed audit logging for all secret access.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Secret Rotation&lt;&#x2F;strong&gt;: Add support for automatic secret rotation.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Metrics&lt;&#x2F;strong&gt;: Add Prometheus metrics for monitoring.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Building a secure secrets management server requires careful attention to security details and proper handling of sensitive data. This implementation provides a solid foundation that can be extended based on specific requirements.&lt;&#x2F;p&gt;
&lt;p&gt;Remember that this is just one piece of a larger secrets management strategy. It should be combined with other security practices like:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Regular secret rotation&lt;&#x2F;li&gt;
&lt;li&gt;Strict access controls&lt;&#x2F;li&gt;
&lt;li&gt;Comprehensive audit logging&lt;&#x2F;li&gt;
&lt;li&gt;Network security controls&lt;&#x2F;li&gt;
&lt;li&gt;Regular security audits&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The complete code provides a secure and flexible solution for serving secrets in a cloud-native environment while maintaining security best practices.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Cross-Compiling Go Applications on M3 Macs: A Practical Guide</title>
        <published>2024-11-27T00:00:00+00:00</published>
        <updated>2024-11-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/go/cross-compilation/"/>
        <id>https://zerotohero.dev/go/cross-compilation/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/go/cross-compilation/">&lt;p&gt;Cross-compiling Go applications on Apple Silicon (M-series) Macs can be tricky, especially when dealing with CGO dependencies. In this guide, we’ll explore different approaches to building Go applications for multiple architectures, specifically targeting Linux (AMD64 and ARM64) and macOS (ARM64).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-challenge&quot;&gt;The Challenge&lt;&#x2F;h2&gt;
&lt;p&gt;When working with Go applications that use CGO, simple cross-compilation commands like &lt;code&gt;GOOS=linux GOARCH=amd64 go build&lt;&#x2F;code&gt; might not be sufficient. This is particularly true when:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Your application uses CGO-dependent packages&lt;&#x2F;li&gt;
&lt;li&gt;You need to build for multiple architectures&lt;&#x2F;li&gt;
&lt;li&gt;You’re working on an M-series Mac&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;initial-approach-local-cross-compilation&quot;&gt;Initial Approach: Local Cross-Compilation&lt;&#x2F;h2&gt;
&lt;p&gt;My first attempt involved using traditional cross-compilation tools. Here’s what I initially tried:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Linux ARM64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;CGO_ENABLED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOEXPERIMENT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;boringcrypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; go&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; keeper .&#x2F;app&#x2F;keeper&#x2F;cmd&#x2F;main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;CGO_ENABLED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOEXPERIMENT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;boringcrypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; go&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; nexus .&#x2F;app&#x2F;nexus&#x2F;cmd&#x2F;main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;CGO_ENABLED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOEXPERIMENT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;boringcrypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; go&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; spike .&#x2F;app&#x2F;spike&#x2F;cmd&#x2F;main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;However, when trying to cross-compile for different architectures, I ran into issues:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;GOOS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;linux&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOARCH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;amd64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; CGO_ENABLED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOEXPERIMENT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;boringcrypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; go&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; nexus-linux-amd64 .&#x2F;app&#x2F;nexus&#x2F;cmd&#x2F;main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This approach failed because it needed proper cross-compilation toolchains.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-solution-docker-based-cross-compilation&quot;&gt;The Solution: Docker-Based Cross-Compilation&lt;&#x2F;h2&gt;
&lt;p&gt;After exploring various options, I found that using Docker for cross-compilation provides the most reliable and reproducible solution. Here’s how to implement it:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;First, create a Dockerfile:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;docker&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; golang:1.21-alpine &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;AS&lt;&#x2F;span&gt;&lt;span&gt; builder&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Install build tools&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span&gt; apk add --no-cache gcc musl-dev&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Set working directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;WORKDIR&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Copy go mod files&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span&gt; go.mod go.sum .&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span&gt; go mod download&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Copy source code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span&gt; . .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Build for different platforms&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FB4934;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span&gt; GOOS=linux GOARCH=amd64 CGO_ENABLED=0 GOEXPERIMENT=boringcrypto go build -o keeper-linux-amd64 .&#x2F;app&#x2F;keeper&#x2F;cmd&#x2F;main.go &amp;amp;&amp;amp; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    GOOS=linux GOARCH=amd64 CGO_ENABLED=1 GOEXPERIMENT=boringcrypto go build -o nexus-linux-amd64 .&#x2F;app&#x2F;nexus&#x2F;cmd&#x2F;main.go &amp;amp;&amp;amp; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    GOOS=linux GOARCH=amd64 CGO_ENABLED=0 GOEXPERIMENT=boringcrypto go build -o spike-linux-amd64 .&#x2F;app&#x2F;spike&#x2F;cmd&#x2F;main.go &amp;amp;&amp;amp; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    GOOS=linux GOARCH=arm64 CGO_ENABLED=0 GOEXPERIMENT=boringcrypto go build -o keeper-linux-arm64 .&#x2F;app&#x2F;keeper&#x2F;cmd&#x2F;main.go &amp;amp;&amp;amp; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    GOOS=linux GOARCH=arm64 CGO_ENABLED=1 GOEXPERIMENT=boringcrypto go build -o nexus-linux-arm64 .&#x2F;app&#x2F;nexus&#x2F;cmd&#x2F;main.go &amp;amp;&amp;amp; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    GOOS=linux GOARCH=arm64 CGO_ENABLED=0 GOEXPERIMENT=boringcrypto go build -o spike-linux-arm64 .&#x2F;app&#x2F;spike&#x2F;cmd&#x2F;main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Create a build script:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Build the Docker image&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; go-cross-compiler .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Create a container and copy the binaries&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; create&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; --name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; temp-container go-cross-compiler&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; cp temp-container:&#x2F;app&#x2F;keeper-linux-amd64 .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; cp temp-container:&#x2F;app&#x2F;nexus-linux-amd64 .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; cp temp-container:&#x2F;app&#x2F;spike-linux-amd64 .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; cp temp-container:&#x2F;app&#x2F;keeper-linux-arm64 .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; cp temp-container:&#x2F;app&#x2F;nexus-linux-arm64 .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; cp temp-container:&#x2F;app&#x2F;spike-linux-arm64 .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #928374;font-style: italic;&quot;&gt;# Clean up&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; rm temp-container&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;advantages-of-the-docker-approach&quot;&gt;Advantages of the Docker Approach&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reproducibility&lt;&#x2F;strong&gt;: The build environment is consistent across different development machines&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;No Local Dependencies&lt;&#x2F;strong&gt;: No need to install cross-compilation tools locally&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Simplified Process&lt;&#x2F;strong&gt;: One command builds all targets&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Consistent Results&lt;&#x2F;strong&gt;: Binaries are built in a controlled environment&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Easy CI&#x2F;CD Integration&lt;&#x2F;strong&gt;: The Docker-based approach works well in automated pipelines&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;building-for-macos-arm64&quot;&gt;Building for macOS ARM64&lt;&#x2F;h2&gt;
&lt;p&gt;For macOS ARM64 builds, you can still build natively on your M-series Mac:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;GOOS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;darwin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOARCH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;arm64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; CGO_ENABLED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOEXPERIMENT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;boringcrypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; go&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; keeper-darwin-arm64 .&#x2F;app&#x2F;keeper&#x2F;cmd&#x2F;main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;GOOS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;darwin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOARCH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;arm64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; CGO_ENABLED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOEXPERIMENT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;boringcrypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; go&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; nexus-darwin-arm64 .&#x2F;app&#x2F;nexus&#x2F;cmd&#x2F;main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;GOOS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;darwin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOARCH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;arm64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; CGO_ENABLED&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #83A598;&quot;&gt; GOEXPERIMENT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;boringcrypto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt; go&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; spike-darwin-arm64 .&#x2F;app&#x2F;spike&#x2F;cmd&#x2F;main.go&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;common-pitfalls-and-solutions&quot;&gt;Common Pitfalls and Solutions&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CGO Dependencies&lt;&#x2F;strong&gt;: When &lt;code&gt;CGO_ENABLED=1&lt;&#x2F;code&gt;, ensure your Docker container has the necessary build tools installed&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Architecture Mismatch&lt;&#x2F;strong&gt;: Double-check &lt;code&gt;GOOS&lt;&#x2F;code&gt; and &lt;code&gt;GOARCH&lt;&#x2F;code&gt; values match your target platforms&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Build Tags&lt;&#x2F;strong&gt;: Consider using build tags for platform-specific code&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Static Linking&lt;&#x2F;strong&gt;: For better portability, use &lt;code&gt;CGO_ENABLED=0&lt;&#x2F;code&gt; when possible&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;While cross-compilation on M-series Macs presents some challenges, using Docker provides a robust and maintainable solution. This approach simplifies the build process and ensures consistent results across different architectures.&lt;&#x2F;p&gt;
&lt;p&gt;For projects that don’t require CGO, you might still use direct cross-compilation. However, for complex projects with CGO dependencies, the Docker-based approach is recommended.&lt;&#x2F;p&gt;
&lt;p&gt;Remember to version your build scripts and Dockerfile alongside your project code to maintain build reproducibility across your team.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Keep Your Secrets... Secret: Introducing VMware Secrets Manager</title>
        <published>2023-08-16T00:00:00+00:00</published>
        <updated>2023-08-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/top-of-mind/keep-your-secrets/"/>
        <id>https://zerotohero.dev/top-of-mind/keep-your-secrets/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/top-of-mind/keep-your-secrets/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;size&#x2F;w1200&#x2F;2024&#x2F;03&#x2F;VSecM-1.png&quot; alt=&quot;Keep Your Secrets… Secret: Introducing VMware Secrets Manager&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In the ever-evolving landscape of cloud-native applications, secrets management
is critical to ensuring sensitive information’s security and integrity. While
several solutions are available, the recent shift in HashiCorp’s licensing
towards a Business Source License (BSL) has raised concerns and sparked
discussions within the community.&lt;&#x2F;p&gt;
&lt;p&gt;As the lead architect of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;&quot;&gt;&lt;strong&gt;VMware Secrets Manager&lt;&#x2F;strong&gt; (&lt;strong&gt;&lt;em&gt;VSecM&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;)&lt;&#x2F;a&gt;,
I’d like to take this opportunity to introduce our solution, which offers a robust,
flexible, and &lt;strong&gt;permissive&lt;&#x2F;strong&gt; alternative to HashiCorp’s Vault.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⭐️ Star Us on GitHub ⭐️&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you find value in our approach and want to help others discover this
outstanding technology, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vmware-tanzu&#x2F;secrets-manager&quot;&gt;&lt;strong&gt;star our GitHub
repository&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. Your support helps
increase visibility and encourages more collaboration and innovation within the
community.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;a-new-licensing-landscape&quot;&gt;A New Licensing Landscape&lt;&#x2F;h2&gt;
&lt;p&gt;HashiCorp’s decision to adopt a Business Source License has been viewed by some
as a restrictive move. The BSL, unlike open-source licenses, imposes certain
limitations and conditions that may not align with the needs and values of all
organizations and developers.&lt;&#x2F;p&gt;
&lt;p&gt;In contrast, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;&quot;&gt;&lt;strong&gt;VMware Secrets Manager&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is licensed under
the BSD 2-Clause License, a permissive open-source license that encourages
collaboration, innovation, and freedom of use.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vmware-secrets-manager-a-closer-look&quot;&gt;VMware Secrets Manager: A Closer Look&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;VSecM&lt;&#x2F;strong&gt; is designed with modern developers and DevOps professionals in mind.
Here’s why it stands out:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ease of Use&lt;&#x2F;strong&gt;: With a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;docs&#x2F;quickstart&#x2F;&quot;&gt;&lt;strong&gt;Quickstart Guide&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;,
intuitive &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;docs&#x2F;cli&#x2F;&quot;&gt;&lt;strong&gt;CLI&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;, and developer-friendly
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;docs&#x2F;sdk&#x2F;&quot;&gt;&lt;strong&gt;SDK&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;, &lt;strong&gt;VSecM&lt;&#x2F;strong&gt; simplifies secrets management
without compromising security.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes Is a First-Class Citizen&lt;&#x2F;strong&gt;: &lt;strong&gt;VSecM&lt;&#x2F;strong&gt; seamlessly integrates with
Kubernetes, leveraging &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spiffe.io&#x2F;docs&#x2F;latest&#x2F;spire-about&#x2F;&quot;&gt;&lt;strong&gt;SPIRE&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;
for authentication and offering flexible secret storage and transformation
options.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Community Engagement&lt;&#x2F;strong&gt;: We believe in open collaboration and
community-driven development. Our &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;docs&#x2F;contributing&#x2F;&quot;&gt;&lt;strong&gt;Contributing Guide&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;
invites developers to get involved, ask questions, and contribute to the project.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Secure by Default&lt;&#x2F;strong&gt;: &lt;strong&gt;VSecM&lt;&#x2F;strong&gt; offers advanced security features, including
encryption, manual master secret setting, and integration with various backing
stores.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;join-the-future-of-secrets-management&quot;&gt;Join the Future of Secrets Management&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;VMware Secrets Manager&lt;&#x2F;strong&gt; is more than just a tool; it’s a community-driven
project that aims to redefine secrets management in a cloud-native world. We
invite you to explore &lt;strong&gt;VSecM&lt;&#x2F;strong&gt;, contribute to its growth, and join us in
shaping the future of secure and resilient applications.&lt;&#x2F;p&gt;
&lt;p&gt;Whether you’re a developer looking to contribute or an organization seeking a
flexible and secure solution for secrets management, &lt;strong&gt;VSecM&lt;&#x2F;strong&gt; offers a
welcoming and innovative platform.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;this-is-just-the-beginning-a-vision-for-the-future&quot;&gt;This is Just the Beginning: A Vision for the Future&lt;&#x2F;h3&gt;
&lt;p&gt;At &lt;strong&gt;VMware Secrets Manager&lt;&#x2F;strong&gt;, we believe in continuous innovation and growth.
Our &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;docs&#x2F;roadmap&quot;&gt;&lt;strong&gt;roadmap&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a testament to our
commitment to delivering cutting-edge solutions that meet the evolving needs of
the cloud-native community.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s a glimpse of what’s on the horizon:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stability and Usability Enhancements&lt;&#x2F;strong&gt;: Upcoming releases focus on improving
stability, documentation, build automation, and overall user experience.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Innovative Features&lt;&#x2F;strong&gt;: From Secretless VSecM to machine-readable logs,
performance improvements, and large-scale secret ingestion, we’re pushing the
boundaries of what’s possible in secrets management.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Integration and Compatibility&lt;&#x2F;strong&gt;: Future iterations include integration with
AWS KMS, Azure Key Vault, Google Cloud KMS, and even HashiCorp Vault,
expanding the reach and compatibility of VSecM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Community Development and Collaboration&lt;&#x2F;strong&gt;: We’re investing in community
development efforts, multi-cluster secret federation, and creating
abstractions to make cloud integrations easier.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Our roadmap is not just a plan; it’s a promise to our users and contributors
that we have a lot planned for the future of VMware Secrets Manager. We’re
excited about the journey ahead and invite you to be a part of it.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⭐️ Star Us on GitHub ⭐️&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you find value in our approach and want to help others discover this
outstanding technology, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vmware-tanzu&#x2F;secrets-manager&quot;&gt;&lt;strong&gt;star our GitHub repository&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;.
Your support helps increase visibility and encourages more collaboration and
innovation within the community.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;help-us-shape-the-future&quot;&gt;Help Us Shape the Future&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;&quot;&gt;&lt;strong&gt;Start your journey with VMware Secrets Manager today&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;
and unlock the potential of cloud-native secrets management.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;section-contents&quot;&gt;Section Contents&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;old-man-yelling-at-the-corpus&#x2F;&quot;&gt;Old Man Yelling at the Corpus&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;closure&#x2F;&quot;&gt;Closure&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;consume-less&#x2F;&quot;&gt;Consume Less&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Catch 22&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;dumb-quotes&#x2F;&quot;&gt;Embracing Simplicity: Why I’ve Given Up on Smart Quotes and Other Typographic Niceties&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;perception-pivot&#x2F;&quot;&gt;Transform Feedback into Professional Mastery&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;trust&#x2F;&quot;&gt;Trust Cultivates a Cohesive Team&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;content-creation&#x2F;psst-you-dont-have-to-use-medium&#x2F;&quot;&gt;Psst… You Don’t Have to Use Medium&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;new-z2h-design&#x2F;&quot;&gt;The New Zero to Hero Design&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;the-dream-job&#x2F;&quot;&gt;Build Strong Connections to Land Your Dream Job&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;keep-your-secrets&#x2F;&quot;&gt;Keep Your Secrets… Secret&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;vmware-secrets-manager&#x2F;&quot;&gt;Long Live Aegis!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;content-creation&#x2F;write-to-forget&#x2F;&quot;&gt;Write to Forget&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;content-creation&#x2F;craft-captivating-documentation&#x2F;&quot;&gt;Craft Captivating Documentation&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;reshape-your-workspace&#x2F;&quot;&gt;Reshape Your Workspace, Reshape Your Future&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;secrets&#x2F;&quot;&gt;Secrets&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;later-does-not-exist&#x2F;&quot;&gt;‘Later’ Does Not Exist&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;probing-questions&#x2F;&quot;&gt;Embracing Daily Reflection&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Long Live Aegis!</title>
        <published>2023-08-03T00:00:00+00:00</published>
        <updated>2023-08-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/top-of-mind/vmware-secrets-manager/"/>
        <id>https://zerotohero.dev/top-of-mind/vmware-secrets-manager/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/top-of-mind/vmware-secrets-manager/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;size&#x2F;w1200&#x2F;2024&#x2F;03&#x2F;aegis.png&quot; alt=&quot;Long Live Aegis!&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Dear community,&lt;&#x2F;p&gt;
&lt;p&gt;I am thrilled to share an update with all of you. &lt;strong&gt;Aegis&lt;&#x2F;strong&gt; has transformed and
landed into its new home! It is now entering a phase as **VMware Secrets Manager
** for Cloud-Native workloads!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vmware-tanzu&#x2F;secrets-manager&quot;&gt;Please learn more about our project in the repository
following this link&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Also, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;&quot;&gt;stay updated with us on our website at &lt;strong&gt;vsecm.com&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;coming-up-next&quot;&gt;Coming Up Next&lt;&#x2F;h2&gt;
&lt;p&gt;This change represents more than just a new name. It symbolizes our unwavering
dedication to pushing boundaries, fostering innovation, and delivering reliable
solutions for your cloud-native workloads.&lt;&#x2F;p&gt;
&lt;p&gt;As things settle down, we’re already busy planning our steps. You can keep track
of our progress.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;docs&#x2F;roadmap&#x2F;&quot;&gt;Follow our plans in our roadmap page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We aim to provide how the project will proceed as transparently as possible. Of
course, our contribution cadence and frequency depend on the availability and
commitment of our core contributors.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stronger-together&quot;&gt;Stronger Together&lt;&#x2F;h2&gt;
&lt;p&gt;While Aegis has served us well, &lt;strong&gt;VMware Secrets Manager&lt;&#x2F;strong&gt; under VMware Tanzu
GitHub organization opens up possibilities. It brings us closer to fulfilling
our promise of offering you an efficient, secure, and cutting-edge cloud-native
Secrets Management solution.&lt;&#x2F;p&gt;
&lt;p&gt;We are thrilled about this chapter and eagerly anticipate serving you, our
community, as we move forward. Your contributions and feedback mean the world to
us.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;who-else-wants-to-contribute&quot;&gt;Who Else Wants to Contribute?&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;docs&#x2F;community&#x2F;&quot;&gt;Feel free to reach out if you’re interested in contributing to &lt;strong&gt;VMware Secrets
Manager&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Stay tuned for updates and developments as we continue on this journey.&lt;&#x2F;p&gt;
&lt;p&gt;Thank you very much for your support!&lt;&#x2F;p&gt;
&lt;p&gt;Turtle power 🐢⚡️.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;section-contents&quot;&gt;Section Contents&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;old-man-yelling-at-the-corpus&#x2F;&quot;&gt;Old Man Yelling at the Corpus&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;closure&#x2F;&quot;&gt;Closure&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;consume-less&#x2F;&quot;&gt;Consume Less&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;catch-22&#x2F;&quot;&gt;Catch 22&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;dumb-quotes&#x2F;&quot;&gt;Embracing Simplicity: Why I’ve Given Up on Smart Quotes and Other Typographic Niceties&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;perception-pivot&#x2F;&quot;&gt;Transform Feedback into Professional Mastery&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;trust&#x2F;&quot;&gt;Trust Cultivates a Cohesive Team&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;content-creation&#x2F;psst-you-dont-have-to-use-medium&#x2F;&quot;&gt;Psst… You Don’t Have to Use Medium&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;new-z2h-design&#x2F;&quot;&gt;The New Zero to Hero Design&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;the-dream-job&#x2F;&quot;&gt;Build Strong Connections to Land Your Dream Job&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;keep-your-secrets&#x2F;&quot;&gt;Keep Your Secrets… Secret&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;vmware-secrets-manager&#x2F;&quot;&gt;Long Live Aegis!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Write to Forget&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;content-creation&#x2F;craft-captivating-documentation&#x2F;&quot;&gt;Craft Captivating Documentation&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;reshape-your-workspace&#x2F;&quot;&gt;Reshape Your Workspace, Reshape Your Future&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;secrets&#x2F;&quot;&gt;Secrets&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;later-does-not-exist&#x2F;&quot;&gt;‘Later’ Does Not Exist&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;top-of-mind&#x2F;probing-questions&#x2F;&quot;&gt;Embracing Daily Reflection&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Unlock Your True Potential: Make Your Hard Work Visible</title>
        <published>2023-01-16T00:00:00+00:00</published>
        <updated>2023-01-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/highlights/issue-0025/"/>
        <id>https://zerotohero.dev/highlights/issue-0025/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/highlights/issue-0025/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0025&#x2F;&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;stand.png&quot; alt=&quot;Show yourself.&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;Show yourself.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update 2024-05-21&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aegis&lt;&#x2F;strong&gt; is now maintained by &lt;strong&gt;VMware Tanzu&lt;&#x2F;strong&gt; GitHub Organization
with a new name: &lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;&quot;&gt;VMware Secrets Manager&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It is ready for production use, and as the time of this writing we
are already using it in production clusters.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Welcome to the 25th issue of &lt;strong&gt;Zero to Hero&lt;&#x2F;strong&gt; Highlights.&lt;&#x2F;p&gt;
&lt;p&gt;Several things have been going on, yet I think this week’s highlight was
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vsecm.com&#x2F;&quot;&gt;&lt;strong&gt;Aegis&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. It has been very well received by people who
are well-known in the Cloud Native security community, and I have a feeling it
is growing to become a bit more than a side project, but we’ll see.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aegis-keep-your-secrets-secret&quot;&gt;Aegis: Keep Your Secrets… Secret&lt;&#x2F;h2&gt;
&lt;p&gt;As I said, last week was mainly about &lt;strong&gt;Aegis&lt;&#x2F;strong&gt;, but what is &lt;strong&gt;Aegis&lt;&#x2F;strong&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vmware-tanzu&#x2F;secrets-manager&quot;&gt;&lt;strong&gt;Aegis&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is a Kubernetes-native, lightweight secrets management
solution that keeps your secrets secret. And last week, I made significant
progress with it.&lt;&#x2F;p&gt;
&lt;p&gt;Some key highlights of the current version are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Upgraded &lt;strong&gt;Aegis&lt;&#x2F;strong&gt; to the latest and greatest &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spiffe.io&#x2F;&quot;&gt;&lt;strong&gt;SPIRE&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;
version as the identity control plane. That gave a bunch of stability
improvements and reduced memory usage significantly.&lt;&#x2F;li&gt;
&lt;li&gt;A lot of documentation updates to make &lt;strong&gt;Aegis&lt;&#x2F;strong&gt; easier to use and deploy.&lt;&#x2F;li&gt;
&lt;li&gt;Making everything configurable via environment variables.&lt;&#x2F;li&gt;
&lt;li&gt;Added &lt;strong&gt;liveness&lt;&#x2F;strong&gt; and &lt;strong&gt;readiness&lt;&#x2F;strong&gt; probes to critical components for
Kubernetes-native lifecycle management.&lt;&#x2F;li&gt;
&lt;li&gt;Started using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;GoogleContainerTools&#x2F;distroless&quot;&gt;&lt;strong&gt;distroless images&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;
for an additional layer of security.&lt;&#x2F;li&gt;
&lt;li&gt;Using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;spiffe&#x2F;spiffe-csi&quot;&gt;&lt;strong&gt;SPIFFE CSI driver&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; instead of
volume mounts (&lt;em&gt;for security again&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Although &lt;strong&gt;Aegis&lt;&#x2F;strong&gt; is still an alpha product and has yet to be battle-tested,
I am confident it can be used in a production cluster.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;random-thought-of-the-week&quot;&gt;Random Thought of the Week&lt;&#x2F;h2&gt;
&lt;p&gt;In today’s fast-paced and competitive business environment, it is essential to
stand out and make your hard work and achievements visible to your management.
Unfortunately, you can fall into the trap of being overlooked as a hidden gem
among your peers, despite your consistent efforts and contributions to the team.&lt;&#x2F;p&gt;
&lt;p&gt;This can be detrimental to career growth and advancement opportunities. So what
are the ways to sort this out, unlock your true potential, and ace your career?&lt;&#x2F;p&gt;
&lt;p&gt;One word: &lt;strong&gt;Take initiative&lt;&#x2F;strong&gt;… Okay, that was two words, but still 🙂.&lt;&#x2F;p&gt;
&lt;p&gt;By sharing your daily progress, goals, and accomplishments with your manager,
you can ensure that your hard work does not go unnoticed.&lt;&#x2F;p&gt;
&lt;p&gt;One effective way to make your work visible is by providing &lt;strong&gt;regular updates&lt;&#x2F;strong&gt;
and participating in huddles with your manager. This allows you to share your
progress on current projects, any challenges you may be facing, and any new
ideas or solutions you have come up with.&lt;&#x2F;p&gt;
&lt;p&gt;By providing this information regularly, you can create a transparent view of
your work for your manager and demonstrate your willingness to actively
collaborate and contribute to the team.&lt;&#x2F;p&gt;
&lt;p&gt;Another critical aspect of making your work visible is sharing real-time metrics
and key performance indicators (&lt;strong&gt;&lt;em&gt;KPIs&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;) with your manager. These metrics
provide valuable insights into the impact and results of your work and
demonstrate your ability to measure and track your progress. This can help your
manager better understand the value you bring to the team and your role in
achieving business goals.&lt;&#x2F;p&gt;
&lt;p&gt;In addition to regular updates and sharing metrics, it is also essential to
&lt;strong&gt;proactively&lt;&#x2F;strong&gt; offer &lt;strong&gt;creative solutions&lt;&#x2F;strong&gt;, volunteer extra time and effort,
and showcase your skill set to help your manager tackle challenges. This
demonstrates your willingness to go above and beyond and showcases your ability
to think outside the box and bring fresh perspectives to the team.&lt;&#x2F;p&gt;
&lt;p&gt;All these can put you on your manager’s radar as a valuable asset to the team
and help you get the promotion you deserve.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;look-what-i-ve-found&quot;&gt;Look What I’ve Found&lt;&#x2F;h2&gt;
&lt;p&gt;Here are the things that grabbed my attention this week.&lt;&#x2F;p&gt;
&lt;p&gt;I typically don’t share these anywhere else.&lt;&#x2F;p&gt;
&lt;p&gt;Exclusively hand-picked for you 👌. Enjoy.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sampler.dev&#x2F;&quot;&gt;Sampler is a tool for shell commands execution, visualization and
alerting&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.airplane.dev&#x2F;&quot;&gt;Airplane is a developer infrastructure for internal tooling&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;0xax.gitbooks.io&#x2F;linux-insides&#x2F;content&#x2F;SysCall&#x2F;linux-syscall-4.htm&quot;&gt;In case you wonder how a unix kernel runs a program, here is a nice
article about it&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;thanks-a-lot-heart&quot;&gt;Thanks a Lot ❤️&lt;&#x2F;h2&gt;
&lt;p&gt;That’s all for this week. Next week, I’ll gather more unique content and
resources.&lt;&#x2F;p&gt;
&lt;p&gt;So, until next time… May the source be with you 🦄.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;issues&quot;&gt;Issues&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0001&#x2F;&quot;&gt;Issue 1: Hello World, Hello Stars, Hello Universe&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0002&#x2F;&quot;&gt;Issue 2: The Only Thing That doesn’t Change is Change Itself&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0003&#x2F;&quot;&gt;Issue 3: Know Thyself&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0004&#x2F;&quot;&gt;Issue 4: Have You Fizzed that Buzz?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0005&#x2F;&quot;&gt;Issue 5: Be Kind&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0006&#x2F;&quot;&gt;Issue 6: Earn the Promotion You Deserve&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0007&#x2F;&quot;&gt;Issue 7: Who Else Journals Daily?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0008&#x2F;&quot;&gt;Issue 8: Who Are You?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0009&#x2F;&quot;&gt;Issue 9: How to Make Yourself Heard&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0010&#x2F;&quot;&gt;Issue 10: Tough Conversations&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0011&#x2F;&quot;&gt;Issue 11: Assemble Your Personal Board of Advisor&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0012&#x2F;&quot;&gt;Issue 12: What’s Your Plan&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0013&#x2F;&quot;&gt;Issue 13: Nine-to-Five? I Don’t Think So&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0014&#x2F;&quot;&gt;Issue 14: Respect and Understanding&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0015&#x2F;&quot;&gt;Issue 15: Pivoting Your Career?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0016&#x2F;&quot;&gt;Issue 16: Ghosted?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0017&#x2F;&quot;&gt;Issue 17: ‘Following Your Passion’ Is Hardly Enough&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0018&#x2F;&quot;&gt;Issue 18: Keep Cam and Carry On&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0019&#x2F;&quot;&gt;Issue 19: Attention, Intention, Compassion&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0020&#x2F;&quot;&gt;Issue 20: Words Matter&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0021&#x2F;&quot;&gt;Issue 21: Change Is the Only Constant&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0022&#x2F;&quot;&gt;Issue 22: Overcome the Awkward Feeling of Networking&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0023&#x2F;&quot;&gt;Issue 23: Unleash Your Curiosity: Unlock Your Potential as a Leader&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0024&#x2F;&quot;&gt;Issue 24: Interview Done. Radio Silence 🎃 What Now?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Issue 25: Unlock Your True Potential: Make Your Hard Work Visible&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0026&#x2F;&quot;&gt;Issue 26: Winning at Work: Thriving With Difficult Colleagues&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0027&#x2F;&quot;&gt;Issue 27: Promotions Don’t Happen Overnight&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Zero to Prod in Half an Hour: Part 1 --- An Overview of FizzBuzz Pro</title>
        <published>2022-10-15T00:00:00+00:00</published>
        <updated>2022-10-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/zero-to-prod/an-overview-of-fizzbuzz-pro/"/>
        <id>https://zerotohero.dev/zero-to-prod/an-overview-of-fizzbuzz-pro/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/zero-to-prod/an-overview-of-fizzbuzz-pro/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;app.png&quot; alt=&quot;Zero to Prod in Half an Hour: Part 1 --- An Overview of FizzBuzz Pro&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;Zero to Prod in Half an Hour: Part 1 --- An Overview of FizzBuzz Pro&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;This series will show how you can deploy a full-blown production-ready web
application in half an hour. Let’s look into what kind of an application we’ll
build and what technologies we’ll use.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lecture&quot;&gt;Lecture&lt;&#x2F;h2&gt;
&lt;div style=&quot;padding:56.25% 0 0 0;position:relative;&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;u_I5azPqgg4?si=7S-wLlMvXCCMlN0l&quot;
    frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; 
    encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allowfullscreen
    style=&quot;position:absolute;top:0;left:0;width:100%;height:100%;&quot;
    title=&quot;Zero to Prod in Half an Hour: Part 1 --- An Overview of FizzBuzz Pro&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Zero to Prod in Half an Hour: Part 1 --- An Overview of FizzBuzz Pro&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;playlist&quot;&gt;Playlist&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Part 1: An Overview of FizzBuzz Pro&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;generating-static-html&#x2F;&quot;&gt;Part 2: Generating Static HTML&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;mutating-the-generated-html-files&#x2F;&quot;&gt;Part 3: Mutating the Generated HTML Files&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;app-authentication-overview&#x2F;&quot;&gt;Part 4: App Authentication Overview&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;implementing-an-oidc-authenticator&#x2F;&quot;&gt;Part 5: Implementing an OIDC Authenticator&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;serving-web-pages&#x2F;&quot;&gt;Part 6: Serving Web Pages&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;a-mild-introduction-to-middlewares&#x2F;&quot;&gt;Part 7: A Mild Introduction to Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;authenticate-all-the-things&#x2F;&quot;&gt;Part 8: Authenticate All the Things&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;thinking-in-middlewares&#x2F;&quot;&gt;Part 9: Thinking in Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;authentication-and-subscription-middlewares&#x2F;&quot;&gt;Part 10: Authentication and Subscription Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;implementing-authentication-handlers&#x2F;&quot;&gt;Part 11: Implementing Authentication Handlers&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;the-final-touches&#x2F;&quot;&gt;Part 12: The Final Touches&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;containerizing-our-application&#x2F;&quot;&gt;Part 13: Containerizing Our Application&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;onwards-to-kubernetes&#x2F;&quot;&gt;Part 14: Onwards to Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;creating-ecr-repositories&#x2F;&quot;&gt;Creating ECR Repositories&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;deploying-a-microservice-to-k8s&#x2F;&quot;&gt;Deploying a Microservice to Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizz-that-buzz&#x2F;&quot;&gt;Fizz that Buzz&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizzbuzz-pro-hla&#x2F;&quot;&gt;FizzBuzz Pro High-Level Design&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizzbuzz-pro-repos&#x2F;&quot;&gt;FizzBuzz Pro Repositories&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tools-and-technologies-mentioned&quot;&gt;Tools and Technologies Mentioned&lt;&#x2F;h2&gt;
&lt;p&gt;Here are the tools and technologies that were mentioned in the video, along with
related articles and other helpful links.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pygments.org&#x2F;&quot;&gt;Python Pygments&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pygments.org&#x2F;docs&#x2F;cmdline&#x2F;&quot;&gt;Python Pygments CLI&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;reference&#x2F;builder&#x2F;&quot;&gt;Dockerfile&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;setup&#x2F;production-environment&#x2F;container-runtimes&#x2F;&quot;&gt;Container Runtimes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;&quot;&gt;Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mongodb.com&#x2F;&quot;&gt;MongoDB&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mongodb.com&#x2F;cloud&#x2F;atlas&quot;&gt;MongoDB Atlas&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.papertrail.com&#x2F;&quot;&gt;Papertrail&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gumroad.com&#x2F;&quot;&gt;Gumroad&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;app.gumroad.com&#x2F;api&quot;&gt;Gumroad API&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;go.dev&#x2F;&quot;&gt;Go Programming Language&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gin-gonic.com&#x2F;&quot;&gt;Gin Web Framework&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;eks&#x2F;&quot;&gt;Amazon EKS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;ecr&#x2F;&quot;&gt;Amazon ECR&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;s3&#x2F;&quot;&gt;Amazon S3&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;route53&#x2F;&quot;&gt;Amazon Route53&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;elasticloadbalancing&#x2F;&quot;&gt;Elastic Load Balancing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;cloudfront&#x2F;&quot;&gt;Amazon Cloudfront&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;read-the-source&quot;&gt;Read The Source&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;assets.zerotohero.dev&#x2F;zero-to-prod-in-30&#x2F;zero-to-prod-in-30.zip&quot;&gt;Download the source code (&lt;em&gt;114kb zip
archive&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;Until the next lecture… May the source be with you 🦄.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>mTLS With SPIRE: Part 5: Containerizing the Client App</title>
        <published>2022-08-19T00:00:00+00:00</published>
        <updated>2022-08-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/spire/mtls/bundle-client/"/>
        <id>https://zerotohero.dev/spire/mtls/bundle-client/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/spire/mtls/bundle-client/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;severcloud.png&quot; alt=&quot;mTLS With SPIRE: Part 5: Containerizing the Client App&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;mTLS With SPIRE: Part 5: Containerizing the Client App&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;We’ll continue creating creating container images and deploying the client app
to the cluster too, then observe how the client and server communicate with each
other within the pods.&lt;&#x2F;p&gt;
&lt;div style=&quot;padding:56.25% 0 0 0;position:relative;&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;tpxRI7XuctE?si=_ao-WI6Hd3wAKdLm&quot;
    frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; 
    encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allowfullscreen
    style=&quot;position:absolute;top:0;left:0;width:100%;height:100%;&quot;
    title=&quot;mTLS With SPIRE: Part 5: Containerizing the Client&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;mTLS With SPIRE: Part 5: Containerizing the Client&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;playlist&quot;&gt;Playlist&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;intro&#x2F;&quot;&gt;mTLS With SPIRE: Part 1: Introduction&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;server-app&#x2F;&quot;&gt;mTLS With SPIRE: Part 2: Creating the Server App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;client-app&#x2F;&quot;&gt;mTLS With SPIRE: Part 3: Creating the Client App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;bundle-server&#x2F;&quot;&gt;mTLS With SPIRE: Part 4: Containerizing the Server App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ mTLS With SPIRE: Part 5: Containerizing the Client App&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;rollout&#x2F;&quot;&gt;mTLS With SPIRE: Part 6: Rolling Out SPIRE to the Cluster&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;register&#x2F;&quot;&gt;mTLS With SPIRE: Part 7: Registering Nodes and Workloads to SPIRE&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;setup-server&#x2F;&quot;&gt;mTLS With SPIRE: Part 8: Configuring the Server to Use SPIRE mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;setup-client&#x2F;&quot;&gt;mTLS With SPIRE: Part 9: Configuring the Client to Use SPIRE mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;end-to-end&#x2F;&quot;&gt;mTLS With SPIRE: Part 10: Establishing Cross-Cluster mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;read-the-source&quot;&gt;Read the Source&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zerotohero-dev&#x2F;spire-mtls&quot;&gt;Access the source code and other related assets from &lt;strong&gt;Zero to Hero&lt;&#x2F;strong&gt; GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>mTLS With SPIRE: Part 4: Containerizing the Server Appp</title>
        <published>2022-08-19T00:00:00+00:00</published>
        <updated>2022-08-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/spire/mtls/bundle-server/"/>
        <id>https://zerotohero.dev/spire/mtls/bundle-server/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/spire/mtls/bundle-server/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;containers.png&quot; alt=&quot;mTLS With SPIRE: Part 4: Containerizing the Server App&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;mTLS With SPIRE: Part 4: Containerizing the Server App&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;This section will bundle the server application, create and image out of it,
create deployment manifests, and deploy it into the cluster.&lt;&#x2F;p&gt;
&lt;div style=&quot;padding:56.25% 0 0 0;position:relative;&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;VuT5zaZwq2Y?si=9nVhMhb_QdzHWYyj&quot;
    frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; 
    encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allowfullscreen
    style=&quot;position:absolute;top:0;left:0;width:100%;height:100%;&quot;
    title=&quot;mTLS With SPIRE: Part 4: Containerizing the Server App&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;mTLS With SPIRE: Part 4: Containerizing the Server App&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;playlist&quot;&gt;Playlist&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;intro&#x2F;&quot;&gt;mTLS With SPIRE: Part 1: Introduction&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;server-app&#x2F;&quot;&gt;mTLS With SPIRE: Part 2: Creating the Server App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;client-app&#x2F;&quot;&gt;mTLS With SPIRE: Part 3: Creating the Client App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ mTLS With SPIRE: Part 4: Containerizing the Server App&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;bundle-client&#x2F;&quot;&gt;mTLS With SPIRE: Part 5: Containerizing the Client App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;rollout&#x2F;&quot;&gt;mTLS With SPIRE: Part 6: Rolling Out SPIRE to the Cluster&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;register&#x2F;&quot;&gt;mTLS With SPIRE: Part 7: Registering Nodes and Workloads to SPIRE&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;setup-server&#x2F;&quot;&gt;mTLS With SPIRE: Part 8: Configuring the Server to Use SPIRE mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;setup-client&#x2F;&quot;&gt;mTLS With SPIRE: Part 9: Configuring the Client to Use SPIRE mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;end-to-end&#x2F;&quot;&gt;mTLS With SPIRE: Part 10: Establishing Cross-Cluster mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tools-and-technologies-mentioned&quot;&gt;Tools and Technologies Mentioned&lt;&#x2F;h2&gt;
&lt;p&gt;Here are the tools and technologies that were mentioned in the video, along with
related articles and other helpful links.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;&lt;strong&gt;Docker&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;opencontainers.org&#x2F;&quot;&gt;Open Container Initiative (&lt;strong&gt;&lt;em&gt;OCI&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;build&#x2F;building&#x2F;multi-stage&#x2F;&quot;&gt;Multistage Builds&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;reference&#x2F;builder&#x2F;&quot;&gt;Dockerfile Reference&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;GoogleContainerTools&#x2F;distroless&quot;&gt;Distroless Container Images&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;registry&#x2F;&quot;&gt;Docker Registry&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;workloads&#x2F;controllers&#x2F;deployment&#x2F;&quot;&gt;Deployments&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;services-networking&#x2F;service&#x2F;&quot;&gt;Services&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;metallb.universe.tf&#x2F;&quot;&gt;&lt;strong&gt;MetalLB&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; (&lt;em&gt;this is the LoadBalancer we used
in this video series&lt;&#x2F;em&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;read-the-source&quot;&gt;Read the Source&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zerotohero-dev&#x2F;spire-mtls&quot;&gt;Access the source code and other related assets from &lt;strong&gt;Zero to Hero&lt;&#x2F;strong&gt; GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Zero to Prod in Half an Hour: Part 13 --- Containerizing Our Application</title>
        <published>2022-02-10T00:00:00+00:00</published>
        <updated>2022-02-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/zero-to-prod/containerizing-our-application/"/>
        <id>https://zerotohero.dev/zero-to-prod/containerizing-our-application/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/zero-to-prod/containerizing-our-application/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;containerize.png&quot; alt=&quot;Zero to Prod in Half an Hour: Part 13 --- Containerizing Our Application&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;Zero to Prod in Half an Hour: Part 13 --- Containerizing Our Application&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;We have an app that works locally. Now it’s time to put it into a container and
yeet it out to a cluster. And that’s what we’ll do.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lecture&quot;&gt;Lecture&lt;&#x2F;h2&gt;
&lt;div style=&quot;padding:56.25% 0 0 0;position:relative;&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;FcHwCiVa04Q?si=0SDkDbxglful19yj&quot;
    frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; 
    encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allowfullscreen
    style=&quot;position:absolute;top:0;left:0;width:100%;height:100%;&quot;
    title=&quot;Zero to Prod in Half an Hour: Part 13 --- Containerizing Our Application&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Zero to Prod in Half an Hour: Part 13 --- Containerizing Our Application&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;playlist&quot;&gt;Playlist&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;an-overview-of-fizzbuzz-pro&#x2F;&quot;&gt;Part 1: An Overview of FizzBuzz Pro&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;generating-static-html&#x2F;&quot;&gt;Part 2: Generating Static HTML&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;mutating-the-generated-html-files&#x2F;&quot;&gt;Part 3: Mutating the Generated HTML Files&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;app-authentication-overview&#x2F;&quot;&gt;Part 4: App Authentication Overview&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;implementing-an-oidc-authenticator&#x2F;&quot;&gt;Part 5: Implementing an OIDC Authenticator&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;serving-web-pages&#x2F;&quot;&gt;Part 6: Serving Web Pages&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;a-mild-introduction-to-middlewares&#x2F;&quot;&gt;Part 7: A Mild Introduction to Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;authenticate-all-the-things&#x2F;&quot;&gt;Part 8: Authenticate All the Things&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;thinking-in-middlewares&#x2F;&quot;&gt;Part 9: Thinking in Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;authentication-and-subscription-middlewares&#x2F;&quot;&gt;Part 10: Authentication and Subscription Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;implementing-authentication-handlers&#x2F;&quot;&gt;Part 11: Implementing Authentication Handlers&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;the-final-touches&#x2F;&quot;&gt;Part 12: The Final Touches&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Part 13: Containerizing Our Application&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;onwards-to-kubernetes&#x2F;&quot;&gt;Part 14: Onwards to Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;creating-ecr-repositories&#x2F;&quot;&gt;Creating ECR Repositories&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;deploying-a-microservice-to-k8s&#x2F;&quot;&gt;Deploying a Microservice to Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizz-that-buzz&#x2F;&quot;&gt;Fizz that Buzz&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizzbuzz-pro-hla&#x2F;&quot;&gt;FizzBuzz Pro High-Level Design&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizzbuzz-pro-repos&#x2F;&quot;&gt;FizzBuzz Pro Repositories&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tools-and-technologies-mentioned&quot;&gt;Tools and Technologies Mentioned&lt;&#x2F;h2&gt;
&lt;p&gt;Here are the tools and technologies that were mentioned in the video, along with
related articles and other helpful links.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;&quot;&gt;Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;reference&#x2F;builder&#x2F;&quot;&gt;Dockerfile Reference&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;develop&#x2F;develop-images&#x2F;multistage-build&#x2F;&quot;&gt;Use Multi Stage Builds&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;48816583-container-security&quot;&gt;Container Security&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;ecr&#x2F;&quot;&gt;Amozon ECR&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;eks&#x2F;&quot;&gt;Amazon EKS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;read-the-source&quot;&gt;Read The Source&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;assets.zerotohero.dev&#x2F;zero-to-prod-in-30&#x2F;zero-to-prod-in-30.zip&quot;&gt;Download the source code (&lt;em&gt;114kb zip
archive&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;Until the next lecture… May the source be with you 🦄.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A Glossary of Mostly Developer-Related Things</title>
        <published>2021-11-27T00:00:00+00:00</published>
        <updated>2021-11-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/roadmap/glossary/"/>
        <id>https://zerotohero.dev/roadmap/glossary/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/roadmap/glossary/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;acronym.png&quot; alt=&quot;The tech industry loves its TLAs.&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;The tech industry loves its TLAs.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;We love our terms and acronyms, don’t we? They help us communicate complex
notions with just a few characters; however, they can also be an obstacle when
you are learning new stuff. This page covers a list of mostly developer-related
terms and acronyms with links to further explanations about them.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;A&#x2F;B_testing&quot;&gt;A&#x2F;B Testing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Application_programming_interface&quot;&gt;API&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.interaction-design.org&#x2F;literature&#x2F;topics&#x2F;adaptive-design&quot;&gt;Adaptive Design&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Agile_software_development&quot;&gt;Agile Software Development&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Algorithm&quot;&gt;Algorithm&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Automation&quot;&gt;Automation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Scrum_(software_development)#Product_backlog&quot;&gt;Backlog&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bash_(Unix_shell)&quot;&gt;bash&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Behavior-driven_development&quot;&gt;BDD (&lt;em&gt;Behavior-Driven
Development&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Big_data&quot;&gt;Big Data&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloud.google.com&#x2F;bigquery&quot;&gt;Big Query&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;browsers&#x2F;what-is-a-browser&#x2F;&quot;&gt;Browser&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software_bug&quot;&gt;Bug&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dev.to&#x2F;tanhauhau&#x2F;what-is-module-bundler-and-how-does-it-work-3gp2&quot;&gt;Bundling&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Burn_rate&quot;&gt;Burn Rate&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;C_Sharp_(programming_language)&quot;&gt;C#&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;C%2B%2B&quot;&gt;C++&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Content_management_system&quot;&gt;CMS (&lt;em&gt;Content Management
System&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cncf.io&#x2F;&quot;&gt;CNCF (&lt;em&gt;Cloud Native Computing Foundation&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Central_processing_unit&quot;&gt;CPU (&lt;em&gt;Central Processing
Unit&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crm.org&#x2F;crmland&#x2F;what-is-a-crm&quot;&gt;CRM (&lt;em&gt;Customer Relationship
Management&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Cascading_Style_Sheets&quot;&gt;CSS (&lt;em&gt;Cascading Style
Sheet&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Call_to_action_(marketing)&quot;&gt;CTA (&lt;em&gt;Call to
Action&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;C_(programming_language)&quot;&gt;C&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Cache_(computing)&quot;&gt;Cache&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Churn_rate&quot;&gt;Churn Rate&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Source-code_editor&quot;&gt;Code Editor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;CommonJS&quot;&gt;CommonJS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;OS-level_virtualization&quot;&gt;Container&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Continuous_integration&quot;&gt;CI (&lt;em&gt;Continuous
Integration&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Cookie&quot;&gt;Cookie&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Web_crawler&quot;&gt;Crawl&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Domain_Name_System&quot;&gt;DNS (&lt;em&gt;Domain Name System&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;List_of_DNS_record_types&quot;&gt;DNS Record Types&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Dots_per_inch&quot;&gt;DPI (&lt;em&gt;Dots Per Inch&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Data_structure&quot;&gt;Data Structure&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Debugging&quot;&gt;Debugging&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software_deployment&quot;&gt;Deployment&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Design&quot;&gt;Design&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;DevOps&quot;&gt;DevOps&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Domain_name&quot;&gt;Domain&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;ECMAScript&quot;&gt;ECMAScript&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.erlang.org&#x2F;&quot;&gt;Erlang&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web.dev&#x2F;first-meaningful-paint&#x2F;&quot;&gt;FMP (&lt;em&gt;First Meaningful Paint&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Functional_programming&quot;&gt;FP (&lt;em&gt;Functional
Programming&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;File_Transfer_Protocol&quot;&gt;FTP (&lt;em&gt;File Transfer
Protocol&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Function_as_a_service&quot;&gt;FaaS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Favicon&quot;&gt;Favicon&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software_framework&quot;&gt;Framework&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Front_end_and_back_end&quot;&gt;Front End and Back End&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.blog&#x2F;2019&#x2F;10&#x2F;17&#x2F;imho-the-mythical-fullstack-engineer&#x2F;&quot;&gt;Full-Stack&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Graphical_user_interface&quot;&gt;GUI (&lt;em&gt;Graphical User
Interface&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;&quot;&gt;GitHub&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&#x2F;&quot;&gt;Git&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;golang.org&#x2F;&quot;&gt;Go&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;graphql.org&#x2F;&quot;&gt;GraphQL&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.haskell.org&#x2F;&quot;&gt;Haskell&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;HTML&quot;&gt;HTML (&lt;em&gt;Hypertext Markup Language&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;HTTP&#x2F;Status&quot;&gt;HTTP Response Status Codes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;HTTP&quot;&gt;HTTP (&lt;em&gt;Hypertext Transfer
Protocol&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;humanstxt.org&#x2F;&quot;&gt;humans.txt&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ionicframework.com&#x2F;resources&#x2F;articles&#x2F;what-is-hybrid-app-development&quot;&gt;Hybrid App&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Hypervisor&quot;&gt;Hypervisor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Infrastructure_as_a_service&quot;&gt;IaaS (&lt;em&gt;Infrastructure as a
Service&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Inbound_marketing&quot;&gt;Inbound Marketing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Information_architecture&quot;&gt;Information Architecture&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Integration_testing&quot;&gt;Integration Testing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jamstack.org&#x2F;&quot;&gt;JAM Stack&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Learn&#x2F;JavaScript&#x2F;First_steps&#x2F;What_is_JavaScript&quot;&gt;JavaScript&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;go.java&#x2F;&quot;&gt;Java&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Kaizen&quot;&gt;Kaizen&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Kanban_(development)&quot;&gt;Kanban&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;&quot;&gt;Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;LAMP_(software_bundle)&quot;&gt;LAMP Stack&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Library_(computing)&quot;&gt;Library&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lisp_(programming_language)&quot;&gt;Lisp&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;API&#x2F;Window&#x2F;localStorage&quot;&gt;Local Storage&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;MEAN_(solution_stack)&quot;&gt;MEAN Stack&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.educative.io&#x2F;edpresso&#x2F;what-is-mern-stack&quot;&gt;MERN Stack&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mock_object&quot;&gt;Mocking&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;mqtt.org&#x2F;&quot;&gt;MQTT (&lt;em&gt;Message Queue Telemetry Transport&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mean_time_to_repair&quot;&gt;MTTR (&lt;em&gt;Mean Time to
Repair&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Minimum_viable_product&quot;&gt;MVP (&lt;em&gt;Minimum Viable
Product&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Machine_learning&quot;&gt;Machine Learning&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Minification_(programming)&quot;&gt;Minification&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mobile_app&quot;&gt;Mobile App&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mockup#Software_engineering&quot;&gt;Mockup&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Modular_design&quot;&gt;Module&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Web_navigation&quot;&gt;Navigation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Not_invented_here&quot;&gt;NIH (&lt;em&gt;Not Invented Here&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;NoSQL&quot;&gt;NoSQL&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nodejs.org&#x2F;en&#x2F;&quot;&gt;Node.js&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Orchestration_(computing)&quot;&gt;Orchestration&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Object-oriented_programming&quot;&gt;OOP (&lt;em&gt;Object-Oriented
Programming&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Out_of_the_box_(feature)&quot;&gt;OOTB (&lt;em&gt;Out of the
Box&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;OSI_model&quot;&gt;OSI Model&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;owasp.org&#x2F;&quot;&gt;OWASP (&lt;em&gt;Open Web Application Security Project&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Operating_system&quot;&gt;Operating System&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Platform_as_a_service&quot;&gt;PaaS &lt;em&gt;_Platform as a
Service&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Plug-in_(computing)&quot;&gt;Plugin&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;workloads&#x2F;pods&#x2F;pod&#x2F;&quot;&gt;Pod&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dev.to&#x2F;flippedcoding&#x2F;difference-between-development-stage-and-production-d0p&quot;&gt;Production&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developers.google.com&#x2F;protocol-buffers&quot;&gt;Protocol Buffers&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Prototype&quot;&gt;Prototype&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.python.org&#x2F;&quot;&gt;Python&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Random-access_memory&quot;&gt;RAM (&lt;em&gt;Random-Access
Memory&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Representational_state_transfer&quot;&gt;REST (&lt;em&gt;Representational State
Transfer&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;URL_redirection&quot;&gt;Redirect&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Registrar&quot;&gt;Registrar&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Image_resolution&quot;&gt;Resolution&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.smashingmagazine.com&#x2F;2011&#x2F;01&#x2F;guidelines-for-responsive-web-design&#x2F;&quot;&gt;Responsive Design&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Technology_roadmap&quot;&gt;Roadmap&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;support.google.com&#x2F;webmasters&#x2F;answer&#x2F;6062608&quot;&gt;robots.txt&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ruby-lang.org&#x2F;en&#x2F;&quot;&gt;Ruby&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.rust-lang.org&#x2F;&quot;&gt;Rust&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Simple_Mail_Transfer_Protocol&quot;&gt;SMTP (&lt;em&gt;Simple Mail Transfer
Protocol&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;SQL&quot;&gt;SQL (&lt;em&gt;Structured Query Language&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Solid-state_drive&quot;&gt;SSD (&lt;em&gt;Solid-State Drive&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Secure_Shell&quot;&gt;SSH (&lt;em&gt;Secure Shell&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software_as_a_service&quot;&gt;SaaS (&lt;em&gt;Software as a
Service&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Scheme_(programming_language)&quot;&gt;Scheme&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Web_scraping&quot;&gt;Scrape&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Scrum_(software_development)&quot;&gt;Scrum&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Server_(computing)&quot;&gt;Server&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Separation_of_concerns&quot;&gt;Separation of Concerns&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;thoughtbot.com&#x2F;blog&#x2F;a-closer-look-at-test-spies&quot;&gt;Spying&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Serverless_computing&quot;&gt;Serverless&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;API&#x2F;Window&#x2F;sessionStorage&quot;&gt;Session Storage&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Site_map&quot;&gt;Sitemap&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Smalltalk&quot;&gt;Smalltalk&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Solution_stack&quot;&gt;Software Stack&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Version_control&quot;&gt;Source Control&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;SOLID&quot;&gt;SOLID&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.atlassian.com&#x2F;agile&#x2F;scrum&#x2F;sprints&quot;&gt;Sprint&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Test-driven_development&quot;&gt;TDD (&lt;em&gt;Test-Driven
Development&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Transport_Layer_Security&quot;&gt;TLS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Time_to_first_byte&quot;&gt;TTFB (&lt;em&gt;Time to First
Byte&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tag_(metadata)&quot;&gt;Tags&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Web_template_system&quot;&gt;Template&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Test_stub&quot;&gt;Test Stub&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Text_editor&quot;&gt;Text Editor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Acceptance_testing&quot;&gt;UAT (&lt;em&gt;User Acceptance
Testing&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;User_interface_design&quot;&gt;UI Design&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;User_interface&quot;&gt;UI (&lt;em&gt;User Interface&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;User_experience_design&quot;&gt;UX Design&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;User_experience&quot;&gt;UX (&lt;em&gt;User Experience&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Unit_testing&quot;&gt;Unit Testing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.usability.gov&#x2F;how-to-and-tools&#x2F;methods&#x2F;usability-testing.html&quot;&gt;Usability Testing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;User_agent&quot;&gt;User Agent&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.interaction-design.org&#x2F;literature&#x2F;topics&#x2F;user-research&quot;&gt;User Research&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;WYSIWYG&quot;&gt;WYSIWYG (&lt;em&gt;What You See Is What You
Get&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Waterfall_model&quot;&gt;Waterfall&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Web_application&quot;&gt;Web App&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Graphical_widget&quot;&gt;Widget&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.usability.gov&#x2F;how-to-and-tools&#x2F;methods&#x2F;wireframing.html&quot;&gt;Wireframe&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;You_aren%27t_gonna_need_it&quot;&gt;YAGNI&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Z_shell&quot;&gt;zsh&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Until next time… May the source be with you 🦄.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;section-contents&quot;&gt;Section Contents&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;roadmap&#x2F;&quot;&gt;Be the Next Version of Yourself&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;hack-the-system&#x2F;&quot;&gt;Who Else is Ready to Hack?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;chisel&#x2F;&quot;&gt;Grab Your Chisel and Start Pounding&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;learn-fast-remember-more&#x2F;&quot;&gt;Unlock Your Brain’s Power: Learn Fast, Remember More&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;the-art-of-learning&#x2F;&quot;&gt;Master Your Mind: Unleash the Power of Learning&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;bedtime-reading&#x2F;&quot;&gt;Resources Every Developer Must Read: No Exceptions&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;knowing-javascript-is-not-good-enough&#x2F;&quot;&gt;Knowing JavaScript Is Not Good Enough&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;learn-javascript-the-unconventional-way&#x2F;&quot;&gt;Learn JavaScript the Unconventional Way&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;learn-haskell&#x2F;&quot;&gt;Want to Learn JavaScript? Learn Haskell First&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ A Glossary of Mostly Developer-Related Things&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;git&#x2F;&quot;&gt;Git Comfortable&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;vim&#x2F;&quot;&gt;Master Your Vim-Fu&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;one-does-not-simply-terminal&#x2F;&quot;&gt;One Does Not Simply Terminal 👌&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;design-patterns&#x2F;&quot;&gt;Paint Me Like One of Your French Design Patterns&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;regexp&#x2F;&quot;&gt;Tame Your Regular Expressions&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;security&#x2F;&quot;&gt;Security Is Not Optional&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;you-need-testing&#x2F;&quot;&gt;You Need Testing&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;a-startup-founders-bedtime-reading-list&#x2F;&quot;&gt;A Startup Founder’s Bedtime Reading List&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;color-theory&#x2F;&quot;&gt;Orange Is the New Purple&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;ramp-up-in-user-experience-design&#x2F;&quot;&gt;Ramp Up in User Experience Design&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;typography&#x2F;&quot;&gt;Get Better at Typography&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;roadmap&#x2F;what-the-junior-actually-needs&#x2F;&quot;&gt;The Bottleneck Moved. The Work Did Not.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>mTLS With SPIRE: Part 1: Introduction</title>
        <published>2021-10-19T00:00:00+00:00</published>
        <updated>2021-10-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/spire/mtls/intro/"/>
        <id>https://zerotohero.dev/spire/mtls/intro/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/spire/mtls/intro/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;cluster-arch.png&quot; alt=&quot;mTLS With SPIRE: Part 1: Introduction&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;mTLS With SPIRE: Part 1: Introduction&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;This video will introduce the cluster architecture and talk about what we are
planning to achieve by the end of the video series.&lt;&#x2F;p&gt;
&lt;div style=&quot;padding:56.25% 0 0 0;position:relative;&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;xvfjZpZtOdo?si=rl2EJYZLOucc0Ijc&quot;
    frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; 
    encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allowfullscreen
    style=&quot;position:absolute;top:0;left:0;width:100%;height:100%;&quot;
    title=&quot;mTLS With SPIRE: Part 1: Introduction&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;mTLS With SPIRE: Part 1: Introduction&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;playlist&quot;&gt;Playlist&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ mTLS With SPIRE: Part 1: Introduction&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;server-app&#x2F;&quot;&gt;mTLS With SPIRE: Part 2: Creating the Server App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;client-app&#x2F;&quot;&gt;mTLS With SPIRE: Part 3: Creating the Client App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;bundle-server&#x2F;&quot;&gt;mTLS With SPIRE: Part 4: Containerizing the Server App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;bundle-client&#x2F;&quot;&gt;mTLS With SPIRE: Part 5: Containerizing the Client App&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;rollout&#x2F;&quot;&gt;mTLS With SPIRE: Part 6: Rolling Out SPIRE to the Cluster&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;register&#x2F;&quot;&gt;mTLS With SPIRE: Part 7: Registering Nodes and Workloads to SPIRE&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;setup-server&#x2F;&quot;&gt;mTLS With SPIRE: Part 8: Configuring the Server to Use SPIRE mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;setup-client&#x2F;&quot;&gt;mTLS With SPIRE: Part 9: Configuring the Client to Use SPIRE mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;mtls&#x2F;end-to-end&#x2F;&quot;&gt;mTLS With SPIRE: Part 10: Establishing Cross-Cluster mTLS&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tools-and-technologies-mentioned&quot;&gt;Tools and Technologies Mentioned&lt;&#x2F;h2&gt;
&lt;p&gt;Here are the tools and technologies that were mentioned in the video, along with
related articles and other helpful links.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;spire&#x2F;spire-rocks&#x2F;&quot;&gt;Setting Up &lt;strong&gt;SPIRE&lt;&#x2F;strong&gt; on EKS in Less
Than Ten Minutes&lt;&#x2F;a&gt; (&lt;em&gt;read this first&lt;&#x2F;em&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Public_key_infrastructure&quot;&gt;Public Key Infrastructure (&lt;strong&gt;&lt;em&gt;PKI&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Transport_Layer_Security&quot;&gt;Transport Layer Security (&lt;strong&gt;&lt;em&gt;TLS&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mutual_authentication&quot;&gt;Mutual Transport Layer Security (&lt;strong&gt;&lt;em&gt;mTLS&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;X.509&quot;&gt;&lt;strong&gt;X.509&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;home&#x2F;&quot;&gt;Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;containers&#x2F;&quot;&gt;Containers&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;workloads&#x2F;pods&#x2F;&quot;&gt;Pods&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;grpc.io&#x2F;&quot;&gt;&lt;strong&gt;gRPC&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spiffe.io&#x2F;&quot;&gt;&lt;strong&gt;SPIFFE&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spiffe.io&#x2F;docs&#x2F;latest&#x2F;spiffe-about&#x2F;overview&#x2F;&quot;&gt;&lt;strong&gt;SPIRE&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spiffe.io&#x2F;docs&#x2F;latest&#x2F;architecture&#x2F;federation&#x2F;readme&#x2F;&quot;&gt;&lt;strong&gt;SPIRE&lt;&#x2F;strong&gt; Federation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;read-the-source&quot;&gt;Read the Source&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zerotohero-dev&#x2F;spire-mtls&quot;&gt;Access the source code and other related assets from &lt;strong&gt;Zero to Hero&lt;&#x2F;strong&gt; GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Pivoting Your Career?</title>
        <published>2021-10-02T00:00:00+00:00</published>
        <updated>2021-10-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/highlights/issue-0015/"/>
        <id>https://zerotohero.dev/highlights/issue-0015/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/highlights/issue-0015/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;pivot.png&quot; alt=&quot;Pivoting is a big decision. Make sure you are ready for it.&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;Pivoting is a big decision. Make sure you are ready for it.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Welcome to the fifteenth issue of &lt;strong&gt;Zero to Hero&lt;&#x2F;strong&gt; Highlights.&lt;&#x2F;p&gt;
&lt;p&gt;I’m still deep down into &lt;strong&gt;Cloud-Native Security&lt;&#x2F;strong&gt;. The good news is, I’ve
learned “&lt;strong&gt;a lot&lt;&#x2F;strong&gt;,” and lots of quality stuff will likely come up your way.&lt;&#x2F;p&gt;
&lt;p&gt;On the topic of “Cloud Native,” I asked the community what &lt;strong&gt;Cloud-Native
Security&lt;&#x2F;strong&gt; meant for them.&lt;&#x2F;p&gt;
&lt;p&gt;I did this on &lt;strong&gt;Twitter&lt;&#x2F;strong&gt; and other mediums, like &lt;strong&gt;IRC&lt;&#x2F;strong&gt;, &lt;strong&gt;Slack&lt;&#x2F;strong&gt;, and
&lt;strong&gt;Discord&lt;&#x2F;strong&gt;. Then I came up with a 20-page “mini” bedtime reading material,
a Cloud-Native Security DevRel’s survival guide 🥑.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cloud-native-security-developer-relations-engineer-s-survival-guide&quot;&gt;Cloud-Native Security Developer Relations Engineer’s Survival Guide&lt;&#x2F;h2&gt;

&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;2021&amp;#x2F;10&amp;#x2F;Screen-Shot-2021-09-30-at-8.38.49-PM.png&quot; alt=&quot;Don&amp;#x27;t Panic&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;Don&amp;#x27;t Panic&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I’ve even outlined the blueprint of a book. Not sure if I’ll create a book; or
come off with a series of articles or both. We’ll see 😀.&lt;&#x2F;p&gt;
&lt;p&gt;“Cloud-Native Security Developer Relations Engineer”? Wow, fancy title. But,
what exactly is it?&lt;&#x2F;p&gt;
&lt;p&gt;Here’s how I defined it in the document.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;A &lt;strong&gt;Cloud-Native Security Developer Relations Engineer&lt;&#x2F;strong&gt; collaborates,
partners, grows, contributes, and &lt;strong&gt;hacks&lt;&#x2F;strong&gt; with the &lt;strong&gt;Cloud-Native&lt;&#x2F;strong&gt; security
community. They explore new venues find where the developers are, listen to
them and engage with them, mentor and support them, and lift them.&lt;&#x2F;p&gt;
&lt;p&gt;While doing these, they will also be the bridge between the developer
community and the larger &lt;strong&gt;Cloud-Native Security&lt;&#x2F;strong&gt; ecosystem. They will share
ideas, solutions, and recommendations, gather feedback, and spread the word to
the observable universe.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Right now, the document has some Company-specific information, so I cannot quite
publicly release it. Still, I am planning to pivot off a more general document
for the larger community to benefit.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;spiffe-anyone&quot;&gt;SPIFFE Anyone?&lt;&#x2F;h2&gt;
&lt;p&gt;I also looked into &lt;strong&gt;Trust&lt;&#x2F;strong&gt; and &lt;strong&gt;Identity Federation&lt;&#x2F;strong&gt; in the cloud.&lt;&#x2F;p&gt;

&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;2021&amp;#x2F;10&amp;#x2F;Screen-Shot-2021-09-30-at-8.51.13-PM.png&quot; alt=&quot;SPIRE Tutorial Audio Recording&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;SPIRE Tutorial Audio Recording&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I have &lt;strong&gt;18 minutes&lt;&#x2F;strong&gt; of screencast where I deploy a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spiffe.io&#x2F;docs&#x2F;latest&#x2F;spire-about&#x2F;spire-concepts&#x2F;&quot;&gt;&lt;strong&gt;SPIRE&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; server on
an &lt;strong&gt;AWS EKS&lt;&#x2F;strong&gt; cluster and then fetch &lt;strong&gt;x.509&lt;&#x2F;strong&gt; SVID’s from a workload. If it does
not mean much to you, I promise it’ll make sense after watching the video.&lt;&#x2F;p&gt;
&lt;p&gt;The content is almost ready. It just has some post-production and annotation
work to do before it’ll be ready for your viewing pleasure.&lt;&#x2F;p&gt;
&lt;p&gt;Along with the video, there will be an accompanying article that has been tech
reviewed by not one but two &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spiffe.io&#x2F;docs&#x2F;latest&#x2F;spire-about&#x2F;spire-concepts&#x2F;&quot;&gt;&lt;strong&gt;SPIRE&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; core contributors:
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;d_feldman&quot;&gt;&lt;strong&gt;Daniel Feldman&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;evan2645&quot;&gt;&lt;strong&gt;Evan Gilman&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So it’ll be &lt;strong&gt;awesome&lt;&#x2F;strong&gt;. Wait for it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;random-thought-of-the-week&quot;&gt;Random Thought of the Week&lt;&#x2F;h2&gt;
&lt;p&gt;Are you making a big career decision?&lt;&#x2F;p&gt;
&lt;p&gt;Changing job roles is hard no matter what the circumstances. So before pressing
the big red button, ask yourself the following questions. Once you answer them
all, you’ll have gained clarity and narrowed down your options.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;How do you feel about the opportunity&lt;&#x2F;strong&gt;? How do you envision your future when
you do the switch? Think about the kind of work you do right now. Now, think
about the work that you are planning to do. Take a pen and paper and write down
your ideas and feelings.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Does this opportunity align with what matters to you most&lt;&#x2F;strong&gt;? Knowing and
understanding your values will help you make choices that align with what you
care about most.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;How does this change will affect others&lt;&#x2F;strong&gt;? Consider how your decision will
impact your family, friends, loved ones, the people you most care about. Then,
before jumping hoops, ask them for their comments, suggestions, insights, and
thoughts.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What’s behind that screensaver&lt;&#x2F;strong&gt;? You want to make the right choice for the
right reason. Be objective. The grass will always look greener from the outside.
Though, are you considering facts and data, or are you considering your hopes
and assumptions? If you make your decision solely based on your &lt;em&gt;gut&lt;&#x2F;em&gt; feeling,
be aware that you are taking the risk of disappointment in the long run. Gather
as much evidence as you can.&lt;&#x2F;p&gt;
&lt;p&gt;Once you answer these questions, and maybe &lt;strong&gt;sleep on&lt;&#x2F;strong&gt; the idea a little,
you’ll better understand how to proceed.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;look-what-i-ve-found&quot;&gt;Look What I’ve Found&lt;&#x2F;h2&gt;
&lt;p&gt;Here are the things that grabbed my attention this week.&lt;&#x2F;p&gt;
&lt;p&gt;I typically don’t share these anywhere else.&lt;&#x2F;p&gt;
&lt;p&gt;Exclusively hand-picked for you 👌. Enjoy.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;skruv.io&#x2F;&quot;&gt;&lt;strong&gt;skruv&lt;&#x2F;strong&gt; is no-dependency, no-build, small JS framework&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nodeshift.dev&#x2F;opossum&#x2F;&quot;&gt;&lt;strong&gt;Opossum&lt;&#x2F;strong&gt; is a Node.js circuit breaker that executes asynchronous
functions and monitors their execution status&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sindresorhus&#x2F;globby&quot;&gt;&lt;strong&gt;globby&lt;&#x2F;strong&gt; is a user-friendly glob matcher&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;thanks-a-lot-heart&quot;&gt;Thanks a Lot ❤️&lt;&#x2F;h2&gt;
&lt;p&gt;That’s all for this week. Next week, I’ll gather more unique content and
resources.&lt;&#x2F;p&gt;
&lt;p&gt;So, until next time… May the source be with you 🦄.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;issues&quot;&gt;Issues&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0001&#x2F;&quot;&gt;Issue 1: Hello World, Hello Stars, Hello Universe&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0002&#x2F;&quot;&gt;Issue 2: The Only Thing That doesn’t Change is Change Itself&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0003&#x2F;&quot;&gt;Issue 3: Know Thyself&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0004&#x2F;&quot;&gt;Issue 4: Have You Fizzed that Buzz?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0005&#x2F;&quot;&gt;Issue 5: Be Kind&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0006&#x2F;&quot;&gt;Issue 6: Earn the Promotion You Deserve&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0007&#x2F;&quot;&gt;Issue 7: Who Else Journals Daily?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0008&#x2F;&quot;&gt;Issue 8: Who Are You?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0009&#x2F;&quot;&gt;Issue 9: How to Make Yourself Heard&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0010&#x2F;&quot;&gt;Issue 10: Tough Conversations&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0011&#x2F;&quot;&gt;Issue 11: Assemble Your Personal Board of Advisor&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0012&#x2F;&quot;&gt;Issue 12: What’s Your Plan&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0013&#x2F;&quot;&gt;Issue 13: Nine-to-Five? I Don’t Think So&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0014&#x2F;&quot;&gt;Issue 14: Respect and Understanding&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Issue 15: Pivoting Your Career?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0016&#x2F;&quot;&gt;Issue 16: Ghosted?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0017&#x2F;&quot;&gt;Issue 17: ‘Following Your Passion’ Is Hardly Enough&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0018&#x2F;&quot;&gt;Issue 18: Keep Cam and Carry On&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0019&#x2F;&quot;&gt;Issue 19: Attention, Intention, Compassion&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0020&#x2F;&quot;&gt;Issue 20: Words Matter&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0021&#x2F;&quot;&gt;Issue 21: Change Is the Only Constant&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0022&#x2F;&quot;&gt;Issue 22: Overcome the Awkward Feeling of Networking&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0023&#x2F;&quot;&gt;Issue 23: Unleash Your Curiosity: Unlock Your Potential as a Leader&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0024&#x2F;&quot;&gt;Issue 24: Interview Done. Radio Silence 🎃 What Now?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0025&#x2F;&quot;&gt;Issue 25: Unlock Your True Potential: Make Your Hard Work Visible&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0026&#x2F;&quot;&gt;Issue 26: Winning at Work: Thriving With Difficult Colleagues&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0027&#x2F;&quot;&gt;Issue 27: Promotions Don’t Happen Overnight&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Journey of a Microservice: From Source Code to a Full-Blown Kubernetes Deployment</title>
        <published>2021-08-09T00:00:00+00:00</published>
        <updated>2021-08-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/zero-to-prod/deploying-a-microservice-to-k8s/"/>
        <id>https://zerotohero.dev/zero-to-prod/deploying-a-microservice-to-k8s/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/zero-to-prod/deploying-a-microservice-to-k8s/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;harmony.png&quot; alt=&quot;The Journey of a Microservice: From Source Code to a Full-Blown Kubernetes Deployment&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;The Journey of a Microservice: From Source Code to a Full-Blown Kubernetes Deployment&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;In this lecture, we’ll containerize and deploy a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.redhat.com&#x2F;en&#x2F;topics&#x2F;api&#x2F;what-is-a-rest-api&quot;&gt;**REST
**ful&lt;&#x2F;a&gt; Go microservice
to a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;&quot;&gt;&lt;strong&gt;Kubernetes&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; cluster. We’ll also learn about
some important building blocks of our cluster such
as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;workloads&#x2F;controllers&#x2F;deployment&#x2F;&quot;&gt;&lt;code&gt;Deployment&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
s, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;services-networking&#x2F;service&#x2F;&quot;&gt;&lt;code&gt;Service&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
s, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;configuration&#x2F;configmap&#x2F;&quot;&gt;&lt;code&gt;ConfigMap&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
s, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;configuration&#x2F;secret&#x2F;&quot;&gt;&lt;code&gt;Secret&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
s, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;services-networking&#x2F;ingress&#x2F;&quot;&gt;&lt;code&gt;Ingress&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
es, and the like.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lecture&quot;&gt;Lecture&lt;&#x2F;h2&gt;
&lt;div style=&quot;padding:56.25% 0 0 0;position:relative;&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;xSUKS0MiElA?si=PsHgJAToCmTEFjK9&quot;
    frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; 
    encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allowfullscreen
    style=&quot;position:absolute;top:0;left:0;width:100%;height:100%;&quot;
    title=&quot;Deploying a Microservice to Kubernetes&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Deploying a Microservice to Kubernetes&lt;&#x2F;p&gt;
&lt;p&gt;Below, you’ll find the &lt;strong&gt;source code&lt;&#x2F;strong&gt; of the projects that we used in this
video, links, resources, and other reference material for you learn and practice
even further.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;read-the-source&quot;&gt;Read the Source&lt;&#x2F;h2&gt;
&lt;p&gt;Below, you’ll find the &lt;strong&gt;zip archives&lt;&#x2F;strong&gt; of the projects and other related
artifacts that we’ve covered in this article.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;assets.zerotohero.dev&#x2F;deploying-a-microserve-to-kubernetes&#x2F;68c3fb40-efdf-497b-8341-25962884db0d&#x2F;fizz-crypto.zip&quot;&gt;&lt;code&gt;fizz-crypto&lt;&#x2F;code&gt; (&lt;strong&gt;53KB&lt;&#x2F;strong&gt; zip archive)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;assets.zerotohero.dev&#x2F;deploying-a-microserve-to-kubernetes&#x2F;68c3fb40-efdf-497b-8341-25962884db0d&#x2F;fizz-infra.zip&quot;&gt;&lt;code&gt;fizz-infra&lt;&#x2F;code&gt; (&lt;strong&gt;29KB&lt;&#x2F;strong&gt; zip archive)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;the-contents-of-the-netrc-file&quot;&gt;The Contents of the .netrc File&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;machine github.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;login your_github_username_comes_here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;password ghp_your_github_api_key_comes_here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;machine api.github.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;login your_github_username_comes_here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;password ghp_your_github_api_key_comes_here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;the-environment-variables&quot;&gt;The Environment Variables&lt;&#x2F;h2&gt;
&lt;p&gt;Here are the environment variables of interest that our builder script uses:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;ECR_REPO&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;112233445566.dkr.ecr.us-west-2.amazonaws.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;ECR_IMAGE_FIZZ_CRYPTO&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;fizz-crypto&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #83A598;&quot;&gt;ECR_TAG_FIZZ_CRYPTO&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt;0.0.15&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;ecr-login-script&quot;&gt;ECR Login Script&lt;&#x2F;h2&gt;
&lt;p&gt;Here’s the login script I used in the video:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #EBDBB2; background-color: #1D2021;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;aws&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; ecr get-login-password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; --region&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; us-west-2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8EC07C;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FABD2F;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; login&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; --username&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B8BB26;&quot;&gt; AWS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D3869B;&quot;&gt; --password-stdin \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1122334455667788.dkr.ecr.us-west-2.amazonaws.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;To use the above script, you need
to &lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;creating-ecr-repositories&#x2F;&quot;&gt;install and configure AWS CLI&lt;&#x2F;a&gt;
first.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;resources-and-additional-reading&quot;&gt;Resources and Additional Reading&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;services-we-used-in-the-video&quot;&gt;Services We Used in the Video&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;eks&#x2F;&quot;&gt;Amazon Elastic Kubernetes Service&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.papertrail.com&#x2F;&quot;&gt;Papertrail: Frustration-free Log Management&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;kubernetes&quot;&gt;Kubernetes&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;&quot;&gt;Kuberetes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes-sigs&quot;&gt;Kubernetes Special Interest Groups (_SIG_s)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;tutorials&#x2F;kubernetes-basics&#x2F;update&#x2F;update-intro&#x2F;&quot;&gt;Kubernetes: Performing a Rolling Update&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;tasks&#x2F;access-application-cluster&#x2F;configure-access-multiple-clusters&#x2F;&quot;&gt;Configuring Access to Multiple Clusters&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;tasks&#x2F;configure-pod-container&#x2F;configure-liveness-readiness-startup-probes&#x2F;&quot;&gt;Configuring Liveness, Readiness, and Startup Probes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;kubernetes-api-objects-that-we-saw-in-the-video&quot;&gt;Kubernetes API Objects That We Saw in the Video&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;workloads&#x2F;controllers&#x2F;deployment&#x2F;&quot;&gt;&lt;code&gt;Deployment&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;workloads&#x2F;controllers&#x2F;replicaset&#x2F;&quot;&gt;&lt;code&gt;ReplicaSet&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;services-networking&#x2F;service&#x2F;&quot;&gt;&lt;code&gt;Service&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;configuration&#x2F;configmap&#x2F;&quot;&gt;&lt;code&gt;ConfigMap&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;configuration&#x2F;secret&#x2F;&quot;&gt;&lt;code&gt;Secret&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;services-networking&#x2F;ingress&#x2F;&quot;&gt;&lt;code&gt;Ingress&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;workloads&#x2F;controllers&#x2F;job&#x2F;&quot;&gt;&lt;code&gt;Job&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;containers&quot;&gt;Containers&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;containers&#x2F;&quot;&gt;Containers&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;&quot;&gt;&lt;strong&gt;Docker Engine&lt;&#x2F;strong&gt; Overview&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;containerd.io&#x2F;docs&#x2F;&quot;&gt;&lt;strong&gt;containerd&lt;&#x2F;strong&gt; Overview&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cri-o.io&#x2F;#what-is-cri-o&quot;&gt;What is &lt;strong&gt;cri-o&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;docs&#x2F;concepts&#x2F;configuration&#x2F;manage-resources-containers&#x2F;&quot;&gt;Managing Resources for Containers&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;community&#x2F;blob&#x2F;master&#x2F;contributors&#x2F;devel&#x2F;sig-node&#x2F;container-runtime-interface.md&quot;&gt;&lt;strong&gt;CRI&lt;&#x2F;strong&gt;: Container Runtime Interface&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;container-images-we-used&quot;&gt;Container Images We Used&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;golang&quot;&gt;&lt;code&gt;golang&lt;&#x2F;code&gt; Official Docker Image&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nicolaka&#x2F;netshoot&quot;&gt;&lt;code&gt;netshoot&lt;&#x2F;code&gt;: a Docker + Kubernetes network trouble-shooting swiss-army container&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;building-images&quot;&gt;Building Images&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;reference&#x2F;builder&#x2F;&quot;&gt;&lt;code&gt;Dockerfile&lt;&#x2F;code&gt; reference&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;develop&#x2F;develop-images&#x2F;multistage-build&#x2F;&quot;&gt;Using multi-stage builds&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;best-practices&quot;&gt;Best Practices&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.redhat.com&#x2F;en&#x2F;topics&#x2F;api&#x2F;what-is-a-rest-api&quot;&gt;What is a REST API&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;semver.org&#x2F;&quot;&gt;Semantic Versioning&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;github-access-tokens&quot;&gt;GitHub Access Tokens&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;inetutils&#x2F;manual&#x2F;html_node&#x2F;The-_002enetrc-file.html&quot;&gt;&lt;code&gt;.netrc&lt;&#x2F;code&gt; File&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.github.com&#x2F;en&#x2F;github&#x2F;authenticating-to-github&#x2F;keeping-your-account-and-data-secure&#x2F;creating-a-personal-access-token&quot;&gt;Creating &lt;strong&gt;GitHub&lt;&#x2F;strong&gt; Personal Access Tokens&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;linux&quot;&gt;Linux&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;tips&#x2F;zshell-startup-files&#x2F;&quot;&gt;.zprofile, .zshrc, .zenv, OMG! What Do I Put Where?! (&lt;em&gt;a &lt;strong&gt;Zero to Hero&lt;&#x2F;strong&gt; article&lt;&#x2F;em&gt;)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;curl.se&#x2F;&quot;&gt;&lt;code&gt;curl&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Telnet&quot;&gt;&lt;code&gt;telnet&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;playlist&quot;&gt;Playlist&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;an-overview-of-fizzbuzz-pro&#x2F;&quot;&gt;Part 1: An Overview of FizzBuzz Pro&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;generating-static-html&#x2F;&quot;&gt;Part 2: Generating Static HTML&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;mutating-the-generated-html-files&#x2F;&quot;&gt;Part 3: Mutating the Generated HTML Files&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;app-authentication-overview&#x2F;&quot;&gt;Part 4: App Authentication Overview&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;implementing-an-oidc-authenticator&#x2F;&quot;&gt;Part 5: Implementing an OIDC Authenticator&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;serving-web-pages&#x2F;&quot;&gt;Part 6: Serving Web Pages&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;a-mild-introduction-to-middlewares&#x2F;&quot;&gt;Part 7: A Mild Introduction to Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;authenticate-all-the-things&#x2F;&quot;&gt;Part 8: Authenticate All the Things&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;thinking-in-middlewares&#x2F;&quot;&gt;Part 9: Thinking in Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;authentication-and-subscription-middlewares&#x2F;&quot;&gt;Part 10: Authentication and Subscription Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;implementing-authentication-handlers&#x2F;&quot;&gt;Part 11: Implementing Authentication Handlers&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;the-final-touches&#x2F;&quot;&gt;Part 12: The Final Touches&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;containerizing-our-application&#x2F;&quot;&gt;Part 13: Containerizing Our Application&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;onwards-to-kubernetes&#x2F;&quot;&gt;Part 14: Onwards to Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;creating-ecr-repositories&#x2F;&quot;&gt;Creating ECR Repositories&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Deploying a Microservice to Kubernetes&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizz-that-buzz&#x2F;&quot;&gt;Fizz that Buzz&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizzbuzz-pro-hla&#x2F;&quot;&gt;FizzBuzz Pro High-Level Design&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizzbuzz-pro-repos&#x2F;&quot;&gt;FizzBuzz Pro Repositories&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;That was how you can containerize and deploy a &lt;strong&gt;Go&lt;&#x2F;strong&gt;-based microservice to a
&lt;strong&gt;Kubernetes&lt;&#x2F;strong&gt; cluster.&lt;&#x2F;p&gt;
&lt;p&gt;We’ll have more &lt;strong&gt;Go&lt;&#x2F;strong&gt; programming and &lt;strong&gt;Kubernetes&lt;&#x2F;strong&gt; deployments in the
upcoming future.&lt;&#x2F;p&gt;
&lt;p&gt;Until next time… May the source be with you 🦄.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Who Else Journals Daily?</title>
        <published>2021-06-26T00:00:00+00:00</published>
        <updated>2021-06-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/highlights/issue-0007/"/>
        <id>https://zerotohero.dev/highlights/issue-0007/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/highlights/issue-0007/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;jornul.png&quot; alt=&quot;Journaling is self-reflection.&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;Journaling is self-reflection.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Welcome to the seventh issue of &lt;strong&gt;Zero to Hero&lt;&#x2F;strong&gt; Highlights.&lt;&#x2F;p&gt;
&lt;p&gt;This week, I was busy refactoring a tiered enterprise &lt;strong&gt;Java Spring&lt;&#x2F;strong&gt; project.
It consumed more time that I anticipated. Can I say I’m a &lt;strong&gt;JavaSpring&lt;&#x2F;strong&gt;
developer now 😀 (&lt;em&gt;instead of “JavaScript”—get it, get it?&lt;&#x2F;em&gt;)—okay, lousy dad
pun. But still, I had to shift my schedule to adapt to tackling with that beast,
which consumed &lt;strong&gt;a lot&lt;&#x2F;strong&gt; of my time and energy.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;The good part&lt;&#x2F;strong&gt;: I learned a heck lot of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spring.io&#x2F;projects&#x2F;spring-cloud&quot;&gt;&lt;strong&gt;&lt;em&gt;Spring Cloud&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;
and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spring.io&#x2F;projects&#x2F;spring-securit&quot;&gt;&lt;strong&gt;&lt;em&gt;Spring Security&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; internals,
more than I’d like to know, actually. My verdict is: Although Java has moved a
long way since &lt;em&gt;J2EE&lt;&#x2F;em&gt;, and with the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spring.io&#x2F;&quot;&gt;&lt;strong&gt;Spring Framework&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;**,
**it’s on the right path; yet I still do think it is &lt;strong&gt;heavy&lt;&#x2F;strong&gt; and &lt;strong&gt;verbose&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spring.io&#x2F;&quot;&gt;&lt;strong&gt;The Spring Framework&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is still worth learning &lt;strong&gt;&lt;em&gt;if&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;
you want to shoot flies using rocket launchers 😜—kidding, or &lt;strong&gt;maybe not&lt;&#x2F;strong&gt;.
Anyhoo, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spring.io&#x2F;&quot;&gt;try it yourself&lt;&#x2F;a&gt; and tell me how your learning
experience went.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;what-s-new-on-zero-to-hero-woman-fried-egg&quot;&gt;What’s New on &lt;strong&gt;Zero to Hero&lt;&#x2F;strong&gt; 👩‍🍳&lt;&#x2F;h2&gt;
&lt;p&gt;This week, I mainly did infrastructure and plumbing work, such as creating
container images and ensuring that &lt;strong&gt;FizzBuzz Pro&lt;&#x2F;strong&gt; microservices are at least
answering to &lt;em&gt;health&lt;&#x2F;em&gt; and &lt;em&gt;liveness&lt;&#x2F;em&gt; endpoints.&lt;&#x2F;p&gt;

&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;2021&amp;#x2F;06&amp;#x2F;Screen-Shot-2021-06-26-at-2.11.45-PM.png&quot; alt=&quot;Creating a go Docker image.&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;Creating a go Docker image.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;blockquote&gt;
&lt;p&gt;I don’t have a definite schedule. Yet, since I work during the day, I’ll
mostly be streaming at nights (&lt;em&gt;pacific time&lt;&#x2F;em&gt;)—stay tuned.&lt;&#x2F;p&gt;
&lt;p&gt;I stream every couple of days; however, it also depends on my energy levels,
and the programs that I might have with family and friends.&lt;&#x2F;p&gt;
&lt;p&gt;The best way to get notified as soon as I’m online is
to &lt;a rel=&quot;external&quot; title=&quot;Follow me on Twitch.&quot; href=&quot;https:&#x2F;&#x2F;twitch.tv&#x2F;VadidekiVolkan&quot;&gt;hop on the channel and follow me on &lt;strong&gt;Twitch&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Other than the live streams, there’s not much visible progress, but many cool
things are brewing behind-the-scenes—stay tuned.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;random-thought-of-the-week&quot;&gt;Random Thought of the Week&lt;&#x2F;h2&gt;
&lt;p&gt;Do you keep a journal? If not, you should.&lt;&#x2F;p&gt;
&lt;p&gt;Your journal also helps to start your day with a set of probing questions. Here
are the five questions I ask myself &lt;strong&gt;every single day&lt;&#x2F;strong&gt; and how those questions
change and shape my life:&lt;&#x2F;p&gt;

&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;2021&amp;#x2F;06&amp;#x2F;checkin.jpg&quot; alt=&quot;The questions I ask to myself every single day.&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;The questions I ask to myself every single day.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;what-is-it-that-you-really-want-to-be-and-do&quot;&gt;What is it that you really want to be and do?&lt;&#x2F;h3&gt;
&lt;p&gt;This question is about your &lt;strong&gt;aspiration&lt;&#x2F;strong&gt; and &lt;strong&gt;purpose&lt;&#x2F;strong&gt;. What is it that you
do, and what is it that you &lt;strong&gt;really&lt;&#x2F;strong&gt; want to be great at doing. The key is to
&lt;strong&gt;be honest&lt;&#x2F;strong&gt; with yourself. The question does not read “&lt;em&gt;what do people want
you to become?&lt;&#x2F;em&gt;”, it asks what is it that &lt;strong&gt;YOU&lt;&#x2F;strong&gt; want to be and do.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-are-you-doing-really-well-that-is-helping-you-get-there&quot;&gt;What are you doing really well that is helping you get there?&lt;&#x2F;h3&gt;
&lt;p&gt;This question helps you spotlight a core strength and your ability to execute
towards your goal.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-are-you-not-doing-well-that-is-preventing-you-from-getting-there&quot;&gt;What are you not doing well that is preventing you from getting there?&lt;&#x2F;h3&gt;
&lt;p&gt;This, again, requires an honest and critical assessment of the things that block
your way.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-will-you-do-differently-tomorrow-to-meet-those-challenges&quot;&gt;What will you do differently tomorrow to meet those challenges?&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Don’t practice your forehand while your backhand sucks.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This question pushes you to focus on the right priorities so that you don’t get
into a situation of “&lt;em&gt;I am making good time, but I am lost.&lt;&#x2F;em&gt;” It also helps move
you out of your comfort zone.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-can-i-help-myself-where-do-i-need-the-most-help&quot;&gt;How can I help myself &#x2F; where do I need the most help?&lt;&#x2F;h3&gt;
&lt;p&gt;The answers to the first four questions match against areas where you (&lt;em&gt;as your
own mentor&lt;&#x2F;em&gt;) can have particular strengths. In contrast, the second question
helps you to open up to your network to &lt;strong&gt;ask for help&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;keep-on-journaling&quot;&gt;Keep on Journaling&lt;&#x2F;h2&gt;
&lt;p&gt;I journal a lot, initially with pen and paper and later on digitally. I believe
it’s a &lt;strong&gt;transformative&lt;&#x2F;strong&gt; experience that everyone needs to give it an honest
try at least.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your journal is a regular private, personal, &lt;strong&gt;honest&lt;&#x2F;strong&gt;, and &lt;strong&gt;truthful&lt;&#x2F;strong&gt;
self-diagnosis that can take &lt;strong&gt;at most two minutes&lt;&#x2F;strong&gt; of your time.&lt;br &#x2F;&gt;
If you don’t have two minutes a day to spare, well, then you do need to sort
out your priorities.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Besides, journaling is not a big hurdle: You are not writing a novel or an
essay—unless you want to. You can use anything to journal: Pen and paper works
just fine; you can use a dedicated app, or you can fire your favorite text
editor. It doesn’t matter.&lt;&#x2F;p&gt;
&lt;p&gt;Keeping a journal clears your mind off of random thoughts, helps you keep on
track and achieve your goals and clarifies your intentions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;look-what-i-ve-found&quot;&gt;Look What I’ve Found&lt;&#x2F;h2&gt;
&lt;p&gt;Here are the things that grabbed my attention this week.&lt;&#x2F;p&gt;
&lt;p&gt;I typically don’t share these anywhere else.&lt;&#x2F;p&gt;
&lt;p&gt;Exclusively hand-picked for you 👌. Enjoy.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wasmer.io&#x2F;&quot;&gt;Run any code on any client with &lt;strong&gt;WebAssembly&lt;&#x2F;strong&gt; and &lt;strong&gt;Wasmer&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;0.30000000000000004.com&quot;&gt;&lt;strong&gt;IEEE754&lt;&#x2F;strong&gt; anyone&lt;&#x2F;a&gt;?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpinejs&#x2F;alpine&quot;&gt;Fed up from the React&#x2F;Vue&#x2F;Angular madness?—&lt;strong&gt;Alpine&lt;&#x2F;strong&gt; is a rugged, minimal
framework for composing &lt;strong&gt;JavaScript&lt;&#x2F;strong&gt; behavior in your markup&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;issues&quot;&gt;Issues&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0001&#x2F;&quot;&gt;Issue 1: Hello World, Hello Stars, Hello Universe&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0002&#x2F;&quot;&gt;Issue 2: The Only Thing That doesn’t Change is Change Itself&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0003&#x2F;&quot;&gt;Issue 3: Know Thyself&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0004&#x2F;&quot;&gt;Issue 4: Have You Fizzed that Buzz?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0005&#x2F;&quot;&gt;Issue 5: Be Kind&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0006&#x2F;&quot;&gt;Issue 6: Earn the Promotion You Deserve&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Issue 7: Who Else Journals Daily?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0008&#x2F;&quot;&gt;Issue 8: Who Are You?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0009&#x2F;&quot;&gt;Issue 9: How to Make Yourself Heard&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0010&#x2F;&quot;&gt;Issue 10: Tough Conversations&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0011&#x2F;&quot;&gt;Issue 11: Assemble Your Personal Board of Advisor&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0012&#x2F;&quot;&gt;Issue 12: What’s Your Plan&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0013&#x2F;&quot;&gt;Issue 13: Nine-to-Five? I Don’t Think So&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0014&#x2F;&quot;&gt;Issue 14: Respect and Understanding&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0015&#x2F;&quot;&gt;Issue 15: Pivoting Your Career?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0016&#x2F;&quot;&gt;Issue 16: Ghosted?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0017&#x2F;&quot;&gt;Issue 17: ‘Following Your Passion’ Is Hardly Enough&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0018&#x2F;&quot;&gt;Issue 18: Keep Cam and Carry On&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0019&#x2F;&quot;&gt;Issue 19: Attention, Intention, Compassion&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0020&#x2F;&quot;&gt;Issue 20: Words Matter&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0021&#x2F;&quot;&gt;Issue 21: Change Is the Only Constant&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0022&#x2F;&quot;&gt;Issue 22: Overcome the Awkward Feeling of Networking&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0023&#x2F;&quot;&gt;Issue 23: Unleash Your Curiosity: Unlock Your Potential as a Leader&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0024&#x2F;&quot;&gt;Issue 24: Interview Done. Radio Silence 🎃 What Now?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0025&#x2F;&quot;&gt;Issue 25: Unlock Your True Potential: Make Your Hard Work Visible&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0026&#x2F;&quot;&gt;Issue 26: Winning at Work: Thriving With Difficult Colleagues&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;highlights&#x2F;issue-0027&#x2F;&quot;&gt;Issue 27: Promotions Don’t Happen Overnight&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Creating ECR Repositories</title>
        <published>2021-06-18T00:00:00+00:00</published>
        <updated>2021-06-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Volkan Özçelik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zerotohero.dev/zero-to-prod/creating-ecr-repositories/"/>
        <id>https://zerotohero.dev/zero-to-prod/creating-ecr-repositories/</id>
        
        <content type="html" xml:base="https://zerotohero.dev/zero-to-prod/creating-ecr-repositories/">
&lt;div class=&quot;z2h-image&quot;&gt;
    &lt;p class=&quot;img&quot;&gt;&lt;img src=&quot;&amp;#x2F;images&amp;#x2F;size&amp;#x2F;w1200&amp;#x2F;2024&amp;#x2F;03&amp;#x2F;elastic.png&quot; alt=&quot;These are &amp;#x27;elastic&amp;#x27; containers.&quot;&#x2F;&gt;&lt;&#x2F;p&gt;
    &lt;p class=&quot;alt&quot; style=&quot;text-align: center; font-style: italic;
      margin-top: -1.125em;
      font-size: 1em;&quot;&gt;These are &amp;#x27;elastic&amp;#x27; containers.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;This quick video will create an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;ecr&#x2F;&quot;&gt;&lt;strong&gt;AWS ECR&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; repo
and set up our development environment to interact with it.&lt;&#x2F;p&gt;
&lt;div style=&quot;padding:56.25% 0 0 0;position:relative;&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;domIOFhMjpI?si=9-ofptjrcT6arxoS&quot;
    frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; 
    encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allowfullscreen
    style=&quot;position:absolute;top:0;left:0;width:100%;height:100%;&quot;
    title=&quot;Creating ECR Repositories&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Creating ECR Repositories&lt;&#x2F;p&gt;
&lt;h2 id=&quot;resources-and-additional-reading&quot;&gt;Resources and Additional Reading&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;ecr&#x2F;&quot;&gt;Amazon Elastic Container Registry&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.aws.amazon.com&#x2F;cli&#x2F;latest&#x2F;userguide&#x2F;cli-chap-install.html&quot;&gt;Installing the AWS CLI&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.digitalocean.com&#x2F;community&#x2F;tutorials&#x2F;what-is-a-container&quot;&gt;What is a Container&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;playlist&quot;&gt;Playlist&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;an-overview-of-fizzbuzz-pro&#x2F;&quot;&gt;Part 1: An Overview of FizzBuzz Pro&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;generating-static-html&#x2F;&quot;&gt;Part 2: Generating Static HTML&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;mutating-the-generated-html-files&#x2F;&quot;&gt;Part 3: Mutating the Generated HTML Files&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;app-authentication-overview&#x2F;&quot;&gt;Part 4: App Authentication Overview&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;implementing-an-oidc-authenticator&#x2F;&quot;&gt;Part 5: Implementing an OIDC Authenticator&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;serving-web-pages&#x2F;&quot;&gt;Part 6: Serving Web Pages&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;a-mild-introduction-to-middlewares&#x2F;&quot;&gt;Part 7: A Mild Introduction to Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;authenticate-all-the-things&#x2F;&quot;&gt;Part 8: Authenticate All the Things&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;thinking-in-middlewares&#x2F;&quot;&gt;Part 9: Thinking in Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;authentication-and-subscription-middlewares&#x2F;&quot;&gt;Part 10: Authentication and Subscription Middlewares&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;implementing-authentication-handlers&#x2F;&quot;&gt;Part 11: Implementing Authentication Handlers&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;the-final-touches&#x2F;&quot;&gt;Part 12: The Final Touches&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;containerizing-our-application&#x2F;&quot;&gt;Part 13: Containerizing Our Application&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;onwards-to-kubernetes&#x2F;&quot;&gt;Part 14: Onwards to Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;▶ Creating ECR Repositories&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;deploying-a-microservice-to-k8s&#x2F;&quot;&gt;Deploying a Microservice to Kubernetes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizz-that-buzz&#x2F;&quot;&gt;Fizz that Buzz&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizzbuzz-pro-hla&#x2F;&quot;&gt;FizzBuzz Pro High-Level Design&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zerotohero.dev&#x2F;zero-to-prod&#x2F;fizzbuzz-pro-repos&#x2F;&quot;&gt;FizzBuzz Pro Repositories&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;next-up&quot;&gt;Next Up&lt;&#x2F;h2&gt;
&lt;p&gt;Next on my video production queue are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Going through the sequence diagrams of &lt;strong&gt;FizzBuzz Pro&lt;&#x2F;strong&gt; authentication,
subscription, and signup flow.&lt;&#x2F;li&gt;
&lt;li&gt;How to harden our &lt;strong&gt;IAM account security&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;And a quickie about &lt;strong&gt;Ghost theme development&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Once those videos are done, we’ll start working on actually implementing the *
&lt;em&gt;FizzBuzz Pro&lt;&#x2F;em&gt;* infrastructure, one microservice at a time; it’ll be fun.&lt;&#x2F;p&gt;
&lt;p&gt;Until the next video… May the source be with you 🦄.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
