<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>BalaSubramani K Blog</title>
        <link>https://bala.kubelancer.com/blog</link>
        <description>BalaSubramani K Blog</description>
        <lastBuildDate>Mon, 22 Dec 2025 15:07:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Visualizing Istio: Why I Built Interactive Simulations for Traffic Management]]></title>
            <link>https://bala.kubelancer.com/blog/visualizing-istio-why-i-built-interactive-simulations-for-traffic-management-c366bb60b852</link>
            <guid>https://bala.kubelancer.com/blog/visualizing-istio-why-i-built-interactive-simulations-for-traffic-management-c366bb60b852</guid>
            <pubDate>Mon, 22 Dec 2025 15:07:49 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/1*cntFmNr0Ud5ymwm1YWz9AA.jpeg" alt="banner" class="img_ev3q"></p>
<p>Moving beyond the terminal to master Blue/Green and Canary deployments in a Cloud-Native world.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-black-boxproblem">The “Black Box”&nbsp;Problem<a href="https://bala.kubelancer.com/blog/visualizing-istio-why-i-built-interactive-simulations-for-traffic-management-c366bb60b852#the-black-boxproblem" class="hash-link" aria-label="Direct link to The “Black Box”&nbsp;Problem" title="Direct link to The “Black Box”&nbsp;Problem" translate="no">​</a></h3>
<p>In the world of Kubernetes, Service Meshes like <strong>Istio</strong> are often treated as “magic.” We apply a VirtualService YAML, change a weight from 0 to 10, and trust that traffic is moving correctly behind the&nbsp;scenes.</p>
<p>But for many engineers, this remains a black box. When a Canary rollout fails or a Blue/Green switch causes a spike in 500 errors, the lack of <strong>visual intuition</strong> can lead to slow incident response&nbsp;times.</p>
<p>As the founder of <strong>Kubelancer</strong>, I’ve seen teams struggle with the “conceptual gap” of traffic shifting. Understanding the theory is one thing; seeing a packet hit a VirtualService and get routed to a specific pod version is&nbsp;another.</p>
<p>That’s why I decided to build <strong>Kubelancer Labs</strong> — a zero-setup, interactive playground to simulate Istio traffic&nbsp;logic.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-can-you-do-in-thelab">What can you do in the&nbsp;lab?<a href="https://bala.kubelancer.com/blog/visualizing-istio-why-i-built-interactive-simulations-for-traffic-management-c366bb60b852#what-can-you-do-in-thelab" class="hash-link" aria-label="Direct link to What can you do in the&nbsp;lab?" title="Direct link to What can you do in the&nbsp;lab?" translate="no">​</a></h4>
<p>You can visualize the traffic management</p>
<p>Blue/Green: Switch traffic instantly and practice emergency rollbacks.</p>
<p>Canary Rollouts: Incrementally shift traffic (10% → 50% → 100%) and watch the pods&nbsp;react.</p>
<p>Fault Simulation: Trigger “500 Errors” to see how Istio protects the user experience.</p>
<p>No terminal. No YAML. Just pure logic and visualization.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="check-it-out-livehere">Check it out live&nbsp;here:<a href="https://bala.kubelancer.com/blog/visualizing-istio-why-i-built-interactive-simulations-for-traffic-management-c366bb60b852#check-it-out-livehere" class="hash-link" aria-label="Direct link to Check it out live&nbsp;here:" title="Direct link to Check it out live&nbsp;here:" translate="no">​</a></h4>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="-httpsbala-kubelancergithubiokubelancer-labs-simulations">👉 <a href="https://bala-kubelancer.github.io/kubelancer-labs-simulations/" target="_blank" rel="noopener noreferrer" class="">https://bala-kubelancer.github.io/kubelancer-labs-simulations/</a><a href="https://bala.kubelancer.com/blog/visualizing-istio-why-i-built-interactive-simulations-for-traffic-management-c366bb60b852#-httpsbala-kubelancergithubiokubelancer-labs-simulations" class="hash-link" aria-label="Direct link to -httpsbala-kubelancergithubiokubelancer-labs-simulations" title="Direct link to -httpsbala-kubelancergithubiokubelancer-labs-simulations" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=c366bb60b852" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/visualizing-istio-why-i-built-interactive-simulations-for-traffic-management-c366bb60b852?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
            <category>Service Mesh</category>
        </item>
        <item>
            <title><![CDATA[Solution Architect! Art of Disaster Recovery (DR)]]></title>
            <link>https://bala.kubelancer.com/blog/solution-architect-art-of-disaster-recovery-dr-dc8a860f4e10</link>
            <guid>https://bala.kubelancer.com/blog/solution-architect-art-of-disaster-recovery-dr-dc8a860f4e10</guid>
            <pubDate>Mon, 22 Dec 2025 11:57:01 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/1*Wx_tEOyINsNH9D1mCzWLUQ.jpeg" alt="banner" class="img_ev3q"></p>
<p>Ensuring Business Continuity in a Crisis. In today’s digital-first world, High Availability (HA) and Fault Tolerance (FT) are designed to keep applications up and running. But what if an entire region goes down due to a flood or a power grid outage, or other&nbsp;reasons?</p>
<p>This is where a Disaster Recovery (DR) strategy becomes critical for ensuring business continuity. A well-designed DR plan ensures sufficient resources are available in entirely different regions, countries, or even continents.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rto-and-rpo-the-foundation-of-drplanning">RTO and RPO: The Foundation of DR&nbsp;Planning<a href="https://bala.kubelancer.com/blog/solution-architect-art-of-disaster-recovery-dr-dc8a860f4e10#rto-and-rpo-the-foundation-of-drplanning" class="hash-link" aria-label="Direct link to RTO and RPO: The Foundation of DR&nbsp;Planning" title="Direct link to RTO and RPO: The Foundation of DR&nbsp;Planning" translate="no">​</a></h3>
<p>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —</p>
<p><strong>When planning DR, two key metrics must be defined:</strong><br>
<!-- -->============================================<br>
<!-- -->1. Recovery Time Objective (RTO): How much downtime a business can sustain without significant impact.</p>
<p>2. Recovery Point Objective (RPO): How much data loss a business can tolerate.</p>
<p>The design of RTO and RPO depends on business criticality.</p>
<p><strong><em>For example:</em></strong><br>
<!-- -->A stock trading platform, railway system, or airline booking system cannot afford to lose a single data&nbsp;point.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="dr-approaches"><strong>DR Approaches:</strong><a href="https://bala.kubelancer.com/blog/solution-architect-art-of-disaster-recovery-dr-dc8a860f4e10#dr-approaches" class="hash-link" aria-label="Direct link to dr-approaches" title="Direct link to dr-approaches" translate="no">​</a></h4>
<p>=============</p>
<p>— <strong>Backup &amp;&nbsp;Restore:</strong></p>
<p>The least costly option with maximum RTO and RPO.<br>
<!-- -->Application machine images and database snapshots should be stored in the DR site.<br>
<!-- -->In the event of DR, systems are restored from&nbsp;backups.</p>
<p><strong>— Warm&nbsp;Standby:</strong></p>
<p>All application servers and databases exist in the DR site with low capacity.<br>
<!-- -->Data is continuously synced from the primary.<br>
<!-- -->In case of DR, services can be scaled up at the DR site.<br>
<!-- -->Offers lower RTO and RPO compared to backup &amp;&nbsp;restore.</p>
<p><strong>— Multi-Site (Active-Active):</strong></p>
<p>Most advanced and resilient DR strategy.<br>
<!-- -->Provides zero RTO and RPO.<br>
<!-- -->Equal capacity is maintained at both sites.<br>
<!-- -->Traffic is distributed across regions.<br>
<!-- -->In case of failure, all traffic is routed locally without downtime.</p>
<p><strong>Final Thoughts:</strong><br>
<!-- -->============<br>
<!-- -->A robust Disaster Recovery plan is not just about technology — it’s about protecting your business, customers, and reputation. The choice between Backup &amp; Restore, Warm Standby, and Multi-Site depends on business needs, compliance, and&nbsp;cost.</p>
<p><strong>Ask yourself:</strong><br>
<!-- -->============<br>
<!-- -->How much downtime can your business afford? (RTO)<br>
<!-- -->How much data loss can your business tolerate? (RPO)</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-happy-computing">:) Happy Computing<a href="https://bala.kubelancer.com/blog/solution-architect-art-of-disaster-recovery-dr-dc8a860f4e10#-happy-computing" class="hash-link" aria-label="Direct link to :) Happy Computing" title="Direct link to :) Happy Computing" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=dc8a860f4e10" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/solution-architect-art-of-disaster-recovery-dr-dc8a860f4e10?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Which load balancer is best for microservices on AWS EKS?]]></title>
            <link>https://bala.kubelancer.com/blog/which-load-balancer-is-best-for-microservices-on-aws-eks-2c9f64b853eb</link>
            <guid>https://bala.kubelancer.com/blog/which-load-balancer-is-best-for-microservices-on-aws-eks-2c9f64b853eb</guid>
            <pubDate>Fri, 05 Dec 2025 05:56:10 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/1*JLJollfy1IgkT9YqvRSS5Q.png" alt="banner" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="short-answer-upfront">Short answer up&nbsp;front:<a href="https://bala.kubelancer.com/blog/which-load-balancer-is-best-for-microservices-on-aws-eks-2c9f64b853eb#short-answer-upfront" class="hash-link" aria-label="Direct link to Short answer up&nbsp;front:" title="Direct link to Short answer up&nbsp;front:" translate="no">​</a></h4>
