<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Diana </title>
    <description>The latest articles on Forem by Diana  (@daguayza12).</description>
    <link>https://forem.com/daguayza12</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1279391%2F975b453e-95fe-49e3-baa2-fe09f888cc30.png</url>
      <title>Forem: Diana </title>
      <link>https://forem.com/daguayza12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/daguayza12"/>
    <language>en</language>
    <item>
      <title>Kubernetes: How Your Apps Find Each Other 🌐</title>
      <dc:creator>Diana </dc:creator>
      <pubDate>Wed, 25 Mar 2026 04:13:59 +0000</pubDate>
      <link>https://forem.com/daguayza12/kubernetes-how-your-apps-find-each-other-1o4n</link>
      <guid>https://forem.com/daguayza12/kubernetes-how-your-apps-find-each-other-1o4n</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction: From Addresses to Orchestration&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In my previous posts, we covered the &lt;a href="https://dev.to/daguayza12/kubernetes-making-sense-of-the-madness-1lga"&gt;high-level architecture of Kubernetes&lt;/a&gt; and the &lt;a href="https://dev.to/daguayza12/networking-101-the-concepts-explained-simply-1aja"&gt;networking fundamentals&lt;/a&gt; that help explain how devices find each other:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IP addresses&lt;/strong&gt; (street names + house numbers)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ports&lt;/strong&gt; (doors)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private vs. Public IPs&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Localhost&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now it's time to connect the dots. Inside a Kubernetes cluster:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pods&lt;/strong&gt; get their own IP addresses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Services&lt;/strong&gt; act as stable phone book entries so nothing gets lost when Pods come and go&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ingress controllers&lt;/strong&gt; manage traffic from the outside world&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sound familiar? It's every concept from Networking 101, applied to containers.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Kubernetes Networking: The Building's Internal Address System 🏢&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let's bring our networking knowledge into the Kubernetes building. Remember, we have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;cluster&lt;/strong&gt; (the building)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nodes&lt;/strong&gt; (the floors)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pods&lt;/strong&gt; (the rooms)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IFRECiAgICBzdWJncmFwaCBDTFVTVEVSWyJDbHVzdGVyIChUaGUgQnVpbGRpbmcpIl0KICAgICAgICBzdWJncmFwaCBOT0RFMVsiTm9kZSAoRmxvb3IgMSkiXQogICAgICAgICAgICBQMVsiUG9kIChSb29tIDEwMSkiXQogICAgICAgICAgICBQMlsiUG9kIChSb29tIDEwMikiXQogICAgICAgIGVuZAogICAgICAgIHN1YmdyYXBoIE5PREUyWyJOb2RlIChGbG9vciAyKSJdCiAgICAgICAgICAgIFAzWyJQb2QgKFJvb20gMjAxKSJdCiAgICAgICAgICAgIFA0WyJQb2QgKFJvb20gMjAyKSJdCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBzdHlsZSBDTFVTVEVSIGZpbGw6I0UzRjJGRCxzdHJva2U6IzRBOTBEOSxjb2xvcjojMzMzCiAgICBzdHlsZSBOT0RFMSBmaWxsOiNGRkYzRTAsc3Ryb2tlOiNGNUE2MjMsY29sb3I6IzMzMwogICAgc3R5bGUgTk9ERTIgZmlsbDojRkZGM0UwLHN0cm9rZTojRjVBNjIzLGNvbG9yOiMzMzMKICAgIHN0eWxlIFAxIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAyIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAzIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFA0IGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQ%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IFRECiAgICBzdWJncmFwaCBDTFVTVEVSWyJDbHVzdGVyIChUaGUgQnVpbGRpbmcpIl0KICAgICAgICBzdWJncmFwaCBOT0RFMVsiTm9kZSAoRmxvb3IgMSkiXQogICAgICAgICAgICBQMVsiUG9kIChSb29tIDEwMSkiXQogICAgICAgICAgICBQMlsiUG9kIChSb29tIDEwMikiXQogICAgICAgIGVuZAogICAgICAgIHN1YmdyYXBoIE5PREUyWyJOb2RlIChGbG9vciAyKSJdCiAgICAgICAgICAgIFAzWyJQb2QgKFJvb20gMjAxKSJdCiAgICAgICAgICAgIFA0WyJQb2QgKFJvb20gMjAyKSJdCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBzdHlsZSBDTFVTVEVSIGZpbGw6I0UzRjJGRCxzdHJva2U6IzRBOTBEOSxjb2xvcjojMzMzCiAgICBzdHlsZSBOT0RFMSBmaWxsOiNGRkYzRTAsc3Ryb2tlOiNGNUE2MjMsY29sb3I6IzMzMwogICAgc3R5bGUgTk9ERTIgZmlsbDojRkZGM0UwLHN0cm9rZTojRjVBNjIzLGNvbG9yOiMzMzMKICAgIHN0eWxlIFAxIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAyIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAzIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFA0IGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQ%3D" alt="Cluster, Nodes, and Pods - The Building Analogy" width="575" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Kubernetes, every Pod gets its own IP address. That's like every room in our building getting its own unique address.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Three Networking Challenges Kubernetes Solves&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Building Analogy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1. Pod-to-Pod Communication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How does Room 101 talk to Room 205?&lt;/td&gt;
&lt;td&gt;Rooms calling each other directly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2. Service Discovery&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How do I find the coffee shop if it moved?&lt;/td&gt;
&lt;td&gt;A building directory that stays up to date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3. External Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How do customers outside find us?&lt;/td&gt;
&lt;td&gt;Getting visitors into the building&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Let's tackle each one.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Challenge 1: Pod-to-Pod Communication 🗣️&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In Kubernetes, &lt;strong&gt;every Pod can talk to every other Pod directly&lt;/strong&gt; using their IP addresses, no special configuration needed.&lt;/p&gt;

&lt;p&gt;It's like every room in the building having its own phone number, and every phone being able to call any other phone.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Administrators can restrict this later with &lt;strong&gt;NetworkPolicies&lt;/strong&gt;, but out of the box, everything is open.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IExSCiAgICBzdWJncmFwaCBOT0RFMVsi8J%2BPoiBGbG9vciAxIOKAlCBOb2RlIDEiXQogICAgICAgIGRpcmVjdGlvbiBUQgogICAgICAgIFAxWyJSb29tIDEwMTxici8%2BSVA6IDEwLjI0NC4xLjUiXQogICAgICAgIFAyWyJSb29tIDEwMjxici8%2BSVA6IDEwLjI0NC4xLjYiXQogICAgZW5kCgogICAgc3ViZ3JhcGggTk9ERTJbIvCfj6IgRmxvb3IgMiDigJQgTm9kZSAyIl0KICAgICAgICBkaXJlY3Rpb24gVEIKICAgICAgICBQM1siUm9vbSAyMDE8YnIvPklQOiAxMC4yNDQuMi44Il0KICAgICAgICBQNFsiUm9vbSAyMDI8YnIvPklQOiAxMC4yNDQuMi45Il0KICAgIGVuZAoKICAgIFAxIDwtLT4gUDMKICAgIFAxIDwtLT4gUDQKICAgIFAyIDwtLT4gUDMKICAgIFAyIDwtLT4gUDQKICAgIFAxIDwtLT4gUDIKICAgIFAzIDwtLT4gUDQKCiAgICBzdHlsZSBOT0RFMSBmaWxsOiNGRkYzRTAsc3Ryb2tlOiNGNUE2MjMsY29sb3I6IzMzMwogICAgc3R5bGUgTk9ERTIgZmlsbDojRTNGMkZELHN0cm9rZTojNEE5MEQ5LGNvbG9yOiMzMzMKICAgIHN0eWxlIFAxIGZpbGw6I0Y1QTYyMyxzdHJva2U6I0M0N0QwRSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAyIGZpbGw6I0Y1QTYyMyxzdHJva2U6I0M0N0QwRSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAzIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFA0IGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQK" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IExSCiAgICBzdWJncmFwaCBOT0RFMVsi8J%2BPoiBGbG9vciAxIOKAlCBOb2RlIDEiXQogICAgICAgIGRpcmVjdGlvbiBUQgogICAgICAgIFAxWyJSb29tIDEwMTxici8%2BSVA6IDEwLjI0NC4xLjUiXQogICAgICAgIFAyWyJSb29tIDEwMjxici8%2BSVA6IDEwLjI0NC4xLjYiXQogICAgZW5kCgogICAgc3ViZ3JhcGggTk9ERTJbIvCfj6IgRmxvb3IgMiDigJQgTm9kZSAyIl0KICAgICAgICBkaXJlY3Rpb24gVEIKICAgICAgICBQM1siUm9vbSAyMDE8YnIvPklQOiAxMC4yNDQuMi44Il0KICAgICAgICBQNFsiUm9vbSAyMDI8YnIvPklQOiAxMC4yNDQuMi45Il0KICAgIGVuZAoKICAgIFAxIDwtLT4gUDMKICAgIFAxIDwtLT4gUDQKICAgIFAyIDwtLT4gUDMKICAgIFAyIDwtLT4gUDQKICAgIFAxIDwtLT4gUDIKICAgIFAzIDwtLT4gUDQKCiAgICBzdHlsZSBOT0RFMSBmaWxsOiNGRkYzRTAsc3Ryb2tlOiNGNUE2MjMsY29sb3I6IzMzMwogICAgc3R5bGUgTk9ERTIgZmlsbDojRTNGMkZELHN0cm9rZTojNEE5MEQ5LGNvbG9yOiMzMzMKICAgIHN0eWxlIFAxIGZpbGw6I0Y1QTYyMyxzdHJva2U6I0M0N0QwRSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAyIGZpbGw6I0Y1QTYyMyxzdHJva2U6I0M0N0QwRSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAzIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFA0IGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQK" alt="Pod-to-Pod Communication across Nodes" width="908" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every room can call every other room directly, even across floors!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Point:&lt;/strong&gt; Pods can communicate across Nodes. Kubernetes handles the routing behind the scenes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Room 102 (Floor 1) → Room 202 (Floor 2) ✅&lt;/li&gt;
&lt;li&gt;Room 102 (Floor 1) → Room 101 (Floor 1) ✅&lt;/li&gt;
&lt;li&gt;Any room → Any other room ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here's the problem...&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Challenge 2: Service Discovery: The Problem with Pod IP Addresses 😰&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Remember how we said Pods are &lt;strong&gt;ephemeral&lt;/strong&gt;? They come and go. They crash and get replaced. They scale up and down. Every time a Pod is replaced, it gets a &lt;strong&gt;new IP address&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine this scenario in our building:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Monday:
  Coffee Shop is in Room 101 (IP: 10.244.1.5)
  Everyone knows to go to Room 101 ✅