<p>* <strong>Use ALB</strong> (AWS Application Load Balancer) at the edge for almost all HTTP/HTTPS microservices workloads. <em>It gives host/path routing, TLS offload, WebACL/WAF, and better request-level features that microservices typically need.</em></p>
<p>* <strong>Use NLB</strong> only when you need true L4 passthrough, extremely low latency very high connection scale, UDP/TCP workloads, or when preserving source IP is critical and simpler setup is preferred.</p>
<p>* <strong>Hybrid (ALB at edge + internal NLB)</strong> is a great compromise when you need ALB features at the edge but want NLB performance for specific internal high-throughput services.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-microservices-usually-favour-alb">Why microservices usually favour ALB&nbsp;?<a href="https://bala.kubelancer.com/blog/which-load-balancer-is-best-for-microservices-on-aws-eks-2c9f64b853eb#why-microservices-usually-favour-alb" class="hash-link" aria-label="Direct link to Why microservices usually favour ALB&nbsp;?" title="Direct link to Why microservices usually favour ALB&nbsp;?" translate="no">​</a></h4>
<p>Microservices architectures typically expose many small HTTP/HTTPS services, use host- and path-based routing (e.g., <a href="http://api.example.com/users" target="_blank" rel="noopener noreferrer" class="">api.example.com/users</a>, <a href="http://api.example.com/payments" target="_blank" rel="noopener noreferrer" class="">api.example.com/payments</a>), use TLS, and often require features&nbsp;like:</p>
<p>— per-host routing (virtual hosts)<br>
<!-- --> — path-based routing and rewriting<br>
<!-- --> — TLS termination with ACM and easy certificate management<br>
<!-- --> — Web Application Firewall (WAF) protections at the edge<br>
<!-- --> — HTTP features: websockets, HTTP/2, header manipulation, redirect rules<br>
<!-- -->easy integration with Gateway API for Kubernetes-native routing<br>
<em>ALB provides all of these natively.</em></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-pick-nlbinstead">When to pick NLB&nbsp;instead?<a href="https://bala.kubelancer.com/blog/which-load-balancer-is-best-for-microservices-on-aws-eks-2c9f64b853eb#when-to-pick-nlbinstead" class="hash-link" aria-label="Direct link to When to pick NLB&nbsp;instead?" title="Direct link to When to pick NLB&nbsp;instead?" translate="no">​</a></h4>
<p>Pick NLB when one of the following is&nbsp;true:</p>
<p>— Your services are TCP/UDP (non-HTTP) or need pure L4 passthrough. Examples: raw TCP proxies, some legacy protocols, high-volume TCP streaming.</p>
<p>— You need lowest possible latency and the highest concurrent connection scale (NLB is optimized for&nbsp;L4).</p>
<p>— You want simple Service annotation deployment without installing AWS Load Balancer Controller (fast&nbsp;setup).</p>
<p>— You want to preserve source client IP easily and reliably for backend services.</p>
<p>NLB is simpler for L4 and usually cheaper for pure throughput scenarios, but it lacks L7 routing and&nbsp;WAF.</p>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=2c9f64b853eb" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/which-load-balancer-is-best-for-microservices-on-aws-eks-2c9f64b853eb?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
            <category>AWS</category>
            <category>Kubernetes</category>
        </item>
        <item>
            <title><![CDATA[How I Build Scalable, Secure, and Reliable Cloud Systems]]></title>
            <link>https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21</link>
            <guid>https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21</guid>
            <pubDate>Fri, 31 Oct 2025 12:33:15 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/1*c046O54TWqJo-5nr5AJ3dg.png" alt="banner" class="img_ev3q"></p>