Tuesday:
  Coffee Shop crashed! Kubernetes restarts it.
  New Coffee Shop is in Room 205 (IP: 10.244.2.10)
  Nobody knows the new address ❌

Wednesday:
  We scaled to 3 Coffee Shops.
  They're in Room 101, Room 205, and Room 302.
  Which one do customers go to?! 🤯
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is like a coffee shop that changes its street address every day. Your regular customers would never find you! This is where having something stable, something permanent that people can always rely on, makes all the difference.&lt;/p&gt;

&lt;p&gt;That's exactly what &lt;strong&gt;Services&lt;/strong&gt; solve.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Kubernetes Services: The Building Directory 📞&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Service&lt;/strong&gt; in Kubernetes is a stable address that always points to the right Pods, no matter where they are or how many there are.&lt;/p&gt;

&lt;p&gt;Remember the DNS phone book from &lt;a href="https://dev.to/daguayza12/networking-101-the-concepts-explained-simply-1aja"&gt;Networking 101&lt;/a&gt;? Services work the same way. They're stable phone book entries for your Pods. Think of it as the building's front desk directory.&lt;/p&gt;

&lt;p&gt;Instead of telling customers "Go to Room 101" (which might change tomorrow), you tell them "Call the Coffee Shop extension." The front desk always connects them to the right room.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Without a Service:
  Customer → "Where's the coffee shop?" → ??? 😵

With a Service:
  Customer → "Coffee Shop, please" → Front Desk → Room 101 ✅
                                                  → Room 205 ✅
                                                  → Room 302 ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;What a Service gives you:&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Stable IP Address
&lt;/h4&gt;

&lt;p&gt;Every Service gets a &lt;strong&gt;ClusterIP&lt;/strong&gt; that never changes. Pods come and go, but the Service address stays the same.&lt;/p&gt;

&lt;h4&gt;
  
  
  Load Balancing
&lt;/h4&gt;

&lt;p&gt;Distributes incoming traffic across multiple Pods so no single one gets overloaded.&lt;/p&gt;

&lt;p&gt;3 coffee shops open in the building? The front desk doesn't send every customer to the same one. It spreads them out so no single shop gets overwhelmed. The Service does this automatically as you scale up your Pods.&lt;/p&gt;

&lt;h4&gt;
  
  
  DNS Name
&lt;/h4&gt;

&lt;p&gt;Just like &lt;code&gt;google.com&lt;/code&gt; maps to an IP address, Kubernetes gives every Service a name like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;coffee-shop.default.svc.cluster.local&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So Pods can find each other by name instead of memorizing IPs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;coffee-shop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Service name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Namespace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;svc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cluster.local&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;"Inside this cluster"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What's a Namespace?&lt;/strong&gt; Going back to our building analogy, Namespaces are like the different departments on each floor. Marketing, Engineering, HR, all in the same building but keeping their stuff separate. How teams separate things is case by case depending on their setup.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These DNS names only work &lt;em&gt;inside&lt;/em&gt; the cluster's private network. Remember how devices on your home network find each other using private IPs like &lt;code&gt;192.168.1.x&lt;/code&gt;? Same idea here.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How Services Find Pods: Labels and Selectors 🏷️&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Services don't track Pods by their IP addresses (because those change). Instead, they use &lt;strong&gt;labels&lt;/strong&gt;. Every Pod gets a label, and the Service is configured to find all Pods with a matching label.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Service: "Find all Pods labeled app=coffee-shop"

  Pod 1 (Room 101) - label: app=coffee-shop  ✅ Match!
  Pod 2 (Room 205) - label: app=coffee-shop  ✅ Match!
  Pod 3 (Room 302) - label: app=coffee-shop  ✅ Match!
  Pod 4 (Room 110) - label: app=bakery       ❌ Not a match
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's like the front desk has a rule: "Anyone wearing a Coffee Shop uniform works at the coffee shop."&lt;/p&gt;

&lt;p&gt;New employees (Pods) automatically get found, and ones who leave are automatically removed. No manual updates needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Service Types + Ingress 🔧&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Kubernetes gives you different types of Services, plus a separate resource called Ingress. Let's look at the ones that matter most when you're getting started.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. ClusterIP: The Internal Extension 📞&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Default type, internal communication only&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is like an internal phone extension. Only people inside the building can use it. Customers outside can't dial this number.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IFRECiAgICBzdWJncmFwaCBDTFVTVEVSWyLwn4%2BiIEluc2lkZSB0aGUgQ2x1c3RlciJdCiAgICAgICAgRlBbIkZyb250ZW5kIFBvZDxici8%2BQ2FsbCBjb2ZmZWUtc2hvcCBzZXJ2aWNlIl0KICAgICAgICBTVkNbIkNsdXN0ZXJJUCBTZXJ2aWNlPGJyLz4xMC45Ni40NS4xMiJdCiAgICAgICAgUDFbIlBvZCAxIl0KICAgICAgICBQMlsiUG9kIDIiXQogICAgICAgIFAzWyJQb2QgMyJdCiAgICAgICAgRlAgLS0%2BIFNWQwogICAgICAgIFNWQyAtLT4gUDEKICAgICAgICBTVkMgLS0%2BIFAyCiAgICAgICAgU1ZDIC0tPiBQMwogICAgZW5kCiAgICBPVVRTSURFWyLinYwgT3V0c2lkZSB3b3JsZDxici8%2BQ0FOTk9UIHJlYWNoIHRoaXMiXQogICAgT1VUU0lERSAtLi14IENMVVNURVIKCiAgICBzdHlsZSBDTFVTVEVSIGZpbGw6I0UzRjJGRCxzdHJva2U6IzRBOTBEOSxjb2xvcjojMzMzCiAgICBzdHlsZSBGUCBmaWxsOiM0QTkwRDksc3Ryb2tlOiMyQzVGOEEsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCiAgICBzdHlsZSBTVkMgZmlsbDojRjVBNjIzLHN0cm9rZTojQzQ3RDBFLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgUDEgZmlsbDojN0VEMzIxLHN0cm9rZTojNUE5QTE4LGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgUDIgZmlsbDojN0VEMzIxLHN0cm9rZTojNUE5QTE4LGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgUDMgZmlsbDojN0VEMzIxLHN0cm9rZTojNUE5QTE4LGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgT1VUU0lERSBmaWxsOiNGRjZCNkIsc3Ryb2tlOiNDQzU1NTUsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xk" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IFRECiAgICBzdWJncmFwaCBDTFVTVEVSWyLwn4%2BiIEluc2lkZSB0aGUgQ2x1c3RlciJdCiAgICAgICAgRlBbIkZyb250ZW5kIFBvZDxici8%2BQ2FsbCBjb2ZmZWUtc2hvcCBzZXJ2aWNlIl0KICAgICAgICBTVkNbIkNsdXN0ZXJJUCBTZXJ2aWNlPGJyLz4xMC45Ni40NS4xMiJdCiAgICAgICAgUDFbIlBvZCAxIl0KICAgICAgICBQMlsiUG9kIDIiXQogICAgICAgIFAzWyJQb2QgMyJdCiAgICAgICAgRlAgLS0%2BIFNWQwogICAgICAgIFNWQyAtLT4gUDEKICAgICAgICBTVkMgLS0%2BIFAyCiAgICAgICAgU1ZDIC0tPiBQMwogICAgZW5kCiAgICBPVVRTSURFWyLinYwgT3V0c2lkZSB3b3JsZDxici8%2BQ0FOTk9UIHJlYWNoIHRoaXMiXQogICAgT1VUU0lERSAtLi14IENMVVNURVIKCiAgICBzdHlsZSBDTFVTVEVSIGZpbGw6I0UzRjJGRCxzdHJva2U6IzRBOTBEOSxjb2xvcjojMzMzCiAgICBzdHlsZSBGUCBmaWxsOiM0QTkwRDksc3Ryb2tlOiMyQzVGOEEsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCiAgICBzdHlsZSBTVkMgZmlsbDojRjVBNjIzLHN0cm9rZTojQzQ3RDBFLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgUDEgZmlsbDojN0VEMzIxLHN0cm9rZTojNUE5QTE4LGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgUDIgZmlsbDojN0VEMzIxLHN0cm9rZTojNUE5QTE4LGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgUDMgZmlsbDojN0VEMzIxLHN0cm9rZTojNUE5QTE4LGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgT1VUU0lERSBmaWxsOiNGRjZCNkIsc3Ryb2tlOiNDQzU1NTUsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xk" alt="ClusterIP Service - Internal Only" width="780" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When your services only need to talk to each other inside the cluster. For example, your frontend app calling your backend API.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. NodePort: The Side Entrance 🚪&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Exposes the Service on each Node's IP at a static port&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is like adding a side entrance to the building. People outside can now get in, but they need to know which building (Node) to go to and which door (port) to use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IExSCiAgICBDVVNUWyJDdXN0b21lcjxici8%2BR28gdG8gYnVpbGRpbmc8YnIvPm9uIHBvcnQgMzAwODAiXQogICAgc3ViZ3JhcGggQ0xVU1RFUlsiQ2x1c3RlciJdCiAgICAgICAgTlBbIk5vZGUgMTxici8%2BUG9ydCAzMDA4MCJdCiAgICAgICAgU1ZDWyJDbHVzdGVySVAgU2VydmljZSJdCiAgICAgICAgUDFbIlBvZCAxIl0KICAgICAgICBQMlsiUG9kIDIiXQogICAgICAgIFAzWyJQb2QgMyJdCiAgICAgICAgTlAgLS0%2BIFNWQwogICAgICAgIFNWQyAtLT4gUDEKICAgICAgICBTVkMgLS0%2BIFAyCiAgICAgICAgU1ZDIC0tPiBQMwogICAgZW5kCiAgICBDVVNUIC0tPiBOUAoKICAgIHN0eWxlIENMVVNURVIgZmlsbDojRTNGMkZELHN0cm9rZTojNEE5MEQ5LGNvbG9yOiMzMzMKICAgIHN0eWxlIENVU1QgZmlsbDojOUI1OUI2LHN0cm9rZTojN0QzQzk4LGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgTlAgZmlsbDojRjVBNjIzLHN0cm9rZTojQzQ3RDBFLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgU1ZDIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAxIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAyIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAzIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQ%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IExSCiAgICBDVVNUWyJDdXN0b21lcjxici8%2BR28gdG8gYnVpbGRpbmc8YnIvPm9uIHBvcnQgMzAwODAiXQogICAgc3ViZ3JhcGggQ0xVU1RFUlsiQ2x1c3RlciJdCiAgICAgICAgTlBbIk5vZGUgMTxici8%2BUG9ydCAzMDA4MCJdCiAgICAgICAgU1ZDWyJDbHVzdGVySVAgU2VydmljZSJdCiAgICAgICAgUDFbIlBvZCAxIl0KICAgICAgICBQMlsiUG9kIDIiXQogICAgICAgIFAzWyJQb2QgMyJdCiAgICAgICAgTlAgLS0%2BIFNWQwogICAgICAgIFNWQyAtLT4gUDEKICAgICAgICBTVkMgLS0%2BIFAyCiAgICAgICAgU1ZDIC0tPiBQMwogICAgZW5kCiAgICBDVVNUIC0tPiBOUAoKICAgIHN0eWxlIENMVVNURVIgZmlsbDojRTNGMkZELHN0cm9rZTojNEE5MEQ5LGNvbG9yOiMzMzMKICAgIHN0eWxlIENVU1QgZmlsbDojOUI1OUI2LHN0cm9rZTojN0QzQzk4LGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgTlAgZmlsbDojRjVBNjIzLHN0cm9rZTojQzQ3RDBFLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgU1ZDIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAxIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAyIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFAzIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQ%3D" alt="NodePort Service - External via Node Port" width="820" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; For development and testing, or when you want quick external access without a cloud load balancer.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Ingress: The Traffic Cop 🚦&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;A separate resource (not a Service type) that routes external traffic to multiple Services based on rules&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ingress is like a traffic cop standing in the lobby of your building. Visitors walk in, and the traffic cop checks where they're trying to go and directs them to the right department.&lt;/p&gt;