<p>Over the decades of working as a Cloud and DevOps Architect, I’ve realized that this role is not just about technology — it’s about building reliable, scalable, and secure systems that truly support business&nbsp;goals.</p>
<p>Today, organizations expect Cloud plus DevOps architects like us to balance innovation with practicality, design with delivery, and speed with stability.</p>
<p>Every design choice impacts how well a system performs, scales, and recovers — and how safe it keeps business&nbsp;data.</p>
<p>Some of the key habits I lean in every day professional life</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-to-understand-the-business-problem-how-to-suit-the-right-technology-andtools">Try to understand the Business Problem, how to suit the right technology and&nbsp;tools<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#try-to-understand-the-business-problem-how-to-suit-the-right-technology-andtools" class="hash-link" aria-label="Direct link to Try to understand the Business Problem, how to suit the right technology and&nbsp;tools" title="Direct link to Try to understand the Business Problem, how to suit the right technology and&nbsp;tools" translate="no">​</a></h3>
<p>Before choosing a tool or platform, I first try to understand the&nbsp;<em>why</em>.</p>
<p>Every technical decision — from infrastructure to automation — must align with business needs such as cost, scalability, and timelines.</p>
<p><em>As a Cloud Architect, my job is to provide solutions that solve real business problems while handling constraints like budget, compliance, and delivery schedules.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="address-project-non-functional-needs">Address Project Non-Functional Needs<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#address-project-non-functional-needs" class="hash-link" aria-label="Direct link to Address Project Non-Functional Needs" title="Direct link to Address Project Non-Functional Needs" translate="no">​</a></h3>
<p>Beyond functionality, I always design for what’s <em>not visible</em> but <em>critical</em>:</p>
<ul>
<li class=""><strong>Scalability</strong> — Can it grow seamlessly when demand&nbsp;spikes?</li>
<li class=""><strong>High availability</strong> — Will it stay up if something fails?</li>
<li class=""><strong>Performance</strong> — Does it respond fast under pressure?</li>
<li class=""><strong>Security</strong> — Is data safe at every&nbsp;layer?</li>
<li class=""><strong>Maintainability</strong> — Can teams manage it easily&nbsp;later?</li>
</ul>
<p><em>These non-functional aspects often define whether a system succeeds in the long&nbsp;run.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-prototypes-and-proofs-of-conceptpocs">Use Prototypes and Proofs of Concept&nbsp;(POCs)<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#use-prototypes-and-proofs-of-conceptpocs" class="hash-link" aria-label="Direct link to Use Prototypes and Proofs of Concept&nbsp;(POCs)" title="Direct link to Use Prototypes and Proofs of Concept&nbsp;(POCs)" translate="no">​</a></h3>
<p>Before going full scale, I generally build prototypes to validate the design approach.</p>
<p><em>This helps me and my team identify risks early, test assumptions, and ensure we are choosing the right strategy before major investments are&nbsp;made.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dont-just-build-systems-also-mentorteams">Don’t Just Build Systems, Also Mentor&nbsp;Teams<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#dont-just-build-systems-also-mentorteams" class="hash-link" aria-label="Direct link to Don’t Just Build Systems, Also Mentor&nbsp;Teams" title="Direct link to Don’t Just Build Systems, Also Mentor&nbsp;Teams" translate="no">​</a></h3>
<p>Technology evolves fast, and so should the people behind&nbsp;it.</p>
<p><em>I work closely with developers, operations, and security engineers to ensure everyone understands the “why” behind design decisions &amp; how to maintain those systems post-launch.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="balance-strategy-and-operations">Balance Strategy and Operations<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#balance-strategy-and-operations" class="hash-link" aria-label="Direct link to Balance Strategy and Operations" title="Direct link to Balance Strategy and Operations" translate="no">​</a></h3>
<p>Being an architect means thinking both long-term and day-to-day.</p>
<ul>
<li class=""><strong>Strategic View:</strong> Create solutions that remain relevant as technology and business&nbsp;evolve.</li>
<li class=""><strong>Operational View:</strong> Ensure today’s workloads run smoothly and handle current business challenges without&nbsp;issues.</li>
</ul>
<p><em>It’s this balance that turns architecture into&nbsp;value.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="design-with-compliance-and-global-reach-inmind">Design with Compliance and Global Reach in&nbsp;Mind<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#design-with-compliance-and-global-reach-inmind" class="hash-link" aria-label="Direct link to Design with Compliance and Global Reach in&nbsp;Mind" title="Direct link to Design with Compliance and Global Reach in&nbsp;Mind" translate="no">​</a></h3>
<p>When deploying globally, every region comes with its own laws and compliance requirements.</p>
<p>Whether it’s <strong>PCI DSS</strong> for finance, <strong>HIPAA</strong> for healthcare, or <strong>ISO</strong> standards for manufacturing&nbsp;…many more, compliance has to be baked into design — not added&nbsp;later.</p>
<p>Plan for:</p>
<ul>
<li class="">Data locality and residency laws</li>
<li class="">Encryption (in transit and at&nbsp;rest)</li>
<li class="">Identity and access management (IAM)</li>
<li class="">Secure audit logging and traceability</li>
</ul>
<p><em>Compliance isn’t paperwork — it’s part of security architecture.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tighten-the-security-at-every-layer-ofinfra">Tighten the Security at Every Layer of&nbsp;infra<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#tighten-the-security-at-every-layer-ofinfra" class="hash-link" aria-label="Direct link to Tighten the Security at Every Layer of&nbsp;infra" title="Direct link to Tighten the Security at Every Layer of&nbsp;infra" translate="no">​</a></h3>
<p>Security is a continuous process, not a one-time&nbsp;setup.</p>
<p>I design with the principle of <strong>least privilege</strong>, and integrate security into every phase of development and operation.</p>
<p>Key practices I rely&nbsp;on:</p>
<ul>
<li class="">Enforce IAM roles and fine-grained permissions</li>
<li class="">Use secret managers and encrypted storage</li>
<li class="">Automate patching and vulnerability scanning</li>
<li class="">Implement Web Application Firewalls (WAF) and security&nbsp;groups</li>
<li class="">Enable audit logging, SIEM integration, and intrusion detection</li>
<li class="">Adopt shift-left security — embedding security checks in&nbsp;CI/CD</li>
</ul>
<p><em>Security must evolve with the application — not lag behind&nbsp;it.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="automate-everything-as-much-aspossible">Automate Everything as much as&nbsp;Possible<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#automate-everything-as-much-aspossible" class="hash-link" aria-label="Direct link to Automate Everything as much as&nbsp;Possible" title="Direct link to Automate Everything as much as&nbsp;Possible" translate="no">​</a></h3>
<p>Automation is at the heart of both Cloud and DevOps practices.</p>
<p>Automation applies everywhere — infrastructure provisioning, deployments, testing, patching, and even security&nbsp;checks.</p>
<p>As a DevOps Architect, I&nbsp;ensure:</p>
<ul>
<li class=""><strong>Infrastructure as Code (IaC)</strong> manages resources predictably.</li>
<li class=""><strong>CI/CD pipelines</strong> are robust and reliable.</li>
<li class=""><strong>Automated security scans</strong> and policy enforcement</li>
<li class=""><strong>Automated rollback and self-healing</strong> mechanisms</li>
<li class=""><strong>Monitoring and alerts</strong> automatically notify teams about issues or failures.</li>
</ul>
<p><em>It helps reduce human error, increase speed, and maintain consistency.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ensure-end-to-end-monitoring-and-observability">Ensure End-to-End Monitoring and Observability<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#ensure-end-to-end-monitoring-and-observability" class="hash-link" aria-label="Direct link to Ensure End-to-End Monitoring and Observability" title="Direct link to Ensure End-to-End Monitoring and Observability" translate="no">​</a></h3>
<p>A system you can’t see is a system you can’t&nbsp;trust.</p>
<p>I make sure every deployment includes:</p>
<ul>
<li class=""><strong>Centralized logging</strong> (application + infrastructure)</li>
<li class=""><strong>Metrics collection</strong> (CPU, memory, latency, request&nbsp;rate)</li>
<li class=""><strong>Alerting and dashboards</strong> using tools like Prometheus, Grafana, and New&nbsp;Relic</li>
<li class=""><strong>Distributed tracing</strong> for performance bottlenecks</li>
<li class=""><strong>Synthetic monitoring</strong> for uptime and user experience</li>
</ul>
<p><em>Monitoring is the backbone of reliability — it helps teams act before customers notice&nbsp;issues.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-an-eye-regularly-on-cloud-costpage">Keep an eye regularly on Cloud Cost&nbsp;Page<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#keep-an-eye-regularly-on-cloud-costpage" class="hash-link" aria-label="Direct link to Keep an eye regularly on Cloud Cost&nbsp;Page" title="Direct link to Keep an eye regularly on Cloud Cost&nbsp;Page" translate="no">​</a></h3>
<p>Every solution has a cost — both upfront (CapEx) and ongoing&nbsp;(OpEx).</p>
<p><em>As part of my process, I provide clear cost estimations, help plan budgets, and continuously optimize infrastructure to reduce waste and improve efficiency.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="design-for-resilience-and-disasterrecovery">Design for Resilience and Disaster&nbsp;Recovery<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#design-for-resilience-and-disasterrecovery" class="hash-link" aria-label="Direct link to Design for Resilience and Disaster&nbsp;Recovery" title="Direct link to Design for Resilience and Disaster&nbsp;Recovery" translate="no">​</a></h3>
<p>Downtime is never an option. From day one, I plan for&nbsp;failure.</p>
<p>Systems should recover automatically or gracefully during incidents.</p>
<p>I define:</p>
<ul>
<li class=""><strong>RPO (Recovery Point Objective):</strong> How much data can we afford to&nbsp;lose?</li>
<li class=""><strong>RTO (Recovery Time Objective):</strong> How fast can we&nbsp;recover?</li>
<li class=""><strong>Backup and failover strategies</strong> across&nbsp;regions</li>
<li class=""><strong>Testing DR drills</strong> regularly to validate recovery&nbsp;plans</li>
</ul>
<p>Because resilience isn’t proven in design — it’s proven in a disaster.</p>
<p>So plan for both <strong>RPO (Recovery Point Objective)</strong> and <strong>RTO (Recovery Time Objective)</strong> from day&nbsp;one.</p>
<p><em>That means preparing for data recovery, failover systems, and having tested backup strategies — ensuring the business stays operational even during&nbsp;outages.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="continuously-optimize-andevolve">Continuously Optimize and&nbsp;Evolve<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#continuously-optimize-andevolve" class="hash-link" aria-label="Direct link to Continuously Optimize and&nbsp;Evolve" title="Direct link to Continuously Optimize and&nbsp;Evolve" translate="no">​</a></h3>
<p>Cloud technology changes&nbsp;daily.</p>
<p>I make it a habit to continuously explore new features from AWS, Azure, and&nbsp;GCP</p>
<p>— applying what fits best to improve cost, performance, and reliability.</p>
<p>— Continuous improvement isn’t just a technical habit — it’s a&nbsp;mindset.</p>
<p><em>Good architecture is invisible when it works, but invaluable when it&nbsp;fails.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="happy-cloud-computing">Happy Cloud Computing&nbsp;:)<a href="https://bala.kubelancer.com/blog/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21#happy-cloud-computing" class="hash-link" aria-label="Direct link to Happy Cloud Computing&nbsp;:)" title="Direct link to Happy Cloud Computing&nbsp;:)" translate="no">​</a></h3>
<p><em>Thanks for&nbsp;reading!</em></p>
<p>Follow me on [LinkedIn] <a href="https://www.linkedin.com/in/bala-kubelancer/" target="_blank" rel="noopener noreferrer" class="">https://www.linkedin.com/in/bala-kubelancer/</a></p>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=101af18edc21" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/how-i-build-scalable-secure-and-reliable-cloud-systems-101af18edc21?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Getting credentials: exec: executable aws failed with exit code 255]]></title>
            <link>https://bala.kubelancer.com/blog/getting-credentials-exec-executable-aws-failed-with-exit-code-255-e0c15e8c081f</link>
            <guid>https://bala.kubelancer.com/blog/getting-credentials-exec-executable-aws-failed-with-exit-code-255-e0c15e8c081f</guid>
            <pubDate>Tue, 01 Jul 2025 15:56:14 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/1*bI5us0H7TVdGRgc-1MXP9Q.png" alt="banner" class="img_ev3q"></p>
<p>Error: failed to create kubernetes rest client for read of resource: Get “<a href="https://xxxxxxx.gr7.us-east-1.eks.amazonaws.com/api?timeout=32s" target="_blank" rel="noopener noreferrer" class="">https://xxxxxxx.gr7.us-east-1.eks.amazonaws.com/api?timeout=32s</a>": getting credentials: exec: executable aws failed with exit code&nbsp;255</p>
<p>Most Terraform users might have seen this 255 error. Suddenly, for some reason, Terraform will surprise us specifically in&nbsp;AWS.</p>
<p>Let’s <strong>break down exactly what’s happening</strong>:</p>
<p>The problem is mostly with Terraform; try using your local kubeconfig to connect to&nbsp;EKS.</p>
<p>What happened generally?</p>
<p>kubernetes/kubectl/helm provider execute aws eks get-token to get a short-lived authentication token, but it can’t get it due to a few&nbsp;reasons</p>
<p>No Kubernetes REST client could be&nbsp;created</p>
<ol>
<li class="">could be an issue on AWS credentials</li>
<li class="">If CI/CD, credential env not set correctly/wrongly</li>
<li class="">Your ~/.aws/config or ~/.aws/credentials is missing or&nbsp;invalid.</li>
</ol>
<p>Let’s Troubleshoot</p>
<p>Try this in your&nbsp;shell:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">aws eks get-token --cluster-name your-cluster-name</span><br></span></code></pre></div></div>
<p>If this fails, you’ll get a clearer&nbsp;error.</p>
<p>In my case, it worked. Next, I did If you’re using profiles, set:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">export_ AWS\_PROFILE=your-profile</span><br></span></code></pre></div></div>
<p>export_ AWS_PROFILE=kubelancer-dev</p>
<p>which solved.</p>
<p>then try</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">terraform plan  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">terraform apply</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=e0c15e8c081f" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/getting-credentials-exec-executable-aws-failed-with-exit-code-255-e0c15e8c081f?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
            <category>AWS</category>
        </item>
        <item>
            <title><![CDATA[Optimizing AWS EKS with Karpenter: A Hybrid Instance Strategy]]></title>
            <link>https://bala.kubelancer.com/blog/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292</link>
            <guid>https://bala.kubelancer.com/blog/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292</guid>
            <pubDate>Mon, 24 Feb 2025 15:10:57 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/960/1*AbM1f-rB7GULfHceKajtYg.png" alt="banner" class="img_ev3q"></p>
<p>As Kubernetes adoption grows, so does the complexity of managing clusters efficiently. One common challenge is choosing the right EC2 instance types that balance performance, cost, and availability. Enter <strong>Karpenter</strong>, AWS’s open-source cluster autoscaler, designed to simplify and optimize Kubernetes infrastructure provisioning.</p>
<p>In this blog post, How Kubelancer, we implemented <strong>hybrid instance strategy</strong> using <strong>Karpenter</strong> on <strong>AWS EKS Cluster for our esteemed client</strong>, ton maximize performance while minimizing costs in production, if non-prod can think about spot&nbsp;fleet.</p>
<p><strong>Generally, Karpenter</strong> addresses these challenges:</p>
<p><strong>1. Rapid provisioning:</strong> Instantly launching nodes when&nbsp;needed.</p>
<p><strong>2. Cost optimization:</strong> Choosing the most cost-effective instance&nbsp;types.</p>
<p><strong>3. Workload-aware scaling:</strong> Allocating resources based on real-time workload requirements.</p>
<p><strong>4. Support for Spot Instances:</strong> Reducing costs further by leveraging EC2 Spot Instances.</p>
<blockquote>
<p><em>But how can we unlock its full potential?</em> <strong><em>Hybrid instance strategies</em></strong> <em>hold the&nbsp;key.</em></p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-challenge-cost-vs-performance-in-kubernetes">The Challenge: Cost vs. Performance in Kubernetes<a href="https://bala.kubelancer.com/blog/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292#the-challenge-cost-vs-performance-in-kubernetes" class="hash-link" aria-label="Direct link to The Challenge: Cost vs. Performance in Kubernetes" title="Direct link to The Challenge: Cost vs. Performance in Kubernetes" translate="no">​</a></h4>
<p>Kubernetes workloads vary in their resource requirements. Some applications are <strong>CPU-intensive</strong>, requiring high compute power, while others are <strong>memory-heavy</strong>, needing more RAM to function efficiently. If you stick to a single instance type, you may&nbsp;either:</p>
<ol>
<li class=""><strong>Over-provision</strong> of resources, leading to <strong>wasted&nbsp;costs</strong>.</li>
<li class=""><strong>Under-provision</strong> resources, resulting in <strong>performance issues</strong>.</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="let-us-understanding-hybrid-instance-strategies">Let us Understanding Hybrid Instance Strategies<a href="https://bala.kubelancer.com/blog/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292#let-us-understanding-hybrid-instance-strategies" class="hash-link" aria-label="Direct link to Let us Understanding Hybrid Instance Strategies" title="Direct link to Let us Understanding Hybrid Instance Strategies" translate="no">​</a></h4>
<p>A <strong>hybrid instance strategy</strong> involves mixing different EC2 instance families based on workload needs. For&nbsp;example:</p>
<ul>
<li class=""><strong>Compute-optimized instances (c7i.large):</strong> Ideal for CPU-heavy applications.</li>
<li class=""><strong>General-purpose instances (m7i.large):</strong> Perfect for balanced workloads requiring a blend of CPU and&nbsp;memory.</li>
</ul>
<p>By blending these instances, you avoid over-provisioning and ensure that each workload gets precisely the resources it&nbsp;needs.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="our-workload-analysis-example-3-microservices">Our Workload Analysis: (example 3 microservices)<a href="https://bala.kubelancer.com/blog/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292#our-workload-analysis-example-3-microservices" class="hash-link" aria-label="Direct link to Our Workload Analysis: (example 3 microservices)" title="Direct link to Our Workload Analysis: (example 3 microservices)" translate="no">​</a></h4>
<p>Imagine managing three critical microservices in an EKS&nbsp;cluster:</p>
<blockquote>
<p><strong><em>1. service-order</em></strong></p>
</blockquote>
<p><strong>CPU Usage:</strong> High (1819m per&nbsp;pod)</p>
<p><strong>Memory Usage:</strong> Low (~1.3 GiB per&nbsp;pod)</p>
<p><strong>Best Fit:</strong> c7i.large for compute efficiency.</p>
<blockquote>
<p><strong><em>2. service-user</em></strong></p>
</blockquote>
<p><strong>CPU Usage:</strong> Moderate (1830m per&nbsp;pod)</p>
<p><strong>Memory Usage:</strong> Moderate (~2.4 GiB per&nbsp;pod)</p>
<p><strong>Best Fit:</strong> c7i.large to optimize for CPU-bound processes.</p>
<blockquote>
<p><strong><em>3. service-search</em></strong></p>
</blockquote>
<p><strong>CPU Usage:</strong> High (1805m per&nbsp;pod)</p>
<p><strong>Memory Usage:</strong> Moderate (~3.7 GiB per&nbsp;pod)</p>
<p><strong>Best Fit:</strong> m7i.large for a balanced approach.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-did-kubelancer-chose-the-hybrid-approachworks">Why did Kubelancer, chose the Hybrid Approach&nbsp;Works?<a href="https://bala.kubelancer.com/blog/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292#why-did-kubelancer-chose-the-hybrid-approachworks" class="hash-link" aria-label="Direct link to Why did Kubelancer, chose the Hybrid Approach&nbsp;Works?" title="Direct link to Why did Kubelancer, chose the Hybrid Approach&nbsp;Works?" translate="no">​</a></h4>
<p>By mixing <strong>c7i.large</strong> and <strong>m7i.large</strong> instances, we&nbsp;will:</p>
<ol>
<li class=""><strong>Reduce Costs:</strong> Compute-optimized instances are cheaper for CPU-heavy tasks.</li>
<li class=""><strong>Right-Size Resources:</strong> Memory-heavy applications get more memory-rich instances without wasting CPU capacity.</li>
<li class=""><strong>Ensure High Availability:</strong> Multiple instance types provide fault tolerance and flexibility during provisioning.</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="performance--costresults">Performance &amp; Cost&nbsp;Results<a href="https://bala.kubelancer.com/blog/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292#performance--costresults" class="hash-link" aria-label="Direct link to Performance &amp; Cost&nbsp;Results" title="Direct link to Performance &amp; Cost&nbsp;Results" translate="no">​</a></h4>
<p>After we implemented this hybrid strategy:</p>
<ul>
<li class=""><strong>Resource Efficiency:</strong> Workloads are provisioned based on exact resource&nbsp;needs.</li>
<li class=""><strong>Cost Savings:</strong> Reduced over-provisioning leads to lower monthly&nbsp;bills.</li>
<li class=""><strong>Performance Gains:</strong> High CPU workloads get dedicated compute-optimized nodes.</li>
<li class=""><strong>Flexibility:</strong> Karpenter’s dynamic scaling ensures adaptability to traffic&nbsp;spikes.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="karpenter-every-devops-engineer-infra-gamechanger">Karpenter, Every DevOps Engineer Infra Game&nbsp;Changer:<a href="https://bala.kubelancer.com/blog/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292#karpenter-every-devops-engineer-infra-gamechanger" class="hash-link" aria-label="Direct link to Karpenter, Every DevOps Engineer Infra Game&nbsp;Changer:" title="Direct link to Karpenter, Every DevOps Engineer Infra Game&nbsp;Changer:" translate="no">​</a></h4>
<p>After we implemented the Hybrid Instance Strategy for AWS EKS powered by Karpenter, it is a game-changer for our microservices cloud-native applications. we achieved cost savings, better resource utilisation, and enhanced performance.</p>
<p>N‍ext Blog, Let us see how to implement….</p>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=5b7f9889b292" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/optimizing-aws-eks-with-karpenter-a-hybrid-instance-strategy-5b7f9889b292?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
            <category>AWS</category>
            <category>Kubernetes</category>
        </item>
        <item>
            <title><![CDATA[Path Based - Simple Fanout Ingress on Kubernetes]]></title>
            <link>https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45</link>
            <guid>https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45</guid>
            <pubDate>Fri, 10 Jan 2025 12:21:31 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*PS5MQde3-QEiZJhK.jpg" alt="banner" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="simple-fanout--path-based-ingress--demo">Simple fanout / Path Based Ingress -&nbsp;Demo<a href="https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45#simple-fanout--path-based-ingress--demo" class="hash-link" aria-label="Direct link to Simple fanout / Path Based Ingress -&nbsp;Demo" title="Direct link to Simple fanout / Path Based Ingress -&nbsp;Demo" translate="no">​</a></h3>