&lt;p&gt;Heading to &lt;code&gt;coffee.com/menu&lt;/code&gt;? Go left. &lt;code&gt;coffee.com/order&lt;/code&gt;? Go right. &lt;code&gt;tea.com&lt;/code&gt;? Take the elevator to floor 3.&lt;/p&gt;

&lt;p&gt;Instead of having a separate entrance for every service, you have one entrance with a traffic cop handling all the routing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IExSCiAgICBSMVsiY29mZmVlLmNvbS9tZW51Il0KICAgIFIyWyJjb2ZmZWUuY29tL29yZGVyIl0KICAgIFIzWyJ0ZWEuY29tIl0KICAgIHN1YmdyYXBoIENMVVNURVJbIvCfj6IgQ2x1c3RlciJdCiAgICAgICAgSUNbIvCfmqYgSW5ncmVzcyBDb250cm9sbGVyPGJyLz4oVHJhZmZpYyBDb3ApIl0KICAgICAgICBNU1siTWVudSBTZXJ2aWNlIl0KICAgICAgICBPU1siT3JkZXIgU2VydmljZSJdCiAgICAgICAgVFNbIlRlYSBTZXJ2aWNlIl0KICAgICAgICBNUFsiUG9kcyJdCiAgICAgICAgT1BbIlBvZHMiXQogICAgICAgIFRQWyJQb2RzIl0KICAgICAgICBJQyAtLT4gTVMgLS0%2BIE1QCiAgICAgICAgSUMgLS0%2BIE9TIC0tPiBPUAogICAgICAgIElDIC0tPiBUUyAtLT4gVFAKICAgIGVuZAogICAgUjEgLS0%2BIElDCiAgICBSMiAtLT4gSUMKICAgIFIzIC0tPiBJQwoKICAgIHN0eWxlIENMVVNURVIgZmlsbDojRTNGMkZELHN0cm9rZTojNEE5MEQ5LGNvbG9yOiMzMzMKICAgIHN0eWxlIElDIGZpbGw6I0Y1QTYyMyxzdHJva2U6I0M0N0QwRSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFIxIGZpbGw6IzlCNTlCNixzdHJva2U6IzdEM0M5OCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFIyIGZpbGw6IzlCNTlCNixzdHJva2U6IzdEM0M5OCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFIzIGZpbGw6IzlCNTlCNixzdHJva2U6IzdEM0M5OCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIE1TIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIE9TIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFRTIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIE1QIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIE9QIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFRQIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQ%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IExSCiAgICBSMVsiY29mZmVlLmNvbS9tZW51Il0KICAgIFIyWyJjb2ZmZWUuY29tL29yZGVyIl0KICAgIFIzWyJ0ZWEuY29tIl0KICAgIHN1YmdyYXBoIENMVVNURVJbIvCfj6IgQ2x1c3RlciJdCiAgICAgICAgSUNbIvCfmqYgSW5ncmVzcyBDb250cm9sbGVyPGJyLz4oVHJhZmZpYyBDb3ApIl0KICAgICAgICBNU1siTWVudSBTZXJ2aWNlIl0KICAgICAgICBPU1siT3JkZXIgU2VydmljZSJdCiAgICAgICAgVFNbIlRlYSBTZXJ2aWNlIl0KICAgICAgICBNUFsiUG9kcyJdCiAgICAgICAgT1BbIlBvZHMiXQogICAgICAgIFRQWyJQb2RzIl0KICAgICAgICBJQyAtLT4gTVMgLS0%2BIE1QCiAgICAgICAgSUMgLS0%2BIE9TIC0tPiBPUAogICAgICAgIElDIC0tPiBUUyAtLT4gVFAKICAgIGVuZAogICAgUjEgLS0%2BIElDCiAgICBSMiAtLT4gSUMKICAgIFIzIC0tPiBJQwoKICAgIHN0eWxlIENMVVNURVIgZmlsbDojRTNGMkZELHN0cm9rZTojNEE5MEQ5LGNvbG9yOiMzMzMKICAgIHN0eWxlIElDIGZpbGw6I0Y1QTYyMyxzdHJva2U6I0M0N0QwRSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFIxIGZpbGw6IzlCNTlCNixzdHJva2U6IzdEM0M5OCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFIyIGZpbGw6IzlCNTlCNixzdHJva2U6IzdEM0M5OCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFIzIGZpbGw6IzlCNTlCNixzdHJva2U6IzdEM0M5OCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIE1TIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIE9TIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFRTIGZpbGw6IzRBOTBEOSxzdHJva2U6IzJDNUY4QSxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIE1QIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIE9QIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIFRQIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQ%3D" alt="Ingress - Traffic Cop routing to multiple Services" width="894" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When you have multiple services and want one entry point with smart routing. It gives you features like SSL termination and path-based routing.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Challenge 3: External Access 🌍&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;How do real users reach your app from the internet? We introduced &lt;strong&gt;Ingress&lt;/strong&gt; above, but there's more to the picture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LoadBalancers&lt;/strong&gt;, &lt;strong&gt;service meshes&lt;/strong&gt; (like Istio), and how domains even get routed to your cluster&lt;/li&gt;
&lt;li&gt;The setup looks very different on &lt;strong&gt;cloud&lt;/strong&gt; (a lot is handled for you) vs. &lt;strong&gt;on-prem&lt;/strong&gt; (your team manages it)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This deserves its own deep dive. Coming in a future post.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Putting It All Together: The Full Picture 🗺️&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here's how they compare:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Access&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Analogy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ClusterIP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Internal only&lt;/td&gt;
&lt;td&gt;Service-to-service calls&lt;/td&gt;
&lt;td&gt;Internal phone ext.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NodePort&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;External via Node IP + port&lt;/td&gt;
&lt;td&gt;Dev/testing, quick access&lt;/td&gt;
&lt;td&gt;Side entrance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ingress&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;External via smart routing&lt;/td&gt;
&lt;td&gt;Production, multi-service&lt;/td&gt;
&lt;td&gt;Traffic cop&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What's Next? 🚀&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now that we understand how networking works inside a Kubernetes cluster, I'm deciding between two directions for the next post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;hands-on walkthrough&lt;/strong&gt; where we deploy a simple app and see Services and Ingress working in a real cluster&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;deeper dive into traffic management&lt;/strong&gt; covering LoadBalancers, service meshes like Istio, and how production teams actually handle external traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me know in the comments which one you'd find more useful! 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Additional Resources 📚&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prerequisite Reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://dev.to/daguayza12/networking-101-the-concepts-explained-simply-1aja"&gt;Networking 101: The Concepts Nobody Explained Simply&lt;/a&gt;&lt;/strong&gt;: My companion post covering IP addresses, ports, DNS, localhost, and private vs. public networks. Start here if networking is new to you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes Networking:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://kubernetes.io/docs/concepts/services-networking/" rel="noopener noreferrer"&gt;Kubernetes Networking Concepts (Official Docs)&lt;/a&gt;&lt;/strong&gt;: Deep dive into the networking model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Services &amp;amp; Ingress:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://kubernetes.io/docs/concepts/services-networking/service/" rel="noopener noreferrer"&gt;Kubernetes Services (Official Docs)&lt;/a&gt;&lt;/strong&gt;: Comprehensive reference for all Service types&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://kubernetes.io/docs/concepts/services-networking/ingress/" rel="noopener noreferrer"&gt;Kubernetes Ingress (Official Docs)&lt;/a&gt;&lt;/strong&gt;: Everything about Ingress resources and controllers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://gateway-api.sigs.k8s.io/" rel="noopener noreferrer"&gt;Gateway API&lt;/a&gt;&lt;/strong&gt;: The next generation of Kubernetes traffic routing, evolving beyond Ingress&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Practice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://minikube.sigs.k8s.io/docs/handbook/accessing/" rel="noopener noreferrer"&gt;Minikube Networking Guide&lt;/a&gt;&lt;/strong&gt;: How to access services running in Minikube&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://kubernetes.io/docs/tutorials/services/" rel="noopener noreferrer"&gt;Kubernetes Networking Tutorial (Official)&lt;/a&gt;&lt;/strong&gt;: Interactive tutorial on Services&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>beginners</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Networking 101: The Concepts Explained Simply 🌐</title>
      <dc:creator>Diana </dc:creator>
      <pubDate>Mon, 02 Feb 2026 15:22:30 +0000</pubDate>
      <link>https://forem.com/daguayza12/networking-101-the-concepts-explained-simply-1aja</link>
      <guid>https://forem.com/daguayza12/networking-101-the-concepts-explained-simply-1aja</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Why Networking Feels Intimidating (But Shouldn't)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I'll be honest, networking used to make my eyes glaze over. IP addresses, ports, subnets... it felt like learning another language.&lt;/p&gt;

&lt;p&gt;But once I found the right mental model, it clicked. So if you don't know what an IP address is or how it works, that's completely fine. By the end of this post, you'll understand how devices find each other on a network, and you'll have the foundation you need for topics like cloud computing, Kubernetes, or just understanding how the internet works.&lt;/p&gt;

&lt;p&gt;Let's start from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;An IP Address Is Just a Street Address 🏘️&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Keith Barker has an easy breakdown in his video &lt;a href="https://www.youtube.com/watch?v=U2T4RITeIk8" rel="noopener noreferrer"&gt;"Take 5 Minutes now to learn about IP addresses"&lt;/a&gt; that inspired the analogy I'm about to use. If you want to go even deeper, his &lt;a href="https://www.youtube.com/watch?v=Y8ZwmAxnOL0" rel="noopener noreferrer"&gt;"Subnet Saturday #1: IPv4 Basics"&lt;/a&gt; is a more detailed walkthrough of how IP addresses actually work.&lt;/p&gt;

&lt;p&gt;Here's the core idea:&lt;/p&gt;

&lt;p&gt;Think about your home address. It has two parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The street name&lt;/strong&gt;:  tells you which neighborhood you're in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The house number&lt;/strong&gt;: tells you which specific house on that street&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An IP address works the same way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The network portion&lt;/strong&gt;: this is the "street name," identifying which network you're on&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The host portion&lt;/strong&gt;:  this is the "house number," identifying the specific device on that network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, take the IP address &lt;code&gt;192.168.1.25&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  192.168.1  .  25
  ─────────     ──
  Street Name   House Number
  (Network)     (Host)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every device on a network needs its own unique address, just like every house on a street needs its own number. Two houses can't have the same number on the same street, and two devices can't have the same IP address on the same network.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Ports: The Doors on Each House 🚪&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, each house (device) can have multiple doors. These are &lt;strong&gt;ports&lt;/strong&gt;. Different doors lead to different services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Door 80&lt;/strong&gt;: the front door (web traffic / HTTP)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Door 443&lt;/strong&gt;: the secure front door (HTTPS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Door 22&lt;/strong&gt;: the back door for maintenance (SSH)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So a full address to reach a specific service looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  192.168.1.25:80
  ─────────────  ──
  House Address   Door Number
  (IP Address)    (Port)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;How a Request Finds the Right Device 🗺️&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So when you type something like &lt;code&gt;192.168.1.25:80&lt;/code&gt; into a browser, how does the request actually get to the right place? The network reads the address just like a mail carrier delivers a letter:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IExSCiAgICBBWyLwn5OoIFJlcXVlc3QgdG88YnIvPjE5Mi4xNjguMS4yNTo4MCJdIC0tPiBCWyLwn5uj77iPIFN0ZXAgMTxici8%2BRmluZCB0aGUgU3RyZWV0PGJyLz4xOTIuMTY4LjEiXSAtLT4gQ1si8J%2BPoCBTdGVwIDI8YnIvPkZpbmQgdGhlIEhvdXNlPGJyLz5Ib3N0IC4yNSJdIC0tPiBEWyLwn5qqIFN0ZXAgMzxici8%2BS25vY2sgb24gdGhlIERvb3I8YnIvPlBvcnQgODAiXSAtLT4gRVsi4pyFIERlbGl2ZXJlZCEiXQoKICAgIHN0eWxlIEEgZmlsbDojNEE5MEQ5LHN0cm9rZTojMkM1RjhBLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgQiBmaWxsOiNGNUE2MjMsc3Ryb2tlOiNDNDdEMEUsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCiAgICBzdHlsZSBDIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIEQgZmlsbDojNEE5MEQ5LHN0cm9rZTojMkM1RjhBLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgRSBmaWxsOiM3RUQzMjEsc3Ryb2tlOiM1QTlBMTgsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCg%3D%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IExSCiAgICBBWyLwn5OoIFJlcXVlc3QgdG88YnIvPjE5Mi4xNjguMS4yNTo4MCJdIC0tPiBCWyLwn5uj77iPIFN0ZXAgMTxici8%2BRmluZCB0aGUgU3RyZWV0PGJyLz4xOTIuMTY4LjEiXSAtLT4gQ1si8J%2BPoCBTdGVwIDI8YnIvPkZpbmQgdGhlIEhvdXNlPGJyLz5Ib3N0IC4yNSJdIC0tPiBEWyLwn5qqIFN0ZXAgMzxici8%2BS25vY2sgb24gdGhlIERvb3I8YnIvPlBvcnQgODAiXSAtLT4gRVsi4pyFIERlbGl2ZXJlZCEiXQoKICAgIHN0eWxlIEEgZmlsbDojNEE5MEQ5LHN0cm9rZTojMkM1RjhBLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgQiBmaWxsOiNGNUE2MjMsc3Ryb2tlOiNDNDdEMEUsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCiAgICBzdHlsZSBDIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIEQgZmlsbDojNEE5MEQ5LHN0cm9rZTojMkM1RjhBLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgRSBmaWxsOiM3RUQzMjEsc3Ryb2tlOiM1QTlBMTgsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCg%3D%3D" alt="How a request finds the right device" width="1105" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think of it like a mail carrier delivering a package:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read the street name&lt;/strong&gt;: "Which neighborhood is this going to?" That's the network portion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find the right house&lt;/strong&gt;: "Which house on this street?" That's the host portion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knock on the right door&lt;/strong&gt;: "Which service do they want?" That's the port&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Local vs. External IP Addresses: Private Streets vs. Public Highways 🏡🌍&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Not all IP addresses are created equal. There are two kinds:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local (Private) IP Addresses&lt;/strong&gt;: These are like street addresses inside a gated community. They only work &lt;em&gt;within&lt;/em&gt; that community. Devices on your home WiFi network talk to each other using private IPs like &lt;code&gt;192.168.1.x&lt;/code&gt; or &lt;code&gt;10.0.0.x&lt;/code&gt;. If you tried to give someone outside your network that address, they wouldn't be able to find you, it's a private street that doesn't exist on any public map.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External (Public) IP Addresses&lt;/strong&gt;: This is like your community's main gate address, the one that shows up on a public map. It's the address the outside world uses to reach your network. Your internet provider gives you one, and it's how websites know where to send data back to you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Home Network (Gated Community):
  📱 Phone     → 192.168.1.10  (Private — only works inside)
  💻 Laptop    → 192.168.1.25  (Private — only works inside)
  🖥️ Desktop   → 192.168.1.30  (Private — only works inside)

Your Router (The Main Gate):
  🌐 Public IP → 73.45.123.89  (Public — the outside world uses this)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your router translates between the two. When your laptop requests a website, the router swaps the private address for the public one on the way out, and swaps it back on the way in. The outside world only ever sees the public address.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How Does the Response Find Its Way Back? 📬&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You might be wondering, when a website sends data back, how does it know where to send it? Every request includes a &lt;strong&gt;return address&lt;/strong&gt;, just like a letter. The website reads the return address and sends the response right back.&lt;/p&gt;

&lt;p&gt;But here's the thing, your laptop might be talking to many websites at the same time. You've got a browser, Netflix, Slack, all running at once. How does your router know which response goes to which app?&lt;/p&gt;

&lt;p&gt;Remember ports? Your laptop uses a different port number for each connection. Think of it as each app getting its own temporary mailbox:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Laptop right now:
  🌐 Browser tab 1  → mailbox 52431 → talking to dev.to
  🌐 Browser tab 2  → mailbox 52432 → talking to google.com
  🎬 Netflix         → mailbox 52433 → talking to netflix.com
  💬 Slack           → mailbox 52434 → talking to slack.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a response comes back, your router checks which mailbox (port) it's addressed to and forwards it to the right app. That's how one device can have dozens of connections running at the same time without anything getting mixed up.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;localhost: Talking to Yourself 🪞&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You might have seen &lt;code&gt;localhost&lt;/code&gt; or &lt;code&gt;127.0.0.1&lt;/code&gt; before. This is a special address that means "this machine, right here." It's not even a street address, it's like knocking on your own front door.&lt;/p&gt;

&lt;p&gt;When developers say "run it on localhost," they mean "run it on your own computer, and access it from your own computer." Nothing goes across the network. It's completely internal to your machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;localhost = 127.0.0.1 = "myself"

You → localhost:3000 → Your own machine, door 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll run into this all the time when developing locally, running a web app on &lt;code&gt;localhost:3000&lt;/code&gt;, a database on &lt;code&gt;localhost:5432&lt;/code&gt;, etc. It just means those services are running on your own machine and you're accessing them from your own machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;DNS: Names Instead of Numbers 📖&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Remembering IP addresses like &lt;code&gt;192.168.1.25&lt;/code&gt; is annoying. That's why &lt;strong&gt;DNS (Domain Name System)&lt;/strong&gt; exists, it's like a phone book that translates human-friendly names into IP addresses.&lt;/p&gt;

&lt;p&gt;You already use DNS every day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You type &lt;code&gt;google.com&lt;/code&gt; → DNS translates it to &lt;code&gt;142.250.80.46&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You type &lt;code&gt;dev.to&lt;/code&gt; → DNS translates it to an IP address behind the scenes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You never have to memorize the actual numbers. DNS handles that for you.&lt;/p&gt;

&lt;p&gt;This concept shows up everywhere in tech. Cloud platforms, container orchestration tools like Kubernetes, and internal company networks all use their own private DNS so that services can find each other by name instead of by IP address. The idea is always the same: &lt;strong&gt;names are easier to remember than numbers, so let a phone book handle the translation.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Putting It All Together 🗺️&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let's trace a real request from start to finish. You type &lt;code&gt;dev.to&lt;/code&gt; in your browser, here's what happens:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IFRECiAgICBBWyLwn6eR4oCN8J%2BSuyBZb3UgdHlwZSBkZXYudG88YnIvPmluIHlvdXIgYnJvd3NlciJdIC0tPiBCWyLwn5OWIEROUyBMb29rdXA8YnIvPmRldi50byDihpIgMTUxLjEwMS4xLjY0Il0KICAgIEIgLS0%2BIENbIvCfjJAgWW91ciBSb3V0ZXI8YnIvPlN3YXBzIHlvdXIgcHJpdmF0ZSBJUDxici8%2BZm9yIHlvdXIgcHVibGljIElQIl0KICAgIEMgLS0%2BIERbIvCfm6PvuI8gRmluZCB0aGUgTmV0d29yazxici8%2BMTUxLjEwMS4xLngiXQogICAgRCAtLT4gRVsi8J%2BPoCBGaW5kIHRoZSBIb3N0PGJyLz4uNjQiXQogICAgRSAtLT4gRlsi8J%2BaqiBLbm9jayBvbiBQb3J0IDQ0Mzxici8%2BKEhUVFBTKSJdCiAgICBGIC0tPiBHWyLinIUgREVWLnRvIHJlc3BvbmRzPGJyLz53aXRoIHRoZSB3ZWJwYWdlISJdCgogICAgc3R5bGUgQSBmaWxsOiM0QTkwRDksc3Ryb2tlOiMyQzVGOEEsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCiAgICBzdHlsZSBCIGZpbGw6IzlCNTlCNixzdHJva2U6IzdEM0M5OCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIEMgZmlsbDojRjVBNjIzLHN0cm9rZTojQzQ3RDBFLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgRCBmaWxsOiNGNUE2MjMsc3Ryb2tlOiNDNDdEMEUsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCiAgICBzdHlsZSBFIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIEYgZmlsbDojNEE5MEQ5LHN0cm9rZTojMkM1RjhBLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgRyBmaWxsOiM3RUQzMjEsc3Ryb2tlOiM1QTlBMTgsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCg%3D%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZmxvd2NoYXJ0IFRECiAgICBBWyLwn6eR4oCN8J%2BSuyBZb3UgdHlwZSBkZXYudG88YnIvPmluIHlvdXIgYnJvd3NlciJdIC0tPiBCWyLwn5OWIEROUyBMb29rdXA8YnIvPmRldi50byDihpIgMTUxLjEwMS4xLjY0Il0KICAgIEIgLS0%2BIENbIvCfjJAgWW91ciBSb3V0ZXI8YnIvPlN3YXBzIHlvdXIgcHJpdmF0ZSBJUDxici8%2BZm9yIHlvdXIgcHVibGljIElQIl0KICAgIEMgLS0%2BIERbIvCfm6PvuI8gRmluZCB0aGUgTmV0d29yazxici8%2BMTUxLjEwMS4xLngiXQogICAgRCAtLT4gRVsi8J%2BPoCBGaW5kIHRoZSBIb3N0PGJyLz4uNjQiXQogICAgRSAtLT4gRlsi8J%2BaqiBLbm9jayBvbiBQb3J0IDQ0Mzxici8%2BKEhUVFBTKSJdCiAgICBGIC0tPiBHWyLinIUgREVWLnRvIHJlc3BvbmRzPGJyLz53aXRoIHRoZSB3ZWJwYWdlISJdCgogICAgc3R5bGUgQSBmaWxsOiM0QTkwRDksc3Ryb2tlOiMyQzVGOEEsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCiAgICBzdHlsZSBCIGZpbGw6IzlCNTlCNixzdHJva2U6IzdEM0M5OCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIEMgZmlsbDojRjVBNjIzLHN0cm9rZTojQzQ3RDBFLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgRCBmaWxsOiNGNUE2MjMsc3Ryb2tlOiNDNDdEMEUsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCiAgICBzdHlsZSBFIGZpbGw6IzdFRDMyMSxzdHJva2U6IzVBOUExOCxjb2xvcjojZmZmLGZvbnQtd2VpZ2h0OmJvbGQKICAgIHN0eWxlIEYgZmlsbDojNEE5MEQ5LHN0cm9rZTojMkM1RjhBLGNvbG9yOiNmZmYsZm9udC13ZWlnaHQ6Ym9sZAogICAgc3R5bGUgRyBmaWxsOiM3RUQzMjEsc3Ryb2tlOiM1QTlBMTgsY29sb3I6I2ZmZixmb250LXdlaWdodDpib2xkCg%3D%3D" alt="Putting it all together - tracing a request from browser to server" width="242" height="886"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every concept we covered plays a role:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DNS&lt;/strong&gt; translates the name to an IP address&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your router&lt;/strong&gt; translates your private IP to a public one&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The network portion&lt;/strong&gt; of the IP routes the request to the right network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The host portion&lt;/strong&gt; finds the right device&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The port&lt;/strong&gt; delivers the request to the right service&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What's Next? 🎯&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now that you understand how devices find each other on a network, you have the foundation for some really powerful topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud computing&lt;/strong&gt;: Understanding public vs. private networks is key to how cloud infrastructure works&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes networking&lt;/strong&gt;:  Containers need to find each other too, and they use all the concepts we just covered (IP addresses, DNS, ports, private networks)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web development&lt;/strong&gt;: Every API call, every database connection, every deployment involves networking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my next post, I'll take these exact concepts and show you how they apply inside a Kubernetes cluster, where Pods get their own IP addresses, Services act as stable phone book entries, and Ingress controllers manage traffic from the outside world. If you're new to Kubernetes, check out my intro post first: &lt;a href="https://dev.to/daguayza12/kubernetes-making-sense-of-the-madness-1lga"&gt;Kubernetes: Making Sense of the Madness&lt;/a&gt;. Stay tuned! 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Additional Resources 📚&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Further Reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.cloudflare.com/learning/dns/what-is-dns/" rel="noopener noreferrer"&gt;How DNS Works (Cloudflare)&lt;/a&gt;&lt;/strong&gt;: Visual explanation of the DNS lookup process&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.avast.com/c-ip-address-public-vs-private" rel="noopener noreferrer"&gt;Public vs. Private IP Addresses (Avast)&lt;/a&gt;&lt;/strong&gt;: More detail on how private and public addresses work together&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>learning</category>
      <category>networking</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Kubernetes: Making Sense of the Madness 🤯</title>
      <dc:creator>Diana </dc:creator>
      <pubDate>Fri, 10 Jan 2025 15:22:12 +0000</pubDate>
      <link>https://forem.com/daguayza12/kubernetes-making-sense-of-the-madness-1lga</link>
      <guid>https://forem.com/daguayza12/kubernetes-making-sense-of-the-madness-1lga</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Kubernetes: Who Knew it Could Be This Hard? 🙃&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let’s be honest, new tools can feel intimidating, right? I avoided Kubernetes for ages because it felt like being handed a 500-piece LEGO set.... but with no picture on the box. Sure, all the pieces are there, and someone tells you, “It’s easy, just follow the instructions.” Read the documentation??? pshhh that's absurd !&lt;/p&gt;

&lt;p&gt;At first learning it was overwhelming, and let’s face it, it still is!! What helped me was stepping back and looking at the high-level architecture. Understanding how the pieces fit together made everything feel a little less chaotic. That’s where I want to start with you: the big picture. Let’s break it down and make Kubernetes a little more approachable.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;VMs vs. Containers: There’s No Place Like Shared Space 🏢&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before we dive into container orchestration, let’s talk about what a container is and how it works with Virtual Machines (VMs).&lt;/p&gt;

&lt;p&gt;A Virtual Machine is like a fully furnished apartment, it has its own utilities (operating system) and runs independently in a shared building (physical server). It’s great for isolation but can be heavy since each VM carries its own setup.&lt;/p&gt;

&lt;p&gt;A Container is like a room within that apartment. Each room has everything it needs (your app and its dependencies), but it shares the apartment’s utilities (VM’s operating system) with the other rooms. This makes containers faster and lighter than spinning up separate apartments (VMs) for every workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Container Orchestration: The Smart Manager 🤓&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Kubernetes is an open-source container orchestration system that helps you manage containers efficiently, especially when dealing with large-scale applications. It ensures your containers are running, scaling, and self-healing, without you having to intervene manually. Think of container orchestration as a smart manager for your rooms (containers).&lt;/p&gt;

&lt;p&gt;Kubernetes focuses on managing the rooms (containers), ensuring they run smoothly by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Deploying containers where they’re needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distributing resources like CPU and memory to the containers that need them most.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restarting containers automatically if something breaks (self-healing).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scaling containers up or down based on demand (adding or removing a container).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Balancing traffic across containers to prevent any single one from being overwhelmed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without tools like Kubernetes, handling hundreds or thousands of containers would be chaotic. While it doesn’t directly manage your physical servers or VMs, Kubernetes ensures your containers are orchestrated efficiently on top of the infrastructure you provide. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Kubernetes Architecture: Building Blocks of Orchestration 🧩&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Cluster: The Big Picture 🖼️&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A cluster is like a team working on a project. Each team member has a specific role (some do research, some write, some present), but they all work together toward a shared goal.&lt;/p&gt;

&lt;p&gt;In Kubernetes, a cluster is the entire system where containers are deployed and managed. It consists of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nodes:&lt;/strong&gt; The team members doing the actual work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Control Plane:&lt;/strong&gt; The project manager that coordinates the team and keeps everything running smoothly.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Think of the cluster as a collection of machines working together to deploy and manage your containers.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Nodes: The Workers 👷‍♀️&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A Node is a single machine (physical or virtual) in your cluster. It’s where the real work happens, containers are deployed and run here.&lt;/p&gt;

&lt;p&gt;There are two types of nodes in Kubernetes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Worker Nodes:&lt;/strong&gt; This is where containers are deployed and run inside Pods.These handle workloads by running containers inside Pods. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each worker node includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;kubelet:&lt;/strong&gt; This is the primary agent running on the worker 
 node. It communicates with the Control Plane and ensures that 
 the containers in Pods are running as expected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;kube-proxy:&lt;/strong&gt; This manages network rules on the node, enabling 
 communication between Pods and Services across the cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Master Node:&lt;/strong&gt; This node hosts the Control Plane, which doesn’t handle workloads directly but instead manages the cluster by assigning tasks to worker nodes and keeping everything on track.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: The master node is the machine where the Control Plane components run. While they’re often used interchangeably in conversation, the Control Plane refers to the software managing the cluster, whereas the master node refers to the physical or virtual machine hosting that software.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Control Plane: The Brain of Kubernetes 🧠&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Control Plane acts as the brain of the cluster, coordinating all the nodes to ensure your containers run efficiently. It consists of several key components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Server:&lt;/strong&gt; The entry point to the cluster. This is how you interact with Kubernetes, whether through kubectl or other tools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;kubectl:&lt;/strong&gt; is a command-line tool that lets you communicate with the API Server to manage your cluster. You can use it to deploy applications, inspect resources, and even troubleshoot issues, all from your terminal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scheduler:&lt;/strong&gt; Decides which node should run each container based on resource availability and requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Controller Manager:&lt;/strong&gt; Monitors the cluster’s state and ensures the desired configuration is maintained (e.g., restarting containers if they fail).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;etcd:&lt;/strong&gt; A key-value store that acts as Kubernetes’ memory, storing all configuration and the current state of the cluster.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Control Plane is what gives Kubernetes its intelligence, managing workloads, and ensuring everything works as expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Pods: The Smallest Building Block 🫛&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Kubernetes doesn’t directly run containers, it wraps them in Pods. A Pod is the smallest deployable unit in Kubernetes. Typically, a Pod contains a single container, but it can hold multiple containers if they need to work together (e.g., sharing storage or networking). Think of a Pod as a "toolbox" that holds everything a container needs to function properly, including storage, networking, and configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Services: Connecting the Dots 🌉&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;While Pods are temporary (they can crash, restart, or be replaced), Services act as stable endpoints for communication.&lt;/p&gt;

&lt;p&gt;For example, if a Pod running your backend app crashes and Kubernetes replaces it, the Service ensures your frontend can still communicate with the new Pod seamlessly. Services are like bridges that connect different parts of your application, ensuring reliable communication even in a dynamic environment. This ensures that even as Pods come and go, your app stays connected and functional.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjltftwny5zlxq8y80c78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjltftwny5zlxq8y80c78.png" alt="Kubernetes High Level Architecture Diagram" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Diagram from the &lt;a href="https://kubernetes.io/docs/concepts/architecture/" rel="noopener noreferrer"&gt;official Kubernetes site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also recommend checking out this &lt;a href="https://www.udemy.com/course/learn-kubernetes/?couponCode=NVD20PMUS&amp;amp;utm_source=adwords-pmax&amp;amp;utm_medium=udemyads&amp;amp;utm_campaign=PMax_la.EN_cc.US&amp;amp;campaigntype=pMax&amp;amp;portfolio=USA_Treatment&amp;amp;language=EN&amp;amp;product=Course&amp;amp;test=&amp;amp;audience=&amp;amp;topic=&amp;amp;priority=NotSpecified&amp;amp;utm_content=deal4584&amp;amp;utm_term=_._ag__._ad__._kw__._de_c_._dm__._pl__._ti__._li_9004347_._pd__._&amp;amp;matchtype=&amp;amp;gad_source=1&amp;amp;gclid=CjwKCAiAp4O8BhAkEiwAqv2UqKfVd2zCKLBhOk01Y5vuAGGiIRiUMMptRcCafRWQGnCOaQgdcRUkxRoC1_YQAvD_BwE" rel="noopener noreferrer"&gt;Udemy course&lt;/a&gt;, it helped me understand Kubernetes and break it down this way.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>kubernetes</category>
      <category>community</category>
    </item>
    <item>
      <title>Connecting the Dots: OpenTelemetry for Beginners</title>
      <dc:creator>Diana </dc:creator>
      <pubDate>Tue, 19 Nov 2024 20:25:03 +0000</pubDate>
      <link>https://forem.com/daguayza12/connecting-the-dots-opentelemetry-for-beginners-2a8</link>
      <guid>https://forem.com/daguayza12/connecting-the-dots-opentelemetry-for-beginners-2a8</guid>
      <description>&lt;p&gt;If you’ve ever felt overwhelmed by words like “collector,” “instrumentation,” or “tracing,” you’re not alone. I’m right there with you 😵‍💫, still learning and piecing everything together. But as I keep connecting the dots, tools like OpenTelemetry are slowly starting to make more sense. Attending &lt;a href="https://www.honeycomb.io/opentelemetry?qgad=652224841368&amp;amp;qgterm=honeycomb%20opentelemetry&amp;amp;utm_feeditemid=&amp;amp;utm_device=c&amp;amp;utm_term=honeycomb%20opentelemetry&amp;amp;utm_source=google&amp;amp;utm_medium=paid-search&amp;amp;utm_campaign=2023%20PLG_Google_paid%20search_evergreen&amp;amp;hsa_cam=1527132624&amp;amp;hsa_grp=149843917600&amp;amp;hsa_mt=e&amp;amp;hsa_src=g&amp;amp;hsa_ad=652224841368&amp;amp;hsa_acc=3485784576&amp;amp;hsa_net=adwords&amp;amp;hsa_kw=honeycomb%20opentelemetry&amp;amp;hsa_tgt=kwd-1888760161191&amp;amp;hsa_ver=3&amp;amp;gad_source=1&amp;amp;gclid=Cj0KCQiAi_G5BhDXARIsAN5SX7qDXUXoyqlQK62MhyO81vTboQZIBkIIUamH95RSO9LXHSxCBezCbKcaAsgqEALw_wcB" rel="noopener noreferrer"&gt;Honeycomb's&lt;/a&gt; workshop for OpenTelemetry really helped paint a picture of the different components and how they work together. Let me share what I’ve figured out so far in the simplest way I can, so maybe the puzzle will click for you, too.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding OpenTelemetry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Think of &lt;a href="https://opentelemetry.io/docs/collector/architecture/" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt; (OTel) as a toolset for understanding what’s happening inside your software. Imagine you are organizing a large mailing process where you need to send packages to people. You want to know: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;When each package 📦 is picked up. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Where it goes next ❓. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When it gets delivered . &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's break down some of the components of OpenTelemetry using this analogy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instrumentation:&lt;/strong&gt; Attach a tracking label to each package. This is how you collect data about each package's journey. In software, this means adding sensors to your code to collect data about what’s happening.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Logs:&lt;/strong&gt; Logs are like notes that track every event happening during the package's journey, like when it enters a facility or leaves for delivery. You can export logs to different backends, such as a logging service, to keep track of everything.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Metrics:&lt;/strong&gt; Metrics are like summaries that tell you how many packages were delivered in a day, how long deliveries took, or how many were delayed. These metrics can be exported to specialized monitoring services to analyze overall performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Traces:&lt;/strong&gt; Traces are like a detailed route map showing the complete journey of an individual package, from pickup to delivery. They can be exported to a different observability platform that helps you analyze each step of the journey in detail.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Collector:&lt;/strong&gt; Imagine a central hub where all tracking information is gathered. The Collector collects data from all the tracking labels, processes it, and sends it for analysis. The Collector can gather data from multiple sources and send it to different places. However, it isn't always necessary, you can export data directly from your app to an observability platform.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Receiver:&lt;/strong&gt; The Collector uses receivers to gather data from different sources. A receiver is like the entry point for data into the Collector, allowing it to receive telemetry data from various components like your application, services, or other systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Processor:&lt;/strong&gt; Once the data is received, the processor takes over. Think of the processor as the person in the central hub who organizes, filters, and enhances the tracking information before it is sent out. Processors allow you to modify the data, such as adding additional attributes or dropping unnecessary information, ensuring that only the most relevant data moves forward.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exporter:&lt;/strong&gt; The Exporter sends the collected data to its final destination, like an observability platform or database. You can configure your app to export directly to a backend or use a Collector to handle the exporting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability Platform:&lt;/strong&gt; This is like a dashboard that shows the progress of all packages. It turns the collected data into insights, graphs, alerts, and dashboards, so you can understand what's happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Using OpenTelemetry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Currently, I am working with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Azure Kubernetes Service (AKS)&lt;/li&gt;
&lt;li&gt;Database: For data storage.&lt;/li&gt;
&lt;li&gt;Redis: For caching.&lt;/li&gt;
&lt;li&gt;Azure App Configuration: To manage application settings centrally.&lt;/li&gt;
&lt;li&gt;Java with SpringBoot&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We need a way to track the interactions and flow between all these components. This will help us understand how they work together and gain valuable insights, not just identify potential issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Starting with Azure Monitor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;My journey began with the Azure Monitor instrumentation library in my Spring Boot app. This approach allowed me to &lt;a href="https://opentelemetry.io/docs/zero-code/" rel="noopener noreferrer"&gt;auto-instrument&lt;/a&gt; our services and send telemetry data directly to Azure Application Insights without any code changes. For setup details, you can refer to the official &lt;a href="https://learn.microsoft.com/en-us/azure/azure-monitor/app/java-standalone-config" rel="noopener noreferrer"&gt;Azure Monitor setup documentation.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Limitations&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I wanted to add custom properties to the telemetry data and be more intentional with the data we are sending, ensuring we collect only what is necessary and meaningful. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Changes:&lt;/strong&gt;&lt;br&gt;
 Adding custom properties was not as straightforward as I hoped. (Note: There might be a way to do this without modifying code, but I couldn’t get it to work.). For more intentional insights tailored to our business needs, manual instrumentation is required. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vendor Lock-In:&lt;/strong&gt; I also wanted to avoid being locked into a specific vendor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experimentation:&lt;/strong&gt; I had been experimenting with OpenTelemetry on the side, specifically using auto-instrumentation for Python on one of my FastAPI services.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Switching to OpenTelemetry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Initial Goal:&lt;/strong&gt; I wanted to avoid using a Collector and instead export telemetry data directly to Azure. The Collector adds an extra layer of setup and configuration, which feels overwhelming while I'm still trying to grasp all of this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; The &lt;a href="https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/out-of-the-box-instrumentation/" rel="noopener noreferrer"&gt;Spring OpenTelemetry auto-instrumentation&lt;/a&gt; library defaults to using OTLP as the exporter, and I couldn't find a straightforward way to configure it to export directly to Azure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Monitor Exporter:&lt;/strong&gt; I thought &lt;a href="https://learn.microsoft.com/en-us/java/api/overview/azure/monitor-opentelemetry-exporter-readme?view=azure-java-preview" rel="noopener noreferrer"&gt;Azure Monitor Exporter&lt;/a&gt; could be used to send data directly to Azure and avoid the Collector while using the auto-instrumentation Spring starter for OpenTelemetry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introducing the Collector:&lt;/strong&gt; Although my initial goal was to avoid adding a &lt;a href="https://opentelemetry.io/docs/collector/quick-start/" rel="noopener noreferrer"&gt;Collector&lt;/a&gt;, I eventually introduced one to solve the challenge of exporting directly to Azure Monitor. It turned out to be more manageable than I had anticipated 😮‍💨.&lt;/p&gt;

&lt;p&gt;Note: If anyone knows how to do this without a Collector, I'd love to know!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Deploying the Collector&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;OTel Helm Chart:&lt;/strong&gt; I used the &lt;a href="https://github.com/open-telemetry/opentelemetry-helm-charts" rel="noopener noreferrer"&gt;OpenTelemetry Helm chart&lt;/a&gt; to deploy the Collector in our AKS cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Collector Contrib Image:&lt;/strong&gt; I referenced the &lt;a href="https://github.com/open-telemetry/opentelemetry-collector-contrib" rel="noopener noreferrer"&gt;Collector contrib image&lt;/a&gt;, which includes Azure Monitor as an available exporter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outcome:&lt;/strong&gt; Since we have a lot of services, the Collector gives us the ability to transform and enrich data before exporting it. Additionally, having a central place for processing data makes managing and scaling telemetry across multiple services much easier.&lt;/p&gt;

&lt;h4&gt;
  
  
  Setup without Collector
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+----------------------------------------+
|          Instrumented Applications     |
| (e.g., FastAPI, Spring Boot with OTel) |
|----------------------------------------|
| - Generates telemetry (traces, metrics,|
|   logs) using OTel SDK                 |
| - Has its own Exporter 🚀              |
+-----------------|----------------------+
                  |
                  v
+----------------------------------------+
|         🛰️ Observability Backend       |
|----------------------------------------|
| - Data Storage                         |
| - Query &amp;amp; Visualization (e.g.,Azure    |
| Honeycomb, Grafana, Prometheus         |
| 📊 Insights and Monitoring             |
+----------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Setup with Collector
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+----------------------------------------+
|          Instrumented Applications     |
| (e.g., FastAPI, Spring Boot with OTel) |
|----------------------------------------|
| - Generates telemetry (traces, metrics,|
|   logs) using OTel SDK                 |
| - Has simple Exporter to Collector 🚀  |
+-----------------|----------------------+
                  |
                  v
+----------------------------------------+
|       🚀 OpenTelemetry Collector       |
|----------------------------------------|
| 📥 Receivers                           |
|   - Collect telemetry data from apps   |
|                                        |
| 🔄 Processors                          |
|   - Transform and enrich data          |
|                                        |
| 📤 Exporters                           |
|   - Send data to observability backend |
+-----------------|----------------------+
                  |
                  v
+----------------------------------------+
|          🛰️ Observability Backend      |
|----------------------------------------|
| - Data Storage                         |
| - Query &amp;amp; Visualization (e.g., Azure   |
|   Honeycomb, Prometheus, Grafana)      |  
| 📊 Insights and Monitoring             |
+----------------------------------------+

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Sample values.yaml for deploying collector to AKS using Helm
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
image:
  repository: "otel/opentelemetry-collector-contrib"
  tag: "latest"
config:
  receivers:
    otlp:
      protocols:
        http:
          endpoint: "0.0.0.0:4318"
        grpc:
          endpoint: "0.0.0.0:4317"

  processors:
    batch:
      send_batch_size: 1024

  exporters:
    azuremonitor:
      connection_string: "&amp;lt;your-connection-string&amp;gt;"

  service:
    pipelines:
      traces:
        receivers: [otlp]
        processors: [batch]
        exporters: [azuremonitor]
      metrics:
        receivers: [otlp]
        processors: [batch]
        exporters: [azuremonitor]
      logs:
        receivers: [otlp]
        processors: [batch]
        exporters: [azuremonitor]
  extensions:
    health_check:
        endpoint: "0.0.0.0:13133"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>observability</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>Preparing for an OpenTelemetry Workshop</title>
      <dc:creator>Diana </dc:creator>
      <pubDate>Wed, 06 Nov 2024 06:44:14 +0000</pubDate>
      <link>https://forem.com/daguayza12/preparing-for-an-opentelemetry-workshop-186h</link>
      <guid>https://forem.com/daguayza12/preparing-for-an-opentelemetry-workshop-186h</guid>
      <description>&lt;p&gt;I recently learned that Honeycomb is hosting a virtual workshop on November 12th called &lt;a href="https://info.honeycomb.io/advanced-instrumentation-with-opentelemetry-2024?_gl=1*48fy0z*_gcl_aw*R0NMLjE3MjY2NzA2NjMuQ2owS0NRanc5S20zQmhEakFSSXNBR1ViNG56bjdHMW1INUNUeFRSU0ozOE1SWjFnVVgxY01Nc0k5cGEycFlEOUpobEZMaFpXaVFpNDNTSWFBaHh6RUFMd193Y0I.*_gcl_au*MjEwNTQ5NzEwMy4xNzI2NjExODEz*_ga*MTExMzY1NjA2LjE3MjY2MTEyOTQ.*_ga_YNSPYBMP80*MTczMDg1NzQ2My4xNy4xLjE3MzA4NTc1MTcuNi4wLjA." rel="noopener noreferrer"&gt;Honeycomb's Advanced Instrumentation with OpenTelemetry&lt;/a&gt;. I enjoyed learning about Honeycomb's mission at their Observability Day, so I’m looking forward to this one 🙊.&lt;/p&gt;

&lt;p&gt;If you're curious about instrumentation with OpenTelemetry, this is a great opportunity to learn tips and get insights. The event will cover advanced instrumentation, distributed tracing, debugging, and observability strategies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with OpenTelemetry
&lt;/h2&gt;

&lt;p&gt;I've come to see OpenTelemetry as a bridge between applications and observability platforms like Honeycomb. It helps streamline how we collect, process, and analyze data, making it easier to understand our application's behavior. &lt;a href="https://opentelemetry.io/docs/zero-code/" rel="noopener noreferrer"&gt;OpenTelemetry’s auto-instrumentation option&lt;/a&gt; gives us a quick way to start collecting data with no code changes. If you haven’t used OpenTelemetry before, this is a great first step to get familiar before attending the workshop. &lt;/p&gt;

&lt;h2&gt;
  
  
  OpenTelemetry at High Level
&lt;/h2&gt;

&lt;p&gt;Imagine OpenTelemetry as adding sensors to your application so it can capture data like metrics, logs, and traces. Here’s my understanding:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instrument:&lt;/strong&gt; Adding markers in your code is like installing sensors in a car to track important information, such as fuel levels, speed, or engine temperature. OpenTelemetry’s auto-instrumentation provides a quick setup to gather essential data, like request latency and error rates, with no code changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Collect:&lt;/strong&gt; Once data is captured, it needs to be collected and processed, similar to how a car’s central computer gathers information from various sensors. OpenTelemetry’s Collector serves as this central hub, pulling in data from one or multiple sources. You can customize how the data is transformed using a configuration file to fit your specific needs. The Collector can run as a standalone service for centralized data collection, or as a lightweight agent on the same host as your application. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transfer to an Observability Platform:&lt;/strong&gt; After processing, the data is sent to an observability platform, like a car’s dashboard, where you can view, analyze, and interpret it. Platforms like Honeycomb let you track trends, find issues, and make decisions to improve your application’s health and performance.&lt;/p&gt;

</description>
      <category>observability</category>
      <category>learning</category>
      <category>community</category>
      <category>beginners</category>
    </item>
    <item>
      <title>My Journey to Understanding Observability</title>
      <dc:creator>Diana </dc:creator>
      <pubDate>Thu, 31 Oct 2024 22:54:22 +0000</pubDate>
      <link>https://forem.com/daguayza12/my-journey-to-understanding-observability-o9e</link>
      <guid>https://forem.com/daguayza12/my-journey-to-understanding-observability-o9e</guid>
      <description>&lt;h1&gt;
  
  
  First Impressions 🤔
&lt;/h1&gt;

&lt;p&gt;When I first heard about observability, my reaction was, “Observability? Isn’t that just monitoring?” But as I dove deeper, I discovered it was much more. It’s an approach that could change how we understand and solve system issues, fostering a more collaborative and connected work culture. Observability isn't just about tools or troubleshooting, it hints at a cultural shift toward a more fulfilling work experience 💡.&lt;/p&gt;

&lt;h1&gt;
  
  
  So, What Is Observability? 😵‍💫
&lt;/h1&gt;

&lt;p&gt;At its heart, observability is about understanding system performance through the data it produces. Originating from control theory and adapted for software engineering, observability is built on three main pillars:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logs 📖:&lt;/strong&gt; Logs serve as the system’s diary, recording events and errors to help teams troubleshoot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metrics 📈:&lt;/strong&gt; Like a report card, metrics reveal performance over time, capturing things like response times and error rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traces 👣:&lt;/strong&gt; Traces track the journey of requests through the system, exposing bottlenecks and data flow.&lt;/p&gt;

&lt;p&gt;To me, observability isn’t just about these pillars; it’s about diving into the inner workings of our system with curiosity. This perspective helps us look beyond the familiar to uncover insights that lead to effective, long-term solutions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Navigating the Tooling Landscape 🛠️
&lt;/h1&gt;

&lt;p&gt;As I explored tools to achieve observability, I found there was a tool for every step, some focused on data collection, others on visualization for each pillar. But with so many options, it quickly became overwhelming to decide where to start and how to integrate them without adding unnecessary complexity. I realized that many organizations face a similar challenge: balancing the adoption of new tools with the stability of existing workflows. My goal was to understand how others strike this balance to build resilient systems that go beyond quick fixes and late-night troubleshooting.&lt;/p&gt;

&lt;h1&gt;
  
  
  Observability: More Than Meets the Metrics 🕵️‍♀️
&lt;/h1&gt;

&lt;p&gt;Recently, I attended Honeycomb’s Observability Day and learned about a new way of thinking about observability. Honeycomb introduced &lt;a href="https://charity.wtf/tag/observability-2-0/" rel="noopener noreferrer"&gt;Observability 2.0&lt;/a&gt;, a natural evolution designed to meet the needs of today’s complex systems.&lt;/p&gt;

&lt;p&gt;In traditional observability, or Observability 1.0, logs, metrics, and traces are treated as separate pieces, each needing its own analysis. While this can work, it often adds complexity by requiring teams to stitch together information from different tools. &lt;/p&gt;

&lt;p&gt;Observability 2.0, on the other hand, brings all of these data streams together into a single “source of truth.”&lt;br&gt;
This integrated approach makes it easier to spot patterns, identify root causes, and gain valuable insights without jumping between tools or datasets. For me, Observability 2.0 represents a simpler, more flexible way forward, offering a clearer path for anyone looking to improve their systems and stay ready for whatever challenges come next.&lt;/p&gt;

&lt;h1&gt;
  
  
  Connecting the Puzzle Pieces 🧩
&lt;/h1&gt;

&lt;p&gt;At the conference, we explored tools Honeycomb integrates with its platform: OpenTelemetry, Gremlin, and Honeycomb itself. Each tool simplified the observability process with its own specific purpose, and during our hands-on labs, the pieces started coming together in my mind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://opentelemetry.io/docs/what-is-opentelemetry/" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt;:&lt;/strong&gt; Acts as the 'messenger' for observability data, gathering logs, metrics, and traces from various sources and delivering them to Honeycomb. Its role as a 'data collector and transformer' finally clicked for me, motivating me to start exploring OpenTelemetry in my own projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.honeycomb.io/about" rel="noopener noreferrer"&gt;Honeycomb&lt;/a&gt;:&lt;/strong&gt; Functions as the “control room,” displaying all data from OpenTelemetry in an accessible format. It provides a comprehensive view of system activity, enabling teams to detect patterns, troubleshoot, and improve performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.gremlin.com/chaos-engineering" rel="noopener noreferrer"&gt;Gremlin&lt;/a&gt;:&lt;/strong&gt; A chaos engineering tool, Gremlin simulates real-world issues like server outages, helping teams identify weaknesses before they escalate, like a “practice drill” for your system.&lt;/p&gt;

&lt;h1&gt;
  
  
  Looking Ahead 🤩
&lt;/h1&gt;

&lt;p&gt;As I continue this journey, I’m genuinely excited to explore OpenTelemetry more deeply. Seeing its potential through Honeycomb’s perspective has given me new insight into how it can reshape our approach to observability. In my next post, I’ll share my hands-on experiences with OpenTelemetry, its benefits, challenges, and the lessons I’m picking up along the way.&lt;br&gt;
I’d love for you to join me as we dig into these tools together, bringing curiosity and a collaborative spirit to our development practices. &lt;/p&gt;

</description>
      <category>observability</category>
      <category>learning</category>
      <category>beginners</category>
      <category>community</category>
    </item>
  </channel>
</rss>