<p>Expose multiple services by using single IP&nbsp;address.</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*KvV_R2OD4Glgj3yq.png" alt="image" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-three-deployment-and-services">Create three deployment and services.<a href="https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45#create-three-deployment-and-services" class="hash-link" aria-label="Direct link to Create three deployment and services." title="Direct link to Create three deployment and services." translate="no">​</a></h4>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vi simplesite-deployment-services.yaml</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: apps/v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Deployment  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: home-deployment  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  replicas: 1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    matchLabels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      app: home  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      labels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        app: home  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      containers:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - name: home-container  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          image: kubelancer/simplehome:v1.0.0  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          ports:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - containerPort: 8080  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          env:                    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: HOME\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://home-service:8080"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: BLOG\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://blog-service:8081"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: SERVICES\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://services-service:8082"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">\---  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: home-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app: home  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ports:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - protocol: TCP  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      port: 8080  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      targetPort: 8080  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  type: ClusterIP  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">\---  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: apps/v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Deployment  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: blog-deployment  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  replicas: 1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    matchLabels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      app: blog  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      labels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        app: blog  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      containers:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - name: blog-container  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          image: kubelancer/simpleblog:v1.0.0  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          ports:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - containerPort: 8081  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          env:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: HOME\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://home-service:8080"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: BLOG\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://blog-service:8081"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: SERVICES\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://services-service:8082"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">\---  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: blog-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app: blog  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ports:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - protocol: TCP  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      port: 8081  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      targetPort: 8081  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  type: ClusterIP  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">\---  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: apps/v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Deployment  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: services-deployment  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  replicas: 1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    matchLabels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      app: services  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      labels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        app: services  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      containers:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - name: services-container  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          image: kubelancer/simpleservices:v1.0.0  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          ports:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - containerPort: 8082  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          env:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: HOME\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://home-service:8080"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: BLOG\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://blog-service:8081"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            - name: SERVICES\_SERVICE\_URL  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              value: "http://services-service:8082"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">\---  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: services-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app: services  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ports:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - protocol: TCP  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      port: 8082  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      targetPort: 8082  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  type: ClusterIP</span><br></span></code></pre></div></div>
<ul>
<li class="">Apply the deployment and&nbsp;services</li>
</ul>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl apply -f simplesite-deployment-services.yaml</span><br></span></code></pre></div></div>
<ul>
<li class="">List deployment,pods,svc</li>
</ul>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get deployment,pod,svc -o wide</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="output">Output<a href="https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45#output" class="hash-link" aria-label="Direct link to Output" title="Direct link to Output" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*yPoTFoBcAttcNpHJ.png" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-ingress-path-based">Create ingress (path-based)<a href="https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45#create-ingress-path-based" class="hash-link" aria-label="Direct link to Create ingress (path-based)" title="Direct link to Create ingress (path-based)" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vi ingress-pathbased.yaml</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">\---  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: networking.k8s.io/v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Ingress  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: ingress-pathbased  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  namespace: default  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ingressClassName: nginx  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  rules:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - host: tify.kubelancer.com  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      paths:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      - path: /  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pathType: Prefix  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        backend:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          service:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            name: home-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            port:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              number: 8080  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      - path: /blog  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pathType: Prefix  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        backend:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          service:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            name: blog-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            port:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              number: 8081  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      - path: /services  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pathType: Prefix  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        backend:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          service:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            name: services-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            port:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              number: 8082</span><br></span></code></pre></div></div>
<ul>
<li class="">Apply the&nbsp;ingress</li>
</ul>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl apply -f ingress-pathbased.yaml</span><br></span></code></pre></div></div>
<ul>
<li class="">Get ingress</li>
</ul>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get ingress</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="output-1">Output<a href="https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45#output-1" class="hash-link" aria-label="Direct link to Output" title="Direct link to Output" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*PRVRH9bd79af6iBQ.png" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="validate">Validate<a href="https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45#validate" class="hash-link" aria-label="Direct link to Validate" title="Direct link to Validate" translate="no">​</a></h3>
<p><strong>Home Page</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -i  --resolve tify.kubelancer.com:80:192.168.10.0 tify.kubelancer.com</span><br></span></code></pre></div></div>
<p><strong>Blog Page</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -i  --resolve tify.kubelancer.com:80:192.168.10.0 tify.kubelancer.com/blog</span><br></span></code></pre></div></div>
<p><strong>Services Page</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -i  --resolve tify.kubelancer.com:80:192.168.10.0 tify.kubelancer.com/services</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="output-2">Output<a href="https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45#output-2" class="hash-link" aria-label="Direct link to Output" title="Direct link to Output" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*YlaQIXatCVO1wFl6.png" alt="image" class="img_ev3q"></p>
<p>Home</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*1LBy3kHoMo37NSDp.png" alt="image" class="img_ev3q"></p>
<p>Blog</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*sx01eIoGqGGWin5z.png" alt="image" class="img_ev3q"></p>
<p>Service</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="happy-computing">Happy Computing&nbsp;:)<a href="https://bala.kubelancer.com/blog/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45#happy-computing" class="hash-link" aria-label="Direct link to Happy Computing&nbsp;:)" title="Direct link to Happy Computing&nbsp;:)" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=055e87a43b45" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/path-based-simple-fanout-ingress-on-kubernetes-055e87a43b45?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
            <category>Kubernetes</category>
        </item>
        <item>
            <title><![CDATA[Create AWS EKS Cluster — eksctl]]></title>
            <link>https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b</link>
            <guid>https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b</guid>
            <pubDate>Fri, 10 Jan 2025 12:18:39 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*8v3wYbI7g6dzqN5i.png" alt="banner" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-aws-eks-clustereksctl">Create AWS EKS Cluster — eksctl<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#create-aws-eks-clustereksctl" class="hash-link" aria-label="Direct link to Create AWS EKS Cluster — eksctl" title="Direct link to Create AWS EKS Cluster — eksctl" translate="no">​</a></h3>
<p>Creating Kubenetes cluster in AWS have multiple options like using AWS SDK, Terraform, Cloudformation and easy and quick for new learner using AWS Console. In this blog we going see another well know method of creating AWS EKS cluster using “eksctl” command by using as YAML configuration in default VPC. ( Same can be create by CLI command).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="lets-getstart">Let’s get&nbsp;start<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#lets-getstart" class="hash-link" aria-label="Direct link to Let’s get&nbsp;start" title="Direct link to Let’s get&nbsp;start" translate="no">​</a></h3>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="prerequisites">Prerequisites:<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites:" title="Direct link to Prerequisites:" translate="no">​</a></h3>
<p>Let install these binary one by&nbsp;one</p>
<ol>
<li class="">AWS CLI</li>
<li class="">eksctl CLI</li>
<li class="">kubectl</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-install-aws-cli-macos">Step 1. Install AWS CLI (Mac&nbsp;OS)<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-1-install-aws-cli-macos" class="hash-link" aria-label="Direct link to Step 1. Install AWS CLI (Mac&nbsp;OS)" title="Direct link to Step 1. Install AWS CLI (Mac&nbsp;OS)" translate="no">​</a></h3>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="download-aws-clibinary">Download AWS CLI&nbsp;binary<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#download-aws-clibinary" class="hash-link" aria-label="Direct link to Download AWS CLI&nbsp;binary" title="Direct link to Download AWS CLI&nbsp;binary" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*6J25ADnX888KRIdU" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="install-awscli">Install AWS&nbsp;CLI<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#install-awscli" class="hash-link" aria-label="Direct link to Install AWS&nbsp;CLI" title="Direct link to Install AWS&nbsp;CLI" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo installer -pkg ./AWSCLIV2.pkg -target /</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*J6P6L-2OHpXfbtX5" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="verify-the-installation">Verify the installation<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#verify-the-installation" class="hash-link" aria-label="Direct link to Verify the installation" title="Direct link to Verify the installation" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">which aws  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">aws --version</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/650/0*yE2erRuy89kWl4rF" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-configure-awscli">Step 2. Configure AWS&nbsp;CLI<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-2-configure-awscli" class="hash-link" aria-label="Direct link to Step 2. Configure AWS&nbsp;CLI" title="Direct link to Step 2. Configure AWS&nbsp;CLI" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-21-login-to-aws-console-as-rootuser">Step 2.1. Login to AWS console as root&nbsp;user<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-21-login-to-aws-console-as-rootuser" class="hash-link" aria-label="Direct link to Step 2.1. Login to AWS console as root&nbsp;user" title="Direct link to Step 2.1. Login to AWS console as root&nbsp;user" translate="no">​</a></h4>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-22-create-iamuser">Step 2.2. Create IAM&nbsp;user<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-22-create-iamuser" class="hash-link" aria-label="Direct link to Step 2.2. Create IAM&nbsp;user" title="Direct link to Step 2.2. Create IAM&nbsp;user" translate="no">​</a></h4>
<blockquote>
<p>username: kubedeveloper</p>
</blockquote>
<blockquote>
<p>No AWS console access, Only programmatic access</p>
</blockquote>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*RHLvaEl4LgGfRTis" alt="image" class="img_ev3q"></p>
<p>Provide Username</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*y0XglW3siyhLWF-h" alt="image" class="img_ev3q"></p>
<p>Permission as per User&nbsp;Type</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*fz-rr7HCh2Qe0_PT" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-access-and-secretaccesskey">Create Access and SecretAccessKey<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#create-access-and-secretaccesskey" class="hash-link" aria-label="Direct link to Create Access and SecretAccessKey" title="Direct link to Create Access and SecretAccessKey" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-23-select-the-iam-user-kubedeveloper">Step 2.3 Select the IAM user “kubedeveloper”<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-23-select-the-iam-user-kubedeveloper" class="hash-link" aria-label="Direct link to Step 2.3 Select the IAM user “kubedeveloper”" title="Direct link to Step 2.3 Select the IAM user “kubedeveloper”" translate="no">​</a></h4>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-24-navigate-to-security-credentials">Step 2.4 Navigate to Security Credentials<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-24-navigate-to-security-credentials" class="hash-link" aria-label="Direct link to Step 2.4 Navigate to Security Credentials" title="Direct link to Step 2.4 Navigate to Security Credentials" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*W0FOS6LDMTBZfh_J" alt="image" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-25-click-create-accesskey">Step 2.5. Click Create access&nbsp;key<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-25-click-create-accesskey" class="hash-link" aria-label="Direct link to Step 2.5. Click Create access&nbsp;key" title="Direct link to Step 2.5. Click Create access&nbsp;key" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*AZaS-aLEyZHx4rAT" alt="image" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-26-select-use-case">Step 2.6 Select Use case&nbsp;:<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-26-select-use-case" class="hash-link" aria-label="Direct link to Step 2.6 Select Use case&nbsp;:" title="Direct link to Step 2.6 Select Use case&nbsp;:" translate="no">​</a></h4>
<blockquote>
<p><strong>Command Line Interface (CLI) &amp; check the Confirmation</strong></p>
</blockquote>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*EsY2bE1Sk8lQZ-nq" alt="image" class="img_ev3q"></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-27-set-description-tagoptional-and-clickcreate">Step 2.7. Set description tag — optional and Click&nbsp;create<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-27-set-description-tagoptional-and-clickcreate" class="hash-link" aria-label="Direct link to Step 2.7. Set description tag — optional and Click&nbsp;create" title="Direct link to Step 2.7. Set description tag — optional and Click&nbsp;create" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*2DVs1_r_ae4rSSoF" alt="image" class="img_ev3q"></p>
<blockquote>
<p>Now we got AccessKey and SecretAccessKey,</p>
</blockquote>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-let-configure-aws-cli-on-mac-os-commandline">Next, Let configure AWS CLI on Mac OS command&nbsp;line<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#next-let-configure-aws-cli-on-mac-os-commandline" class="hash-link" aria-label="Direct link to Next, Let configure AWS CLI on Mac OS command&nbsp;line" title="Direct link to Next, Let configure AWS CLI on Mac OS command&nbsp;line" translate="no">​</a></h4>
<p><em>Note: if multiple aws account configured, use — profile</em></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ aws configure</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*UM7Vb_AAe_qqXXJ_" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="validate-aws-cliaccess">Validate AWS CLI&nbsp;Access<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#validate-aws-cliaccess" class="hash-link" aria-label="Direct link to Validate AWS CLI&nbsp;Access" title="Direct link to Validate AWS CLI&nbsp;Access" translate="no">​</a></h3>
<p><strong>Run any aws command to list resources</strong></p>
<p><em>Here eg: To list s3 buckets on my AWS&nbsp;account</em></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">bala@kubelancer Downloads % aws s3 ls</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-output-which-denoted-aws-access-has-been-configured-correctly">Getting output, which denoted AWS access has been configured correctly<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#getting-output-which-denoted-aws-access-has-been-configured-correctly" class="hash-link" aria-label="Direct link to Getting output, which denoted AWS access has been configured correctly" title="Direct link to Getting output, which denoted AWS access has been configured correctly" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">bala@kubelancer Downloads % aws s3 ls  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">2022-12-13 21:36:02 firehose-backup-05bf6840</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="install-eksctl-on-macos">Install eksctl on Mac&nbsp;OS<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#install-eksctl-on-macos" class="hash-link" aria-label="Direct link to Install eksctl on Mac&nbsp;OS" title="Direct link to Install eksctl on Mac&nbsp;OS" translate="no">​</a></h3>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="to-download-the-latest-release-run-on-mac-os-arm64-architecture">To download the latest release, run on Mac OS (arm64 architecture):<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#to-download-the-latest-release-run-on-mac-os-arm64-architecture" class="hash-link" aria-label="Direct link to To download the latest release, run on Mac OS (arm64 architecture):" title="Direct link to To download the latest release, run on Mac OS (arm64 architecture):" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl\_Darwin\_arm64.tar.gz"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tar -xzvf eksctl\_Darwin\_arm64.tar.gz  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">sudo mv ./eksctl /usr/local/bin</span><br></span></code></pre></div></div>
<p><em>Ref:</em> <a href="https://www.weave.works/oss/eksctl/?ref=blog.kubelancer.com" target="_blank" rel="noopener noreferrer" class=""><em>https://www.weave.works/oss/eksctl/</em></a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-creating-an-aws-eks-kubernetes-cluster-using-eksctltool">Step 3: Creating an AWS EKS Kubernetes Cluster using eksctl&nbsp;tool<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#step-3-creating-an-aws-eks-kubernetes-cluster-using-eksctltool" class="hash-link" aria-label="Direct link to Step 3: Creating an AWS EKS Kubernetes Cluster using eksctl&nbsp;tool" title="Direct link to Step 3: Creating an AWS EKS Kubernetes Cluster using eksctl&nbsp;tool" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="31-create-cluster-configuration-yamlfile">3.1. Create Cluster configuration yaml&nbsp;file<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#31-create-cluster-configuration-yamlfile" class="hash-link" aria-label="Direct link to 3.1. Create Cluster configuration yaml&nbsp;file" title="Direct link to 3.1. Create Cluster configuration yaml&nbsp;file" translate="no">​</a></h4>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ vi cluster-config.yaml</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: eksctl.io/v1alpha5  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: ClusterConfig  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: kubelancer-cluster-1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  region: us-east-1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">nodeGroups:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - name: ng-1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    instanceType: t4g.medium  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    desiredCapacity: 2  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    volumeSize: 20  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ssh:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      allow: false</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="32-lets-create-eks-cluster-on-aws-using-eksctlcommand">3.2 Let’s create eks cluster on aws using eksctl&nbsp;command<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#32-lets-create-eks-cluster-on-aws-using-eksctlcommand" class="hash-link" aria-label="Direct link to 3.2 Let’s create eks cluster on aws using eksctl&nbsp;command" title="Direct link to 3.2 Let’s create eks cluster on aws using eksctl&nbsp;command" translate="no">​</a></h4>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ eksctl create cluster -f cluster-config.yaml</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*bCHBjtkzz-9y-9zL.png" alt="image" class="img_ev3q"></p>
<p>Cluster created successfully</p>
<p><em>Note: if multiple aws account configured, use — profile</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-the-cluster-name-by-using-eksctlcommand">Get the cluster name by using eksctl&nbsp;command<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#get-the-cluster-name-by-using-eksctlcommand" class="hash-link" aria-label="Direct link to Get the cluster name by using eksctl&nbsp;command" title="Direct link to Get the cluster name by using eksctl&nbsp;command" translate="no">​</a></h3>
<p><em>eksctl interact with AWS API and get the required details from AWS&nbsp;cloud</em></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ eksctl get cluster --profile kubedev</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*LdkIlcyQdjaZUq2B.png" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-the-following-command-to-get-update-kube-config">Use the following command to get update kube-config.<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#use-the-following-command-to-get-update-kube-config" class="hash-link" aria-label="Direct link to Use the following command to get update kube-config." title="Direct link to Use the following command to get update kube-config." translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ aws eks update-kubeconfig --name=kubelancer-cluster-1 --region=us-east-1</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="verify-thecluster">Verify the&nbsp;Cluster<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#verify-thecluster" class="hash-link" aria-label="Direct link to Verify the&nbsp;Cluster" title="Direct link to Verify the&nbsp;Cluster" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get nodes</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*J5sncgvhxcyeRa4Q.png" alt="image" class="img_ev3q"></p>
<p>Cluster Node&nbsp;Status</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="delete-cluster">Delete Cluster<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#delete-cluster" class="hash-link" aria-label="Direct link to Delete Cluster" title="Direct link to Delete Cluster" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl get poddisruptionbudget -A  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl delete poddisruptionbudget coredns -n kube-system  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ eksctl delete cluster -f cluster-config.yaml --profile kubedev</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/700/0*az4ZrnhDpIqJNMBZ.png" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="happy-computing">Happy Computing&nbsp;:)<a href="https://bala.kubelancer.com/blog/create-aws-eks-cluster-eksctl-d7f548da3b1b#happy-computing" class="hash-link" aria-label="Direct link to Happy Computing&nbsp;:)" title="Direct link to Happy Computing&nbsp;:)" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=d7f548da3b1b" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/create-aws-eks-cluster-eksctl-d7f548da3b1b?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
            <category>AWS</category>
            <category>Kubernetes</category>
        </item>
        <item>
            <title><![CDATA[Kubecost | Kubernetes cost monitoring and management]]></title>
            <link>https://bala.kubelancer.com/blog/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13</link>
            <guid>https://bala.kubelancer.com/blog/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13</guid>
            <pubDate>Fri, 10 Jan 2025 12:15:48 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*F2lHnvP2bJ1onCOI.png" alt="banner" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-create-an-aws-ekscluster">Step 1: Create an AWS EKS&nbsp;Cluster<a href="https://bala.kubelancer.com/blog/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13#step-1-create-an-aws-ekscluster" class="hash-link" aria-label="Direct link to Step 1: Create an AWS EKS&nbsp;Cluster" title="Direct link to Step 1: Create an AWS EKS&nbsp;Cluster" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get node</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*DRh29Vk83uMsRgo9" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-enable-kubecost-add-on-using-awscli">Step 2: Enable Kubecost add-on using AWS&nbsp;CLI<a href="https://bala.kubelancer.com/blog/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13#step-2-enable-kubecost-add-on-using-awscli" class="hash-link" aria-label="Direct link to Step 2: Enable Kubecost add-on using AWS&nbsp;CLI" title="Direct link to Step 2: Enable Kubecost add-on using AWS&nbsp;CLI" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">aws eks create-addon --addon-name kubecost\_kubecost --cluster-name kube-cluster-3 --region us-east-1</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*T5tS6u22Zrn87FJy" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-deploying-kubecost-on-an-amazon-eks-cluster-usinghelm">Step 3: Deploying Kubecost on an Amazon EKS cluster using&nbsp;Helm<a href="https://bala.kubelancer.com/blog/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13#step-3-deploying-kubecost-on-an-amazon-eks-cluster-usinghelm" class="hash-link" aria-label="Direct link to Step 3: Deploying Kubecost on an Amazon EKS cluster using&nbsp;Helm" title="Direct link to Step 3: Deploying Kubecost on an Amazon EKS cluster using&nbsp;Helm" translate="no">​</a></h3>
<p><strong>Step 3.1: Install Prerequisites</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">eksctl create iamserviceaccount   \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    --name ebs-csi-controller-sa   \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    --namespace kube-system   \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    --cluster kube-cluster-3  \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy  \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    --approve \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    --role-only \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    --role-name AmazonEKS\_EBS\_CSI\_DriverRole  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">export_ SERVICE\_ACCOUNT\_ROLE\_ARN=$(aws iam get-role --role-name AmazonEKS\_EBS\_CSI\_DriverRole --output json | jq -r '.Role.Arn')</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*y_wUr-4OHjbej6cU" alt="image" class="img_ev3q"></p>
<p><strong>Step 3.2: Install the Amazon EBS CSI add-on for EKS using the AmazonEKS_EBS_CSI_DriverRole</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">eksctl create addon --name aws-ebs-csi-driver --cluster kube-cluster-3 \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    --service-account-role-arn $SERVICE\_ACCOUNT\_ROLE\_ARN --force</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*gKQWV1UkQsiAaQLS" alt="image" class="img_ev3q"></p>
<p><strong>Step 3.3: Install Kubecost on your Amazon EKS&nbsp;cluster</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm upgrade -i kubecost \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">oci://public.ecr.aws/kubecost/cost-analyzer --version "1.104.4" \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">\--namespace kubecost --create-namespace \\  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">\-f https://raw.githubusercontent.com/kubecost/cost-analyzer-helm-chart/develop/cost-analyzer/values-eks-cost-monitoring.yaml</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*w9fkAIqW6rUf1mHe" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-generate-kubecost-dashboard-endpoint-using-port-forward">Step 4: Generate Kubecost dashboard endpoint using port-forward<a href="https://bala.kubelancer.com/blog/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13#step-4-generate-kubecost-dashboard-endpoint-using-port-forward" class="hash-link" aria-label="Direct link to Step 4: Generate Kubecost dashboard endpoint using port-forward" title="Direct link to Step 4: Generate Kubecost dashboard endpoint using port-forward" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 9090</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*NTXPk7ZW2OBg5y1Q" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5-access-monitoring-dashboards">Step 5: Access Monitoring dashboards<a href="https://bala.kubelancer.com/blog/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13#step-5-access-monitoring-dashboards" class="hash-link" aria-label="Direct link to Step 5: Access Monitoring dashboards" title="Direct link to Step 5: Access Monitoring dashboards" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">http://localhost:9090</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*HL9vl9iCQ_EgVI65" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="happy-computing">Happy computing&nbsp;:)<a href="https://bala.kubelancer.com/blog/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13#happy-computing" class="hash-link" aria-label="Direct link to Happy computing&nbsp;:)" title="Direct link to Happy computing&nbsp;:)" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=e0c27c8f5f13" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/kubecost-kubernetes-cost-monitoring-and-management-e0c27c8f5f13?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
            <category>Kubernetes</category>
        </item>
        <item>
            <title><![CDATA[Setting up TLS with Nginx Ingress]]></title>
            <link>https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe</link>
            <guid>https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe</guid>
            <pubDate>Fri, 10 Jan 2025 12:10:57 GMT</pubDate>
            <description><![CDATA[banner]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*6kJBVzwOvJqPKIMq.jpg" alt="banner" class="img_ev3q"></p>
<p>This guide provides a step-by-step tutorial on setting up TLS with Nginx Ingress on AWS EKS clusters using Let’s-Encrypt</p>
<blockquote>
<p>Expose a Kubernetes service with TLS using NGINX Ingress on AWS&nbsp;EKS</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-create-an-aws-ekscluster">Step 1: Create an AWS EKS&nbsp;Cluster<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#step-1-create-an-aws-ekscluster" class="hash-link" aria-label="Direct link to Step 1: Create an AWS EKS&nbsp;Cluster" title="Direct link to Step 1: Create an AWS EKS&nbsp;Cluster" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="aws-eks-kubernetes-cluster-using-eksctlcommand">AWS EKS Kubernetes Cluster using “eksctl”&nbsp;Command<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#aws-eks-kubernetes-cluster-using-eksctlcommand" class="hash-link" aria-label="Direct link to AWS EKS Kubernetes Cluster using “eksctl”&nbsp;Command" title="Direct link to AWS EKS Kubernetes Cluster using “eksctl”&nbsp;Command" translate="no">​</a></h4>
<p><strong>1: Install AWS CLI (Mac&nbsp;OS)</strong></p>
<p>Download the AWS CLI&nbsp;binary</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*-uOW5dbmacOjPo2g.png" alt="image" class="img_ev3q"></p>
<p><strong>2: Install</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo installer -pkg ./AWSCLIV2.pkg -target /</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*NW75_hUcd60eyH3m.png" alt="image" class="img_ev3q"></p>
<p><strong>3: Verify the installation</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">which aws  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">aws --version</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*Y7_4HvHCHsLx9dq7.png" alt="image" class="img_ev3q"></p>
<p><strong>4: Configure AWS&nbsp;CLI</strong></p>
<p>Login to AWS console as root / Admin privileged IAM&nbsp;user</p>
<p>Create IAM&nbsp;user</p>
<blockquote>
<p>username: kubedeveloper</p>
</blockquote>
<p><em>No AWS console access, only programmatic access</em></p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*nYJgEgEPj6i1DEE8" alt="image" class="img_ev3q"></p>
<p>Username</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*SBWll94ycNQhprzo" alt="image" class="img_ev3q"></p>
<p>User permission</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*Ua4SvgzVeqSqV_oa" alt="image" class="img_ev3q"></p>
<p>Create user</p>
<p><strong>5: Create Access and Secret Access&nbsp;Key</strong></p>
<blockquote>
<p>Select the IAM user kubedeveloper</p>
</blockquote>
<p>Navigate to Security Credentials</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*zOto_jr2DEBgn9CC" alt="image" class="img_ev3q"></p>
<p>Create Security Credentials</p>
<p>Click Create Access&nbsp;Key</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*h2a4aAInVUbvX4QP" alt="image" class="img_ev3q"></p>
<p>Access Key</p>
<p>Select Use case: Command Line Interface (CLI) &amp; check the Confirmation</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*TzaVjLn0ORhPViI8" alt="image" class="img_ev3q"></p>
<p>Use Case for Security Credentials</p>
<p>Set description tag <em>— optional</em> and Click&nbsp;Create</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*eIih2cWjNPHnDpRR" alt="image" class="img_ev3q"></p>
<p>Download Credentials</p>
<p><strong>6: Configure AWS CLI on Mac OS command&nbsp;line</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">aws configure</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*iqMQk3TZIIzHOwYN.png" alt="image" class="img_ev3q"></p>
<p><strong>7: Install eksctl on Mac&nbsp;OS</strong></p>
<p>To download the latest release, run on Mac OS (arm64 architecture):</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl\_Darwin\_arm64.tar.gz"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tar -xzvf eksctl\_Darwin\_arm64.tar.gz  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">sudo mv ./eksctl /usr/local/bin</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*TmucQJSTmo60PtPM.png" alt="image" class="img_ev3q"></p>
<p>Ref: <a href="https://www.weave.works/oss/eksctl/?ref=blog.kubelancer.com" target="_blank" rel="noopener noreferrer" class="">https://www.weave.works/oss/eksctl/</a></p>
<p><strong>8: Creating an AWS EKS Kubernetes Cluster using&nbsp;eksctl</strong></p>
<p>Create Cluster configuration YAML&nbsp;file</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vi cluster-config.yaml</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: eksctl.io/v1alpha5  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: ClusterConfig  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: kubelancer-cluster-2  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  region: us-east-1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">nodeGroups:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - name: ng-1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    instanceType: t4g.small  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    desiredCapacity: 2  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    volumeSize: 10  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ssh:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      allow: false</span><br></span></code></pre></div></div>
<p><strong>Let’s create an EKS Cluster on AWS using eksctl&nbsp;command</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">eksctl create cluster -f cluster-config.yaml</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*mS8EqU4eAODz6FE7.png" alt="image" class="img_ev3q"></p>
<p>Use the following command to get kube-config context</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">aws eks update-kubeconfig --name=kubelancer-cluster-2 --region=us-east-1</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get node</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*wZi3mNl5uKaQTsKY.png" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-deploy-the-nginx-ingress-controller">Step 2: Deploy the NGINX Ingress Controller<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#step-2-deploy-the-nginx-ingress-controller" class="hash-link" aria-label="Direct link to Step 2: Deploy the NGINX Ingress Controller" title="Direct link to Step 2: Deploy the NGINX Ingress Controller" translate="no">​</a></h3>
<ol>
<li class=""><strong>Create Name space and&nbsp;deploy</strong></li>
</ol>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl create namespace ingress-nginx</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*UZWoNrOHQQeZX0tO" alt="image" class="img_ev3q"></p>
<p>Pre-flight check</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get pods -n ingress-nginx</span><br></span></code></pre></div></div>
<p>Output</p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*xAbk68OS8iUUv17U" alt="image" class="img_ev3q"></p>
<p>List Service</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get svc --namespace=ingress-nginx</span><br></span></code></pre></div></div>
<p><strong>Output</strong></p>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*P_-RpIxpmpf_11nL" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-deploy-a-sample-application">Step 3: Deploy a sample application<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#step-3-deploy-a-sample-application" class="hash-link" aria-label="Direct link to Step 3: Deploy a sample application" title="Direct link to Step 3: Deploy a sample application" translate="no">​</a></h3>
<ol>
<li class=""><strong>Deploy sample app on dev namespace</strong></li>
</ol>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl create ns dev</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vi kubewebserver.yaml  </span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: apps/v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Deployment  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: kubewebserver  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  namespace: dev  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  labels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app: kubewebserver  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  replicas: 1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    matchLabels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      app: kubewebserver  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      labels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        app: kubewebserver  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      containers:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      - name: kubewebserver  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        image: kubelancer/hello-kubelancer:v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        ports:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - containerPort: 80  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">\---  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: kubewebserver-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  namespace: dev  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  labels:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app: kubewebserver-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  type: ClusterIP  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ports:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - port: 80  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    targetPort: 80  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    protocol: TCP  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app: kubewebserver</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl apply -f kubewebserver.yaml</span><br></span></code></pre></div></div>
<p><strong>Output</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get deploy,svc -n dev</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*GvaKKz-fSlwg4eHi" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-create-ingress-withouttls">Step 4: Create ingress without&nbsp;TLS<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#step-4-create-ingress-withouttls" class="hash-link" aria-label="Direct link to Step 4: Create ingress without&nbsp;TLS" title="Direct link to Step 4: Create ingress without&nbsp;TLS" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vi ingress-with-host.yaml</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: networking.k8s.io/v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Ingress  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: ingress-with-host-02  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  namespace: dev  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  annotations:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    nginx.ingress.kubernetes.io/rewrite-target: /  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ingressClassName: nginx  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  rules:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - host: webtest.kubelancer.in  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      paths:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      - path: /  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pathType: Prefix  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        backend:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          service:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            name: kubewebserver-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            port:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              number: 80</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl apply -f ingress-with-host.yaml</span><br></span></code></pre></div></div>
<p><strong>Output</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get ingress -n dev</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*4dQ65fMQ1-9pA7zO" alt="image" class="img_ev3q"></p>
<p>Note: Create CNAME record on your DNS for name resolution</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="output">Output<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#output" class="hash-link" aria-label="Direct link to Output" title="Direct link to Output" translate="no">​</a></h3>
<p>curl <a href="http://webtest.kubelancer.in/?ref=blog.kubelancer.com" target="_blank" rel="noopener noreferrer" class="">http://webtest.kubelancer.in</a></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl http://webtest.kubelancer.in  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Hello Kubelancer</span><br></span></code></pre></div></div>
<blockquote>
<p>Let we perform below steps to access same website using&nbsp;https://</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="to-config-ssl-we-are-going-to-use-cert-manager-and-lets-encrypt-in-thislab">To config SSL, we are going to use Cert-Manager and Let’s Encrypt in this&nbsp;Lab<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#to-config-ssl-we-are-going-to-use-cert-manager-and-lets-encrypt-in-thislab" class="hash-link" aria-label="Direct link to To config SSL, we are going to use Cert-Manager and Let’s Encrypt in this&nbsp;Lab" title="Direct link to To config SSL, we are going to use Cert-Manager and Let’s Encrypt in this&nbsp;Lab" translate="no">​</a></h3>
<p><em>In simple:</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cert-manager">Cert Manager<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#cert-manager" class="hash-link" aria-label="Direct link to Cert Manager" title="Direct link to Cert Manager" translate="no">​</a></h3>
<p>cert-manager creates TLS certificates for workloads in your Kubernetes, also helps to renew the certificate.</p>
<p>cert-manager obtain certificates from a Let’s&nbsp;Encrypt.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="lets-encrypt">Let’s Encrypt<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#lets-encrypt" class="hash-link" aria-label="Direct link to Let’s Encrypt" title="Direct link to Let’s Encrypt" translate="no">​</a></h3>
<p>To enable HTTPS for website, we need to purchase SSL certificate from Certificate Authority, which is costable. For demo or development environment, we have a choice to use free Certificate Authority (CA), that guy is Let’s&nbsp;Encrypt.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5-deploy-cert-manager">Step 5: Deploy cert-manager<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#step-5-deploy-cert-manager" class="hash-link" aria-label="Direct link to Step 5: Deploy cert-manager" title="Direct link to Step 5: Deploy cert-manager" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.yaml</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*_iO-ahE8W_vo9FwZ" alt="image" class="img_ev3q"></p>
<p>Output</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get pods --namespace cert-manager</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*tioJG98abrmVktZj" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-6-configure-a-lets-encryptissuer">Step 6: Configure a Let’s Encrypt&nbsp;Issuer<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#step-6-configure-a-lets-encryptissuer" class="hash-link" aria-label="Direct link to Step 6: Configure a Let’s Encrypt&nbsp;Issuer" title="Direct link to Step 6: Configure a Let’s Encrypt&nbsp;Issuer" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: cert-manager.io/v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Issuer  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: letsencrypt-prod  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  namespace: dev  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  acme:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    server: https://acme-v02.api.letsencrypt.org/directory  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    email: noreply@gmail.com   </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    privateKeySecretRef:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name: letsencrypt-prod  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    solvers:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      - http01:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          ingress:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            ingressClassName: nginx</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl create -f issuer.yaml</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get issuer -n dev</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*joJyJnycikLrCPhN" alt="image" class="img_ev3q"></p>
<blockquote>
<p>Note: Ensure the issuer is in Ready&nbsp;State</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-7-add-tls-snippet-on-yaml-and-deploy-ingressresource">Step 7: Add TLS snippet on YAML and deploy Ingress&nbsp;Resource<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#step-7-add-tls-snippet-on-yaml-and-deploy-ingressresource" class="hash-link" aria-label="Direct link to Step 7: Add TLS snippet on YAML and deploy Ingress&nbsp;Resource" title="Direct link to Step 7: Add TLS snippet on YAML and deploy Ingress&nbsp;Resource" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vi ingress-with-host.yaml</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">apiVersion: networking.k8s.io/v1  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">kind: Ingress  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">metadata:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name: ingress-with-host-02  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  namespace: dev  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  annotations:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    nginx.ingress.kubernetes.io/rewrite-target: /  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    cert-manager.io/issuer: "letsencrypt-prod"  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">spec:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ingressClassName: nginx  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  tls:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - hosts:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - webtest.kubelancer.in  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    secretName: kubewebserver-tls  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  rules:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  - host: webtest.kubelancer.in  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      paths:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      - path: /  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pathType: Prefix  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        backend:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          service:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            name: kubewebserver-service  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            port:  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              number: 80</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl apply -f ingress-with-host.yaml</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get secret -n dev</span><br></span></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1024/0*hDcZwfUoNwoRwU7o" alt="image" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-8output">Step 8:&nbsp;Output<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#step-8output" class="hash-link" aria-label="Direct link to Step 8:&nbsp;Output" title="Direct link to Step 8:&nbsp;Output" translate="no">​</a></h3>
<blockquote>
<p>Open in&nbsp;browser</p>
</blockquote>
<p><img decoding="async" loading="lazy" src="https://cdn-images-1.medium.com/max/1012/0*pCujpAIW_k7t5Hej.png" alt="image" class="img_ev3q"></p>
<p>Now the website has secure connection</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="now-the-website-has-a-secure-encrypted-connection-usingssl">Now the website has a secure encrypted connection using&nbsp;SSL<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#now-the-website-has-a-secure-encrypted-connection-usingssl" class="hash-link" aria-label="Direct link to Now the website has a secure encrypted connection using&nbsp;SSL" title="Direct link to Now the website has a secure encrypted connection using&nbsp;SSL" translate="no">​</a></h4>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="happy-computing">Happy Computing&nbsp;:)<a href="https://bala.kubelancer.com/blog/setting-up-tls-with-nginx-ingress-6bf68e329abe#happy-computing" class="hash-link" aria-label="Direct link to Happy Computing&nbsp;:)" title="Direct link to Happy Computing&nbsp;:)" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=6bf68e329abe" alt="image" class="img_ev3q"></p>
<hr>
<p>👉 Originally published on Medium: <a href="https://bala-kubelancer.medium.com/setting-up-tls-with-nginx-ingress-6bf68e329abe?source=rss-2ce6e2575b1e------2" target="_blank" rel="noopener noreferrer" class="">Read more</a></p>]]></content:encoded>
        </item>
    </channel>
</rss>