<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://gohugo.io/" version="0.152.2">Hugo</generator><title>k8s-ops.net</title><link href="https://k8s-ops.net/" rel="alternate" type="text/html" title="html"/><link href="https://k8s-ops.net/feed.xml" rel="self" type="application/atom+xml" title="atom"/><link href="https://k8s-ops.net/feed.json" rel="alternate" type="application/json" title="Json"/><updated>2025-12-07T22:07:27+00:00</updated><id>https://k8s-ops.net/</id><entry><title>NGINX Gateway Fabric 2.2: Modern Kubernetes Application Delivery</title><link href="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/</id><published>2025-12-01T00:00:00+00:00</published><updated>2025-12-07T16:51:08-05:00</updated><content type="html">
&lt;p&gt;NGINX has released Gateway Fabric 2.2, representing a significant milestone in Kubernetes application delivery and modern workload support. This release focuses on advancing Kubernetes-native networking, with particular emphasis on supporting modern application patterns including Large Language Model (LLM) inference workloads. NGINX Gateway Fabric combines the power of the proven NGINX data plane with the flexibility and standardization of the Kubernetes Gateway API.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="nginx-gateway-fabric-overview"&gt;
NGINX Gateway Fabric Overview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#nginx-gateway-fabric-overview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor NGINX Gateway Fabric Overview" href="#nginx-gateway-fabric-overview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;NGINX Gateway Fabric is NGINX&amp;rsquo;s official implementation of the Kubernetes Gateway API, providing a production-ready, high-performance solution for managing ingress traffic in Kubernetes clusters. Built on NGINX&amp;rsquo;s battle-tested data plane, it offers the reliability and performance that organizations expect from NGINX while embracing the modern Gateway API standard.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="key-characteristics"&gt;
Key Characteristics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#key-characteristics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Characteristics" href="#key-characteristics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gateway API Compliant&lt;/strong&gt;: Full implementation of Gateway API specifications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NGINX Data Plane&lt;/strong&gt;: Leverages proven NGINX technology&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Production Ready&lt;/strong&gt;: Battle-tested in production environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High Performance&lt;/strong&gt;: NGINX&amp;rsquo;s renowned performance and efficiency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature Rich&lt;/strong&gt;: Advanced traffic management capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes Native&lt;/strong&gt;: Designed from the ground up for Kubernetes&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="whats-new-in-gateway-fabric-22"&gt;
What&amp;rsquo;s New in Gateway Fabric 2.2
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#whats-new-in-gateway-fabric-22" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What&amp;rsquo;s New in Gateway Fabric 2.2" href="#whats-new-in-gateway-fabric-22"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-gateway-api-inference-extension"&gt;
1. Gateway API Inference Extension
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#1-gateway-api-inference-extension" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Gateway API Inference Extension" href="#1-gateway-api-inference-extension"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;One of the most significant additions in 2.2 is the Gateway API Inference Extension, designed specifically for LLM inference workloads and modern AI/ML applications.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="inference-aware-routing"&gt;
Inference-Aware Routing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#inference-aware-routing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Inference-Aware Routing" href="#inference-aware-routing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;The Inference Extension enables intelligent routing for inference workloads:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;llm-inference-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;api.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/inference&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;InferencePolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;llm-inference-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;llm-inference-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;InferencePolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;llm-inference-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;300s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxConcurrentRequests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;retryPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxRetries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;retryOn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;timeout&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;5xx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loadBalancing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;least_connections&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;stickySession&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="features-for-llm-workloads"&gt;
Features for LLM Workloads
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#features-for-llm-workloads" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Features for LLM Workloads" href="#features-for-llm-workloads"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Extended Timeouts&lt;/strong&gt;: Support for long-running inference requests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent Request Limits&lt;/strong&gt;: Manage resource-intensive workloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intelligent Retry Logic&lt;/strong&gt;: Handle transient failures gracefully&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection Pooling&lt;/strong&gt;: Efficient connection management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streaming Support&lt;/strong&gt;: Real-time response streaming for LLM outputs&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-enhanced-openshift-integration"&gt;
2. Enhanced OpenShift Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#2-enhanced-openshift-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Enhanced OpenShift Integration" href="#2-enhanced-openshift-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Gateway Fabric 2.2 includes improved integration with Red Hat OpenShift:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="openshift-specific-features"&gt;
OpenShift-Specific Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#openshift-specific-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor OpenShift-Specific Features" href="#openshift-specific-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;openshift-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;openshift-ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowedRoutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Selector&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;network.openshift.io/policy-group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="openshift-router-compatibility"&gt;
OpenShift Router Compatibility
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#openshift-router-compatibility" class="gblog-post__anchor clip flex align-center" aria-label="Anchor OpenShift Router Compatibility" href="#openshift-router-compatibility"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Seamless Migration&lt;/strong&gt;: Easier migration from OpenShift Router&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Route Compatibility&lt;/strong&gt;: Support for OpenShift Route resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Context&lt;/strong&gt;: Better integration with OpenShift security policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-tenancy&lt;/strong&gt;: Enhanced support for OpenShift projects&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-advanced-traffic-management"&gt;
3. Advanced Traffic Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#3-advanced-traffic-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Advanced Traffic Management" href="#3-advanced-traffic-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Gateway Fabric 2.2 introduces enhanced traffic management capabilities:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="weighted-traffic-splitting"&gt;
Weighted Traffic Splitting
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#weighted-traffic-splitting" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Weighted Traffic Splitting" href="#weighted-traffic-splitting"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;stable-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TrafficSplitPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TrafficSplitPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;healthChecks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;5s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;failover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="request-mirroring"&gt;
Request Mirroring
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#request-mirroring" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Request Mirroring" href="#request-mirroring"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mirroring-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RequestMirror&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requestMirror&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;shadow-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="advanced-rate-limiting"&gt;
Advanced Rate Limiting
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#advanced-rate-limiting" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Advanced Rate Limiting" href="#advanced-rate-limiting"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rate-limited-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RateLimitPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-rate-limit&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RateLimitPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-rate-limit&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;period&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;burst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;${remote_addr}&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;zones&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api_zone&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;100r/s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-enhanced-security-features"&gt;
4. Enhanced Security Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#4-enhanced-security-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Enhanced Security Features" href="#4-enhanced-security-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="mtls-support"&gt;
mTLS Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#mtls-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor mTLS Support" href="#mtls-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secure-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https-mtls&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Terminate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;server-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clientCertificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;client-ca-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowedRoutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;All&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="web-application-firewall-waf-integration"&gt;
Web Application Firewall (WAF) Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#web-application-firewall-waf-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Web Application Firewall (WAF) Integration" href="#web-application-firewall-waf-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;waf-protected-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;WAFPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;waf-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;WAFPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;waf-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;blocking&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1001&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1002&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;customRules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;rule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SecRule REQUEST_URI &amp;#34;@contains /admin&amp;#34; &amp;#34;id:9001,deny,status:403&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="5-improved-observability"&gt;
5. Improved Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#5-improved-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. Improved Observability" href="#5-improved-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="enhanced-metrics"&gt;
Enhanced Metrics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#enhanced-metrics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Enhanced Metrics" href="#enhanced-metrics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Gateway Fabric 2.2 provides comprehensive metrics:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ServiceMonitor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Metrics include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Request Rates&lt;/strong&gt;: Requests per second by route, hostname, status code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Latency&lt;/strong&gt;: P50, P95, P99 latency percentiles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Rates&lt;/strong&gt;: 4xx and 5xx error rates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection Metrics&lt;/strong&gt;: Active connections, connection rates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backend Metrics&lt;/strong&gt;: Backend health, response times&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSL/TLS Metrics&lt;/strong&gt;: Certificate expiration, handshake failures&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="distributed-tracing"&gt;
Distributed Tracing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#distributed-tracing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Distributed Tracing" href="#distributed-tracing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;traced-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TracingPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tracing-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TracingPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tracing-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;samplingRate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0.1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;traceIdHeader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;x-trace-id&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spanIdHeader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;x-span-id&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exporter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;jaeger&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http://jaeger-collector:14268/api/traces&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="installation-and-configuration"&gt;
Installation and Configuration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#installation-and-configuration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Installation and Configuration" href="#installation-and-configuration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="quick-start-installation"&gt;
Quick Start Installation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#quick-start-installation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Quick Start Installation" href="#quick-start-installation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add Helm repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add nginx-gateway-fabric https://nginxinc.github.io/nginx-gateway-fabric-helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install NGINX Gateway Fabric&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install nginx-gateway-fabric nginx-gateway-fabric/nginx-gateway-fabric &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --namespace nginx-gateway &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --create-namespace &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --version 2.2.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Verify installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -n nginx-gateway
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get gatewayclass
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="advanced-configuration"&gt;
Advanced Configuration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#advanced-configuration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Advanced Configuration" href="#advanced-configuration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="custom-nginx-configuration"&gt;
Custom NGINX Configuration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#custom-nginx-configuration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Custom NGINX Configuration" href="#custom-nginx-configuration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.conf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; worker_processes auto;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; worker_connections 1024;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; events {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; use epoll;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; multi_accept on;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; http {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; keepalive_timeout 65;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; keepalive_requests 100;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; # Logging
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; log_format main &amp;#39;$remote_addr - $remote_user [$time_local] &amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#39;&amp;#34;$request&amp;#34; $status $body_bytes_sent &amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#39;&amp;#34;$http_referer&amp;#34; &amp;#34;$http_user_agent&amp;#34;&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; access_log /var/log/nginx/access.log main;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; error_log /var/log/nginx/error.log warn;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="resource-limits"&gt;
Resource Limits
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#resource-limits" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Resource Limits" href="#resource-limits"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;500m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512Mi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2000m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="use-cases"&gt;
Use Cases
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#use-cases" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Use Cases" href="#use-cases"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-llm-inference-routing"&gt;
1. LLM Inference Routing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#1-llm-inference-routing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. LLM Inference Routing" href="#1-llm-inference-routing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Gateway Fabric 2.2 excels at routing traffic to LLM inference services:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;llm-api-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;llm-api.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/v1/chat&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;InferencePolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chat-inference&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chat-llm-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;70&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;chat-llm-service-gpu&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/v1/completions&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;InferencePolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;completion-inference&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;completion-llm-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-multi-tenant-api-gateway"&gt;
2. Multi-Tenant API Gateway
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#2-multi-tenant-api-gateway" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Multi-Tenant API Gateway" href="#2-multi-tenant-api-gateway"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Gateway for tenant isolation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowedRoutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Selector&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tenant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Tenant-specific route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tenant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;tenant-a.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-ab-testing-and-canary-deployments"&gt;
3. A/B Testing and Canary Deployments
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#3-ab-testing-and-canary-deployments" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. A/B Testing and Canary Deployments" href="#3-ab-testing-and-canary-deployments"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ab-test-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# A/B test based on header&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;x-test-variant&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;variant-a-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;x-test-variant&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;variant-b-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Default: weighted canary&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;stable-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-api-versioning"&gt;
4. API Versioning
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#4-api-versioning" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. API Versioning" href="#4-api-versioning"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-versioning&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;api.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# v2 API - latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-v2-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# v1 API - legacy support&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-v1-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Default routing&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RequestRedirect&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requestRedirect&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;docs.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ReplaceFullPath&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replaceFullPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/api/v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;301&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="performance-and-scalability"&gt;
Performance and Scalability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#performance-and-scalability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance and Scalability" href="#performance-and-scalability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="performance-characteristics"&gt;
Performance Characteristics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#performance-characteristics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Characteristics" href="#performance-characteristics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Gateway Fabric 2.2 delivers exceptional performance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High Throughput&lt;/strong&gt;: Handles millions of requests per second&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low Latency&lt;/strong&gt;: Sub-millisecond request processing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficient Resource Usage&lt;/strong&gt;: Minimal CPU and memory footprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection Handling&lt;/strong&gt;: Supports hundreds of thousands of concurrent connections&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="horizontal-scaling"&gt;
Horizontal Scaling
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#horizontal-scaling" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Horizontal Scaling" href="#horizontal-scaling"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RollingUpdate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rollingUpdate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxSurge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxUnavailable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;500m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512Mi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2000m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="load-balancing-strategies"&gt;
Load Balancing Strategies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#load-balancing-strategies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Load Balancing Strategies" href="#load-balancing-strategies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;LoadBalancingPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;lb-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;least_connections&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;healthChecks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;5s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unhealthyThreshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;healthyThreshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="integration-with-kubernetes-ecosystem"&gt;
Integration with Kubernetes Ecosystem
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#integration-with-kubernetes-ecosystem" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Integration with Kubernetes Ecosystem" href="#integration-with-kubernetes-ecosystem"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="cert-manager-integration"&gt;
cert-manager Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#cert-manager-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor cert-manager Integration" href="#cert-manager-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cert-manager.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Certificate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cert-manager&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secretName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example-tls&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;issuerRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;letsencrypt-prod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterIssuer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dnsNames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Terminate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cert-manager&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="prometheus-and-grafana"&gt;
Prometheus and Grafana
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#prometheus-and-grafana" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Prometheus and Grafana" href="#prometheus-and-grafana"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;monitoring.coreos.com/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ServiceMonitor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="best-practices"&gt;
Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Best Practices" href="#best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-gateway-organization"&gt;
1. Gateway Organization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#1-gateway-organization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Gateway Organization" href="#1-gateway-organization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Organize Gateways by purpose and environment:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Production Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;prod-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Staging Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;staging-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;staging&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-resource-naming"&gt;
2. Resource Naming
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#2-resource-naming" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Resource Naming" href="#2-resource-naming"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Use consistent naming conventions:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Pattern: &amp;lt;app&amp;gt;-&amp;lt;environment&amp;gt;-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;webapp-prod-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;prod-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-security-hardening"&gt;
3. Security Hardening
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#3-security-hardening" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Security Hardening" href="#3-security-hardening"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secure-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Terminate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway.nginx.org/ssl-ciphers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;HIGH:!aNULL:!MD5&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway.nginx.org/ssl-protocols&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;TLSv1.2 TLSv1.3&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tls-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="migration-from-nginx-ingress-controller"&gt;
Migration from NGINX Ingress Controller
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#migration-from-nginx-ingress-controller" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Migration from NGINX Ingress Controller" href="#migration-from-nginx-ingress-controller"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;For organizations migrating from NGINX Ingress Controller:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Install Gateway Fabric&lt;/strong&gt;: Deploy alongside existing Ingress Controller&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create Gateway Resources&lt;/strong&gt;: Set up Gateway instances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convert Ingress to HTTPRoute&lt;/strong&gt;: Migrate routes gradually&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test Thoroughly&lt;/strong&gt;: Validate functionality&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Switch Traffic&lt;/strong&gt;: Gradually shift traffic&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remove Ingress Controller&lt;/strong&gt;: Once migration is complete&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-gateway-fabric-modern-kubernetes-networking/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;NGINX Gateway Fabric 2.2 represents a significant advancement in Kubernetes application delivery, particularly with its support for modern workloads like LLM inference. The combination of NGINX&amp;rsquo;s proven data plane with Gateway API standards provides organizations with a powerful, flexible, and future-proof solution for managing ingress traffic.&lt;/p&gt;
&lt;p&gt;Key highlights of Gateway Fabric 2.2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LLM Inference Support&lt;/strong&gt;: Gateway API Inference Extension for AI/ML workloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenShift Integration&lt;/strong&gt;: Enhanced support for Red Hat OpenShift&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced Traffic Management&lt;/strong&gt;: Sophisticated routing and load balancing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Enhancements&lt;/strong&gt;: mTLS, WAF, and comprehensive security features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability&lt;/strong&gt;: Rich metrics and distributed tracing support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Production Ready&lt;/strong&gt;: Battle-tested and optimized for scale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As organizations continue to adopt modern application patterns and migrate from traditional Ingress controllers, NGINX Gateway Fabric 2.2 provides a compelling solution that combines the best of both worlds: NGINX&amp;rsquo;s performance and reliability with Gateway API&amp;rsquo;s flexibility and standardization.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about NGINX Gateway Fabric 2.2, visit the &lt;a
class="gblog-markdown__link"
href="https://github.com/nginxinc/nginx-gateway-fabric"
&gt;NGINX Gateway Fabric documentation&lt;/a&gt; and &lt;a
class="gblog-markdown__link"
href="https://www.nginx.com/blog/"
&gt;NGINX blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/nginx" term="nginx" label="nginx"/><category scheme="https://k8s-ops.net/tags/gateway-api" term="gateway-api" label="gateway-api"/><category scheme="https://k8s-ops.net/tags/networking" term="networking" label="networking"/><category scheme="https://k8s-ops.net/tags/application-delivery" term="application-delivery" label="application-delivery"/><category scheme="https://k8s-ops.net/tags/llm" term="llm" label="llm"/><category scheme="https://k8s-ops.net/tags/inference" term="inference" label="inference"/></entry><entry><title>NGINX Ingress Controller Deprecation: Complete Migration Guide to Gateway API</title><link href="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/</id><published>2025-11-20T00:00:00+00:00</published><updated>2025-12-07T16:51:08-05:00</updated><content type="html">
&lt;p&gt;The Cloud Native Computing Foundation (CNCF) has announced the deprecation of the NGINX Ingress Controller project, with official support ending in March 2026. This significant announcement marks a turning point in Kubernetes networking, as the community transitions from the traditional Ingress API to the more modern and powerful Gateway API. Organizations using NGINX Ingress Controller need to understand the implications and plan their migration to Gateway API implementations.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="understanding-the-deprecation"&gt;
Understanding the Deprecation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#understanding-the-deprecation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Understanding the Deprecation" href="#understanding-the-deprecation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="why-the-deprecation"&gt;
Why the Deprecation?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#why-the-deprecation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Why the Deprecation?" href="#why-the-deprecation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The NGINX Ingress Controller deprecation stems from several factors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Maintenance Burden&lt;/strong&gt;: Keeping up with Kubernetes changes and security patches&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Limited Capabilities&lt;/strong&gt;: The Ingress API&amp;rsquo;s limitations restrict advanced networking features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Concerns&lt;/strong&gt;: Ongoing security maintenance challenges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem Evolution&lt;/strong&gt;: The industry&amp;rsquo;s shift toward Gateway API standards&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Allocation&lt;/strong&gt;: Community resources better focused on Gateway API implementations&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="timeline-and-support"&gt;
Timeline and Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#timeline-and-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Timeline and Support" href="#timeline-and-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deprecation Announced&lt;/strong&gt;: September 2025&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Final Release&lt;/strong&gt;: December 2025&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;End of Life&lt;/strong&gt;: March 2026&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Updates&lt;/strong&gt;: Critical security patches through March 2026&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No New Features&lt;/strong&gt;: No new feature development after deprecation announcement&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="gateway-api-the-path-forward"&gt;
Gateway API: The Path Forward
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#gateway-api-the-path-forward" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Gateway API: The Path Forward" href="#gateway-api-the-path-forward"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The Gateway API represents the evolution of Kubernetes ingress, designed to address Ingress API limitations:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="key-advantages"&gt;
Key Advantages
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#key-advantages" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Advantages" href="#key-advantages"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Role-Oriented Design&lt;/strong&gt;: Better separation of concerns across infrastructure, operators, and developers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced Routing&lt;/strong&gt;: Header-based, query parameter, and method-based routing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-Namespace Support&lt;/strong&gt;: Native support for routing across namespaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type Safety&lt;/strong&gt;: Better validation and error handling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensibility&lt;/strong&gt;: Standard extension points for vendor-specific features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portability&lt;/strong&gt;: Works across different implementations and cloud providers&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="nginx-gateway-fabric"&gt;
NGINX Gateway Fabric
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#nginx-gateway-fabric" class="gblog-post__anchor clip flex align-center" aria-label="Anchor NGINX Gateway Fabric" href="#nginx-gateway-fabric"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;NGINX&amp;rsquo;s official Gateway API implementation, NGINX Gateway Fabric, provides a seamless path for NGINX Ingress users:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NGINX Data Plane&lt;/strong&gt;: Leverages proven NGINX technology&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gateway API Compliant&lt;/strong&gt;: Full implementation of Gateway API specifications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Production Ready&lt;/strong&gt;: Battle-tested in production environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature Parity&lt;/strong&gt;: Many features from NGINX Ingress plus Gateway API enhancements&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="migration-strategy"&gt;
Migration Strategy
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#migration-strategy" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Migration Strategy" href="#migration-strategy"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="phase-1-assessment-and-planning"&gt;
Phase 1: Assessment and Planning
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#phase-1-assessment-and-planning" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Phase 1: Assessment and Planning" href="#phase-1-assessment-and-planning"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="1-inventory-current-ingress-resources"&gt;
1. Inventory Current Ingress Resources
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#1-inventory-current-ingress-resources" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Inventory Current Ingress Resources" href="#1-inventory-current-ingress-resources"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Document all current Ingress resources:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all Ingress resources across all namespaces&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get ingress --all-namespaces -o wide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Export configurations&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get ingress --all-namespaces -o yaml &amp;gt; ingress-backup.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Identify annotations and custom configurations&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get ingress --all-namespaces -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{range .items[*]}{.metadata.name}{&amp;#34;\t&amp;#34;}{.metadata.namespace}{&amp;#34;\t&amp;#34;}{.metadata.annotations}{&amp;#34;\n&amp;#34;}{end}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="2-analyze-dependencies"&gt;
2. Analyze Dependencies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#2-analyze-dependencies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Analyze Dependencies" href="#2-analyze-dependencies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Identify dependencies and integrations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: Prometheus, Grafana integrations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Certificate Management&lt;/strong&gt;: cert-manager, Let&amp;rsquo;s Encrypt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service Mesh&lt;/strong&gt;: Istio, Linkerd integrations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Configurations&lt;/strong&gt;: NGINX-specific annotations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load Balancing&lt;/strong&gt;: Session affinity, health checks&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="3-choose-gateway-api-implementation"&gt;
3. Choose Gateway API Implementation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#3-choose-gateway-api-implementation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Choose Gateway API Implementation" href="#3-choose-gateway-api-implementation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Select a Gateway API implementation:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NGINX Gateway Fabric&lt;/strong&gt; (Recommended for NGINX users):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Direct migration path from NGINX Ingress&lt;/li&gt;
&lt;li&gt;Familiar NGINX features and behaviors&lt;/li&gt;
&lt;li&gt;Proven NGINX data plane&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Istio Gateway&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full service mesh integration&lt;/li&gt;
&lt;li&gt;Advanced traffic management&lt;/li&gt;
&lt;li&gt;Multi-cluster support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Kong Gateway&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rich plugin ecosystem&lt;/li&gt;
&lt;li&gt;Advanced API management features&lt;/li&gt;
&lt;li&gt;Enterprise features&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Envoy Gateway&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vendor-neutral implementation&lt;/li&gt;
&lt;li&gt;High performance&lt;/li&gt;
&lt;li&gt;CNCF project&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="phase-2-gateway-api-setup"&gt;
Phase 2: Gateway API Setup
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#phase-2-gateway-api-setup" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Phase 2: Gateway API Setup" href="#phase-2-gateway-api-setup"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="install-nginx-gateway-fabric"&gt;
Install NGINX Gateway Fabric
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#install-nginx-gateway-fabric" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Install NGINX Gateway Fabric" href="#install-nginx-gateway-fabric"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add NGINX Gateway Fabric Helm repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add nginx-gateway-fabric https://nginxinc.github.io/nginx-gateway-fabric-helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install NGINX Gateway Fabric&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install nginx-gateway-fabric nginx-gateway-fabric/nginx-gateway-fabric &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --namespace nginx-gateway &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --create-namespace &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --set deployment.image.repository&lt;span class="o"&gt;=&lt;/span&gt;nginx/nginx-gateway-fabric &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --set deployment.image.tag&lt;span class="o"&gt;=&lt;/span&gt;latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Verify installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -n nginx-gateway
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get gatewayclass
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="create-gatewayclass"&gt;
Create GatewayClass
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#create-gatewayclass" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Create GatewayClass" href="#create-gatewayclass"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GatewayClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;controllerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/gateway-controller&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NGINX Gateway Fabric for production use&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="create-gateway-instance"&gt;
Create Gateway Instance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#create-gateway-instance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Create Gateway Instance" href="#create-gateway-instance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowedRoutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;All&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowedRoutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;All&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Terminate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-tls-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cert-manager&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="phase-3-migration-execution"&gt;
Phase 3: Migration Execution
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#phase-3-migration-execution" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Phase 3: Migration Execution" href="#phase-3-migration-execution"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="convert-simple-ingress-to-httproute"&gt;
Convert Simple Ingress to HTTPRoute
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#convert-simple-ingress-to-httproute" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Convert Simple Ingress to HTTPRoute" href="#convert-simple-ingress-to-httproute"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Original Ingress:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes.io/ingress.class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cert-manager.io/cluster-issuer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;letsencrypt-prod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;www.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secretName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example-tls&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pathType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Prefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;www.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pathType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Prefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Converted HTTPRoute:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;www.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="handle-nginx-specific-annotations"&gt;
Handle NGINX-Specific Annotations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#handle-nginx-specific-annotations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Handle NGINX-Specific Annotations" href="#handle-nginx-specific-annotations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Many NGINX Ingress annotations have Gateway API equivalents:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rate Limiting:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# NGINX Ingress Annotation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/limit-rps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;100&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Gateway API Equivalent (using NGINX Gateway Fabric extension)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rate-limited-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RateLimitPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rate-limit-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RateLimitPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rate-limit-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;period&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;SSL Redirect:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# NGINX Ingress Annotation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/ssl-redirect&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Gateway API - Use HTTPS listener with redirect filter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;redirect-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RequestRedirect&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requestRedirect&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;301&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Path Rewriting:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# NGINX Ingress Annotation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/rewrite-target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/$1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Gateway API Equivalent&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rewrite-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/api/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;URLRewrite&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;urlRewrite&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ReplacePrefixMatch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replacePrefixMatch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;CORS Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# NGINX Ingress Annotations&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/enable-cors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/cors-allow-origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Gateway API Extension (NGINX Gateway Fabric)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cors-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ExtensionRef&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensionRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;CORSPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cors-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;CORSPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cors-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowOrigins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowMethods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;GET&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;POST&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;PUT&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;DELETE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowHeaders&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="phase-4-advanced-migrations"&gt;
Phase 4: Advanced Migrations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#phase-4-advanced-migrations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Phase 4: Advanced Migrations" href="#phase-4-advanced-migrations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="session-affinity"&gt;
Session Affinity
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#session-affinity" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Session Affinity" href="#session-affinity"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# NGINX Ingress Annotation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/affinity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cookie&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/session-cookie-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;route&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/session-cookie-expires&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;172800&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/session-cookie-max-age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;172800&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Gateway API - Use Service with sessionAffinity&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sessionAffinity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClientIP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sessionAffinityConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clientIP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeoutSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10800&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="canary-deployments"&gt;
Canary Deployments
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#canary-deployments" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Canary Deployments" href="#canary-deployments"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# NGINX Ingress Canary Annotations&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/canary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nginx.ingress.kubernetes.io/canary-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Gateway API - Native Traffic Splitting&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;stable-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="header-based-routing"&gt;
Header-Based Routing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#header-based-routing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Header-Based Routing" href="#header-based-routing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Gateway API provides native header matching&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;header-routing&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;x-api-version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-v2-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;x-api-version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-v1-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="phase-5-testing-and-validation"&gt;
Phase 5: Testing and Validation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#phase-5-testing-and-validation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Phase 5: Testing and Validation" href="#phase-5-testing-and-validation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="testing-strategy"&gt;
Testing Strategy
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#testing-strategy" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Testing Strategy" href="#testing-strategy"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Parallel Deployment&lt;/strong&gt;: Run both Ingress and Gateway API in parallel&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traffic Splitting&lt;/strong&gt;: Gradually shift traffic to Gateway API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: Compare metrics and performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation&lt;/strong&gt;: Verify all functionality works correctly&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Gradual traffic migration&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;migration-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Keep old Ingress service initially&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ingress-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Route to new Gateway API&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="validation-checklist"&gt;
Validation Checklist
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#validation-checklist" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Validation Checklist" href="#validation-checklist"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; All routes working correctly&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; TLS/SSL certificates functioning&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Load balancing working as expected&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Session affinity maintained (if used)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Rate limiting applied correctly&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Monitoring and metrics collected&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Performance meets or exceeds previous setup&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Security policies enforced&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="certificate-management-migration"&gt;
Certificate Management Migration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#certificate-management-migration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Certificate Management Migration" href="#certificate-management-migration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="cert-manager-integration"&gt;
cert-manager Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#cert-manager-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor cert-manager Integration" href="#cert-manager-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;cert-manager works seamlessly with Gateway API:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Certificate resource (same as before)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cert-manager.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Certificate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example-tls&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cert-manager&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secretName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example-tls&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;issuerRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;letsencrypt-prod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterIssuer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dnsNames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;www.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Reference in Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Terminate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example-tls&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cert-manager&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="monitoring-and-observability"&gt;
Monitoring and Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#monitoring-and-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Monitoring and Observability" href="#monitoring-and-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="metrics-collection"&gt;
Metrics Collection
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#metrics-collection" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Metrics Collection" href="#metrics-collection"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;NGINX Gateway Fabric exposes Prometheus metrics:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9113&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9113&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Prometheus scraping configuration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ServiceMonitor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway-fabric&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="logging"&gt;
Logging
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#logging" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Logging" href="#logging"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Gateway API implementations provide structured logging compatible with existing log aggregation systems.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="rollback-plan"&gt;
Rollback Plan
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#rollback-plan" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Rollback Plan" href="#rollback-plan"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="if-issues-arise"&gt;
If Issues Arise
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#if-issues-arise" class="gblog-post__anchor clip flex align-center" aria-label="Anchor If Issues Arise" href="#if-issues-arise"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Keep Ingress Resources&lt;/strong&gt;: Don&amp;rsquo;t delete old Ingress resources immediately&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traffic Redirection&lt;/strong&gt;: Switch traffic back to Ingress controller&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Investigate Issues&lt;/strong&gt;: Debug Gateway API configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix and Retry&lt;/strong&gt;: Correct issues and migrate again&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Switch traffic back to Ingress&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl scale deployment nginx-gateway-fabric --replicas&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; -n nginx-gateway
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl scale deployment ingress-nginx-controller --replicas&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt; -n ingress-nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="best-practices"&gt;
Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Best Practices" href="#best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-namespace-organization"&gt;
1. Namespace Organization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#1-namespace-organization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Namespace Organization" href="#1-namespace-organization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Organize Gateway resources logically:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Infrastructure namespace for Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;shared-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;infrastructure&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Application namespace for HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;applications&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;shared-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;infrastructure&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-reference-grants-for-cross-namespace"&gt;
2. Reference Grants for Cross-Namespace
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#2-reference-grants-for-cross-namespace" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Reference Grants for Cross-Namespace" href="#2-reference-grants-for-cross-namespace"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Enable secure cross-namespace references:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ReferenceGrant&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;allow-apps-to-infra&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;infrastructure&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;applications&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-gradual-migration"&gt;
3. Gradual Migration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#3-gradual-migration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Gradual Migration" href="#3-gradual-migration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Migrate namespace by namespace:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start with non-critical applications&lt;/li&gt;
&lt;li&gt;Validate thoroughly&lt;/li&gt;
&lt;li&gt;Gradually migrate production workloads&lt;/li&gt;
&lt;li&gt;Monitor performance and stability&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="common-challenges-and-solutions"&gt;
Common Challenges and Solutions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#common-challenges-and-solutions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Common Challenges and Solutions" href="#common-challenges-and-solutions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="challenge-1-complex-annotations"&gt;
Challenge 1: Complex Annotations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#challenge-1-complex-annotations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Challenge 1: Complex Annotations" href="#challenge-1-complex-annotations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: Extensive use of NGINX-specific annotations&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Map annotations to Gateway API features or use implementation-specific extensions&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="challenge-2-custom-configurations"&gt;
Challenge 2: Custom Configurations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#challenge-2-custom-configurations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Challenge 2: Custom Configurations" href="#challenge-2-custom-configurations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: Custom NGINX configurations not directly supported&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Use Gateway API extension mechanisms or implementation-specific features&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="challenge-3-third-party-integrations"&gt;
Challenge 3: Third-Party Integrations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#challenge-3-third-party-integrations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Challenge 3: Third-Party Integrations" href="#challenge-3-third-party-integrations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: Tools expecting NGINX Ingress format&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Update tools to support Gateway API or use translation layers&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="resources-and-support"&gt;
Resources and Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#resources-and-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Resources and Support" href="#resources-and-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="documentation"&gt;
Documentation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#documentation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Documentation" href="#documentation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a
class="gblog-markdown__link"
href="https://gateway-api.sigs.k8s.io/"
&gt;Gateway API Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/nginxinc/nginx-gateway-fabric"
&gt;NGINX Gateway Fabric Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
class="gblog-markdown__link"
href="https://gateway-api.sigs.k8s.io/guides/migration/"
&gt;Migration Guides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="community-support"&gt;
Community Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#community-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Support" href="#community-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.slack.com/messages/gateway-api"
&gt;Kubernetes Gateway API Slack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/kubernetes-sigs/gateway-api/discussions"
&gt;GitHub Discussions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/cncf/tag-network/issues"
&gt;CNCF Forums&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-ingress-deprecation-gateway-api-migration-guide/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The deprecation of NGINX Ingress Controller marks an important transition in Kubernetes networking. While this change requires migration effort, it presents an opportunity to adopt more powerful, standardized, and future-proof networking solutions.&lt;/p&gt;
&lt;p&gt;Key takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plan Early&lt;/strong&gt;: Start migration planning well before March 2026&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose Implementation&lt;/strong&gt;: Select a Gateway API implementation that fits your needs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gradual Migration&lt;/strong&gt;: Migrate gradually with proper testing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leverage Advantages&lt;/strong&gt;: Take advantage of Gateway API&amp;rsquo;s enhanced capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stay Informed&lt;/strong&gt;: Follow Gateway API development and best practices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Gateway API ecosystem is mature, well-supported, and ready for production use. Organizations that migrate successfully will benefit from better security, more advanced features, and a more maintainable networking infrastructure.&lt;/p&gt;
&lt;p&gt;The transition from NGINX Ingress Controller to Gateway API represents progress in Kubernetes networking, and with proper planning and execution, organizations can make this transition smoothly while gaining significant advantages in the process.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about Gateway API migration, visit the &lt;a
class="gblog-markdown__link"
href="https://gateway-api.sigs.k8s.io/"
&gt;official Gateway API documentation&lt;/a&gt; and &lt;a
class="gblog-markdown__link"
href="https://github.com/nginxinc/nginx-gateway-fabric"
&gt;NGINX Gateway Fabric repository&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/nginx" term="nginx" label="nginx"/><category scheme="https://k8s-ops.net/tags/ingress" term="ingress" label="ingress"/><category scheme="https://k8s-ops.net/tags/gateway-api" term="gateway-api" label="gateway-api"/><category scheme="https://k8s-ops.net/tags/migration" term="migration" label="migration"/><category scheme="https://k8s-ops.net/tags/deprecation" term="deprecation" label="deprecation"/><category scheme="https://k8s-ops.net/tags/cloud-native" term="cloud-native" label="cloud-native"/></entry><entry><title>Kubernetes v1.35 Release Cycle Kicks Off: What to Expect</title><link href="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/</id><published>2025-11-01T00:00:00+00:00</published><updated>2025-12-07T16:51:08-05:00</updated><content type="html">
&lt;p&gt;The Kubernetes community has officially kicked off the v1.35 release cycle, scheduled for release in December 2025. This release cycle marks another milestone in Kubernetes&amp;rsquo; evolution, with the development phase beginning in September 2025 and key milestones already approaching. The v1.35 release is expected to bring significant enhancements across performance, security, and developer experience.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="release-timeline"&gt;
Release Timeline
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#release-timeline" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Timeline" href="#release-timeline"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="key-milestones"&gt;
Key Milestones
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#key-milestones" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Milestones" href="#key-milestones"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.35 release follows the established Kubernetes release cadence:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhancement Proposals Due&lt;/strong&gt;: September 15, 2025&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhancements Freeze&lt;/strong&gt;: October 17, 2025&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Freeze&lt;/strong&gt;: November 7, 2025&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release Candidates&lt;/strong&gt;: Late November - Early December 2025&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;General Availability&lt;/strong&gt;: December 17, 2025 (tentative)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="release-team"&gt;
Release Team
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#release-team" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Team" href="#release-team"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.35 release team is led by experienced community members from across the Kubernetes ecosystem, coordinating efforts across multiple Special Interest Groups (SIGs) and organizations.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="expected-major-features"&gt;
Expected Major Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#expected-major-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Expected Major Features" href="#expected-major-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enhanced-scheduling-capabilities"&gt;
1. Enhanced Scheduling Capabilities
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#1-enhanced-scheduling-capabilities" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced Scheduling Capabilities" href="#1-enhanced-scheduling-capabilities"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Kubernetes scheduler continues to receive significant improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="advanced-scheduling-algorithms"&gt;
Advanced Scheduling Algorithms
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#advanced-scheduling-algorithms" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Advanced Scheduling Algorithms" href="#advanced-scheduling-algorithms"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-dimensional Resource Scheduling&lt;/strong&gt;: Better consideration of CPU, memory, storage, and network resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost-aware Scheduling&lt;/strong&gt;: Consideration of resource costs in scheduling decisions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Energy-efficient Placement&lt;/strong&gt;: Optimization for reduced power consumption&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network-aware Scheduling&lt;/strong&gt;: Better consideration of network topology and latency&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="dynamic-scheduling-enhancements"&gt;
Dynamic Scheduling Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#dynamic-scheduling-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Dynamic Scheduling Enhancements" href="#dynamic-scheduling-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;scheduled-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schedulerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default-scheduler&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;affinity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeAffinity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preferredDuringSchedulingIgnoredDuringExecution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preference&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchExpressions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;node-cost&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;In&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;low-cost&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preference&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchExpressions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;network-region&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;In&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;same-region&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-security-enhancements"&gt;
2. Security Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#2-security-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Security Enhancements" href="#2-security-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Security continues to be a top priority with several enhancements planned:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="enhanced-pod-security"&gt;
Enhanced Pod Security
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#enhanced-pod-security" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Enhanced Pod Security" href="#enhanced-pod-security"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improved Pod Security Standards&lt;/strong&gt;: More granular security policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context-aware Security&lt;/strong&gt;: Security decisions based on workload context&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Security Context&lt;/strong&gt;: Better integration with security frameworks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime Security&lt;/strong&gt;: Improved container runtime security features&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="network-security-improvements"&gt;
Network Security Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#network-security-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Network Security Improvements" href="#network-security-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advanced Network Policies&lt;/strong&gt;: Enhanced network policy capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Micro-segmentation&lt;/strong&gt;: Granular network security policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero Trust Integration&lt;/strong&gt;: Better support for zero trust architectures&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encrypted Communication&lt;/strong&gt;: Enhanced encryption for inter-component communication&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-observability-improvements"&gt;
3. Observability Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#3-observability-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Observability Improvements" href="#3-observability-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Observability features are expected to receive major updates:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="structured-logging-enhancements"&gt;
Structured Logging Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#structured-logging-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Structured Logging Enhancements" href="#structured-logging-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Building on the structured logging introduced in v1.30:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;level&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;info&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2025-11-01T10:30:00Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;component&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kube-scheduler&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Pod scheduled successfully&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;pod&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;nginx-deployment-abc123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;node&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;worker-node-1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;scheduling_duration_ms&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;15.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;resource_requirements&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;cpu&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;100m&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;memory&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;128Mi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;affinity_decisions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;preferred&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;required&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="enhanced-metrics"&gt;
Enhanced Metrics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#enhanced-metrics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Enhanced Metrics" href="#enhanced-metrics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom Metrics API&lt;/strong&gt;: Better support for custom metrics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Metrics&lt;/strong&gt;: More detailed performance metrics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Utilization&lt;/strong&gt;: Enhanced resource utilization tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost Metrics&lt;/strong&gt;: Cost-related metrics for resource optimization&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-storage-improvements"&gt;
4. Storage Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#4-storage-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Storage Improvements" href="#4-storage-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Storage capabilities are expected to receive enhancements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="advanced-volume-management"&gt;
Advanced Volume Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#advanced-volume-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Advanced Volume Management" href="#advanced-volume-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Volume Snapshots&lt;/strong&gt;: Enhanced snapshot capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Provisioning&lt;/strong&gt;: Improved dynamic storage provisioning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Capacity Tracking&lt;/strong&gt;: More accurate storage capacity management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-attach Volumes&lt;/strong&gt;: Better support for shared storage&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="csi-driver-enhancements"&gt;
CSI Driver Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#csi-driver-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor CSI Driver Enhancements" href="#csi-driver-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;storage.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;StorageClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fast-ssd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;provisioner&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;csi-driver.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ssd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;iops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3000&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replication&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;allowVolumeExpansion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;volumeBindingMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;WaitForFirstConsumer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="5-api-enhancements"&gt;
5. API Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#5-api-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. API Enhancements" href="#5-api-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Kubernetes API continues to evolve:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="api-improvements"&gt;
API Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#api-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor API Improvements" href="#api-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Validation&lt;/strong&gt;: Better API validation and error messages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Performance&lt;/strong&gt;: Improved API server performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backward Compatibility&lt;/strong&gt;: Continued focus on backward compatibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Versioning&lt;/strong&gt;: Better API version management&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="custom-resource-definitions"&gt;
Custom Resource Definitions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#custom-resource-definitions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Custom Resource Definitions" href="#custom-resource-definitions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Enhanced CRD capabilities:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apiextensions.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;CustomResourceDefinition&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;applications.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;versions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;served&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openAPIV3Schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;object&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;object&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;x-kubernetes-validations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;rule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;self.replicas &amp;gt; 0&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;replicas must be greater than 0&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="beta-features-moving-forward"&gt;
Beta Features Moving Forward
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#beta-features-moving-forward" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Beta Features Moving Forward" href="#beta-features-moving-forward"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-gateway-api-integration"&gt;
1. Gateway API Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#1-gateway-api-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Gateway API Integration" href="#1-gateway-api-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Gateway API support continues to mature:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stable HTTPRoute&lt;/strong&gt;: Enhanced HTTPRoute capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLSRoute Improvements&lt;/strong&gt;: Better TLS routing support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-namespace Routing&lt;/strong&gt;: Enhanced cross-namespace capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traffic Management&lt;/strong&gt;: Advanced traffic splitting and mirroring&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-enhanced-rbac"&gt;
2. Enhanced RBAC
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#2-enhanced-rbac" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Enhanced RBAC" href="#2-enhanced-rbac"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Role-Based Access Control improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conditional RBAC&lt;/strong&gt;: Context-aware authorization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fine-grained Permissions&lt;/strong&gt;: More granular access control&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Policy Evaluation&lt;/strong&gt;: Real-time policy enforcement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Enhancements&lt;/strong&gt;: Comprehensive security event tracking&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-resource-management"&gt;
3. Resource Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#3-resource-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Resource Management" href="#3-resource-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Resource management enhancements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Resource Allocation&lt;/strong&gt;: Better resource sharing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU Management&lt;/strong&gt;: Enhanced GPU resource allocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Optimization&lt;/strong&gt;: Improved memory management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network Resource Management&lt;/strong&gt;: Advanced network resource allocation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="alpha-features-to-watch"&gt;
Alpha Features to Watch
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#alpha-features-to-watch" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Alpha Features to Watch" href="#alpha-features-to-watch"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-webassembly-support"&gt;
1. WebAssembly Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#1-webassembly-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. WebAssembly Support" href="#1-webassembly-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;WebAssembly support continues to evolve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance Improvements&lt;/strong&gt;: Better Wasm runtime performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Enhancements&lt;/strong&gt;: Enhanced Wasm sandboxing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;: Better debugging and monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem Integration&lt;/strong&gt;: Improved toolchain integration&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-edge-computing"&gt;
2. Edge Computing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#2-edge-computing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Edge Computing" href="#2-edge-computing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Edge computing features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lightweight Components&lt;/strong&gt;: Optimized for edge devices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline Operation&lt;/strong&gt;: Better support for intermittent connectivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local Processing&lt;/strong&gt;: Reduced dependency on centralized resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-cluster Management&lt;/strong&gt;: Coordinated edge deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-aiml-workload-support"&gt;
3. AI/ML Workload Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#3-aiml-workload-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. AI/ML Workload Support" href="#3-aiml-workload-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Enhanced AI/ML capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model Serving&lt;/strong&gt;: Better ML model deployment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Training Optimization&lt;/strong&gt;: Enhanced training workload management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Scheduling&lt;/strong&gt;: AI/ML-aware resource allocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: Specialized monitoring for ML workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="performance-improvements"&gt;
Performance Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#performance-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Improvements" href="#performance-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="scheduler-performance"&gt;
Scheduler Performance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#scheduler-performance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Scheduler Performance" href="#scheduler-performance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The scheduler is expected to receive performance improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Algorithms&lt;/strong&gt;: Improved scheduling algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallel Processing&lt;/strong&gt;: Better utilization of multiple cores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Efficiency&lt;/strong&gt;: Reduced memory footprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Better performance at scale&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="api-server-optimizations"&gt;
API Server Optimizations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#api-server-optimizations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor API Server Optimizations" href="#api-server-optimizations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;API server performance enhancements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduced Latency&lt;/strong&gt;: Faster request processing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Caching&lt;/strong&gt;: Enhanced caching mechanisms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection Optimization&lt;/strong&gt;: Improved connection pooling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Efficiency&lt;/strong&gt;: Lower resource consumption&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="etcd-optimizations"&gt;
etcd Optimizations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#etcd-optimizations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor etcd Optimizations" href="#etcd-optimizations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;etcd, the backing store, receives optimizations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Storage Efficiency&lt;/strong&gt;: More efficient data storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster Operations&lt;/strong&gt;: Improved read and write performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Compression&lt;/strong&gt;: Enhanced data compression&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Reliability&lt;/strong&gt;: Better fault tolerance&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="deprecations-and-removals"&gt;
Deprecations and Removals
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#deprecations-and-removals" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deprecations and Removals" href="#deprecations-and-removals"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="expected-deprecations"&gt;
Expected Deprecations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#expected-deprecations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Expected Deprecations" href="#expected-deprecations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Several features are expected to be deprecated in v1.35:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legacy API Versions&lt;/strong&gt;: Older API versions being phased out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated Flags&lt;/strong&gt;: Command-line flags no longer recommended&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obsolete Configurations&lt;/strong&gt;: Configuration options with better alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="planned-removals"&gt;
Planned Removals
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#planned-removals" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Planned Removals" href="#planned-removals"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Features that may be removed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unused Components&lt;/strong&gt;: Components no longer maintained&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated APIs&lt;/strong&gt;: APIs deprecated for multiple releases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy Tools&lt;/strong&gt;: Tools replaced by newer alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="development-and-testing"&gt;
Development and Testing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#development-and-testing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Development and Testing" href="#development-and-testing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="community-involvement"&gt;
Community Involvement
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#community-involvement" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Involvement" href="#community-involvement"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.35 release cycle involves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Contributors&lt;/strong&gt;: Developers from around the world&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organizations&lt;/strong&gt;: Companies of all sizes contributing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SIGs&lt;/strong&gt;: Special Interest Groups coordinating development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing&lt;/strong&gt;: Comprehensive testing across environments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="testing-priorities"&gt;
Testing Priorities
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#testing-priorities" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Testing Priorities" href="#testing-priorities"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Key testing focus areas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stability&lt;/strong&gt;: Ensuring stable releases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Validating performance improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Security testing and validation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;: Backward compatibility testing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="upgrade-considerations"&gt;
Upgrade Considerations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#upgrade-considerations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Upgrade Considerations" href="#upgrade-considerations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="pre-upgrade-preparation"&gt;
Pre-upgrade Preparation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#pre-upgrade-preparation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Pre-upgrade Preparation" href="#pre-upgrade-preparation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Organizations should prepare for v1.35 by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reviewing Deprecations&lt;/strong&gt;: Understanding what features will be deprecated&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing Applications&lt;/strong&gt;: Ensuring applications work with new features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updating Tools&lt;/strong&gt;: Updating kubectl and other client tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planning Migration&lt;/strong&gt;: Creating migration plans for deprecated features&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="upgrade-strategy"&gt;
Upgrade Strategy
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#upgrade-strategy" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Upgrade Strategy" href="#upgrade-strategy"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Recommended upgrade approach:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Review Release Notes&lt;/strong&gt;: Understand all changes and deprecations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Staging Environment&lt;/strong&gt;: Test upgrades in staging first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gradual Rollout&lt;/strong&gt;: Use rolling upgrades for production&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: Closely monitor during and after upgrades&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollback Plan&lt;/strong&gt;: Have rollback procedures ready&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-ahead"&gt;
Looking Ahead
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#looking-ahead" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Ahead" href="#looking-ahead"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="release-themes"&gt;
Release Themes
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#release-themes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Themes" href="#release-themes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.35 release focuses on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Continued performance improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Enhanced security features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Experience&lt;/strong&gt;: Better tooling and debugging&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability&lt;/strong&gt;: Improved monitoring and observability&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="future-releases"&gt;
Future Releases
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#future-releases" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Future Releases" href="#future-releases"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The community is already planning beyond v1.35:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;v1.36&lt;/strong&gt;: Scheduled for release in 2026&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long-term Roadmap&lt;/strong&gt;: Simplification, edge computing, AI/ML support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Evolution&lt;/strong&gt;: Continued growth and diversity&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-to-participate"&gt;
How to Participate
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#how-to-participate" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How to Participate" href="#how-to-participate"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="contributing"&gt;
Contributing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#contributing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Contributing" href="#contributing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Ways to contribute to v1.35:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhancement Proposals&lt;/strong&gt;: Submit enhancement proposals (before freeze date)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Contributions&lt;/strong&gt;: Contribute code to features you&amp;rsquo;re interested in&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing&lt;/strong&gt;: Help test release candidates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Improve documentation and examples&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bug Reports&lt;/strong&gt;: Report bugs and issues&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="staying-informed"&gt;
Staying Informed
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#staying-informed" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Staying Informed" href="#staying-informed"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Stay up to date with v1.35 development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Release Team&lt;/strong&gt;: Follow release team communications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SIG Meetings&lt;/strong&gt;: Attend relevant SIG meetings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: Monitor enhancement tracking issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Forums&lt;/strong&gt;: Participate in community discussions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-35-release-cycle-kicks-off/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The v1.35 release cycle represents another exciting phase in Kubernetes&amp;rsquo; evolution. With a focus on performance, security, observability, and developer experience, this release promises to bring significant improvements to the platform.&lt;/p&gt;
&lt;p&gt;Key highlights of the v1.35 release cycle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Scheduling&lt;/strong&gt;: Advanced scheduling capabilities and algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Improvements&lt;/strong&gt;: Enhanced security features and policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability&lt;/strong&gt;: Better monitoring and observability capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Continued performance optimizations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community&lt;/strong&gt;: Global collaboration and contribution&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As the release cycle progresses through enhancement freeze, code freeze, and release candidates, the community continues to work together to deliver another stable, feature-rich Kubernetes release. Organizations should monitor the development progress and begin planning for upgrades to v1.35.&lt;/p&gt;
&lt;p&gt;The v1.35 release cycle demonstrates the Kubernetes community&amp;rsquo;s commitment to continuous improvement, innovation, and stability, ensuring that Kubernetes remains the foundation of modern cloud-native computing.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For the latest information on v1.35 development, follow the &lt;a
class="gblog-markdown__link"
href="https://github.com/kubernetes/sig-release"
&gt;Kubernetes SIG-Release discussions&lt;/a&gt; and &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/community/"
&gt;community meetings&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/releases" term="releases" label="releases"/><category scheme="https://k8s-ops.net/tags/v1.35" term="v1.35" label="v1.35"/><category scheme="https://k8s-ops.net/tags/development" term="development" label="development"/><category scheme="https://k8s-ops.net/tags/features" term="features" label="features"/><category scheme="https://k8s-ops.net/tags/2025" term="2025" label="2025"/></entry><entry><title>Gateway API Reaches Stable: Production-Ready for Modern Kubernetes Networking</title><link href="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/</id><published>2025-10-15T00:00:00+00:00</published><updated>2025-12-07T16:51:08-05:00</updated><content type="html">
&lt;p&gt;The Kubernetes Gateway API has reached a significant milestone, with multiple resource types now stable and production-ready for modern Kubernetes deployments. After years of development and community feedback, the Gateway API provides a more expressive, extensible, and role-oriented approach to service networking compared to the traditional Ingress API.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="gateway-api-overview"&gt;
Gateway API Overview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#gateway-api-overview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Gateway API Overview" href="#gateway-api-overview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The Gateway API is the evolution of Kubernetes ingress, designed to address the limitations of the original Ingress resource. It provides a more powerful, flexible, and standardized way to configure networking in Kubernetes clusters.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="core-principles"&gt;
Core Principles
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#core-principles" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Core Principles" href="#core-principles"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Gateway API is built on several key principles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Role-Oriented&lt;/strong&gt;: Resources map to different personas in an organization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expressive&lt;/strong&gt;: Rich routing capabilities beyond basic path and host matching&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensible&lt;/strong&gt;: Standard extension points for vendor-specific features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portable&lt;/strong&gt;: Works across different implementations and cloud providers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type-Safe&lt;/strong&gt;: Better validation and error handling than the original Ingress&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="stable-resource-types"&gt;
Stable Resource Types
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#stable-resource-types" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Stable Resource Types" href="#stable-resource-types"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Several Gateway API resource types have reached stable (v1) status, making them production-ready:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-gatewayclass"&gt;
1. GatewayClass
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#1-gatewayclass" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. GatewayClass" href="#1-gatewayclass"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;GatewayClass defines a class of Gateways that can be instantiated, similar to StorageClass for storage.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GatewayClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;controllerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/gateway-controller&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NGINX Gateway Controller&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-gateway"&gt;
2. Gateway
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#2-gateway" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Gateway" href="#2-gateway"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Gateway describes how traffic can be translated to Services within the cluster.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowedRoutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;All&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowedRoutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;All&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Terminate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-httproute"&gt;
3. HTTPRoute
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#3-httproute" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. HTTPRoute" href="#3-httproute"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;HTTPRoute defines routing rules for HTTP/HTTPS traffic, replacing and extending Ingress functionality.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;webapp-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;www.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="key-advantages-over-ingress"&gt;
Key Advantages Over Ingress
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#key-advantages-over-ingress" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Advantages Over Ingress" href="#key-advantages-over-ingress"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-role-based-configuration"&gt;
1. Role-Based Configuration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#1-role-based-configuration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Role-Based Configuration" href="#1-role-based-configuration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Gateway API separates concerns across different roles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Infrastructure Providers&lt;/strong&gt;: Create and manage GatewayClass resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cluster Operators&lt;/strong&gt;: Provision and configure Gateway instances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application Developers&lt;/strong&gt;: Create HTTPRoute, TCPRoute, or UDPRoute resources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This separation enables better multi-tenancy and security boundaries.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-advanced-routing-capabilities"&gt;
2. Advanced Routing Capabilities
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#2-advanced-routing-capabilities" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Advanced Routing Capabilities" href="#2-advanced-routing-capabilities"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;HTTPRoute provides significantly more routing options than Ingress:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;advanced-routing&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;api.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Header-based routing&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;x-api-version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-v2-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Query parameter routing&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;queryParams&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;beta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Exact&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;beta-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Method-based routing&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;POST&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/upload&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;upload-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Request mirroring&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RequestMirror&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requestMirror&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;logging-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;main-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-traffic-splitting-and-canary-deployments"&gt;
3. Traffic Splitting and Canary Deployments
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#3-traffic-splitting-and-canary-deployments" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Traffic Splitting and Canary Deployments" href="#3-traffic-splitting-and-canary-deployments"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Built-in support for traffic splitting enables sophisticated deployment strategies:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;app.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;stable-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;canary-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-cross-namespace-routing"&gt;
4. Cross-Namespace Routing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#4-cross-namespace-routing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Cross-Namespace Routing" href="#4-cross-namespace-routing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Gateway API supports routing across namespaces, enabling better organization and isolation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cross-namespace-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;frontend&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;shared-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;infrastructure&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;app.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;backend-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;backend&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="additional-resource-types"&gt;
Additional Resource Types
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#additional-resource-types" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Additional Resource Types" href="#additional-resource-types"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Beyond HTTPRoute, the Gateway API defines other route types:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="tcproute"&gt;
TCPRoute
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#tcproute" class="gblog-post__anchor clip flex align-center" aria-label="Anchor TCPRoute" href="#tcproute"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;For TCP traffic routing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;database-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgres-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5432&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="udproute"&gt;
UDPRoute
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#udproute" class="gblog-post__anchor clip flex align-center" aria-label="Anchor UDPRoute" href="#udproute"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;For UDP traffic routing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;UDPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dns-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dns-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="tlsroute"&gt;
TLSRoute
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#tlsroute" class="gblog-post__anchor clip flex align-center" aria-label="Anchor TLSRoute" href="#tlsroute"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;For TLS passthrough:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TLSRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tls-passthrough&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;secure.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secure-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="implementation-ecosystem"&gt;
Implementation Ecosystem
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#implementation-ecosystem" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Implementation Ecosystem" href="#implementation-ecosystem"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Multiple Gateway API implementations are available and production-ready:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="nginx-gateway-fabric"&gt;
NGINX Gateway Fabric
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#nginx-gateway-fabric" class="gblog-post__anchor clip flex align-center" aria-label="Anchor NGINX Gateway Fabric" href="#nginx-gateway-fabric"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;NGINX&amp;rsquo;s implementation of the Gateway API:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install NGINX Gateway Fabric&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/nginxinc/nginx-gateway-fabric/main/deploy/manifests/install.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="istio"&gt;
Istio
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#istio" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Istio" href="#istio"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Istio provides Gateway API support alongside its service mesh:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;istio-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;istio&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="kong-gateway"&gt;
Kong Gateway
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#kong-gateway" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Kong Gateway" href="#kong-gateway"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Kong provides a full-featured Gateway API implementation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GatewayClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kong&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;controllerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;konghq.com/kic-gateway-controller&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="envoy-gateway"&gt;
Envoy Gateway
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#envoy-gateway" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Envoy Gateway" href="#envoy-gateway"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;A vendor-neutral Gateway API implementation using Envoy:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GatewayClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;envoy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;controllerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.envoyproxy.io/gatewayclass-controller&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="aws-load-balancer-controller"&gt;
AWS Load Balancer Controller
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#aws-load-balancer-controller" class="gblog-post__anchor clip flex align-center" aria-label="Anchor AWS Load Balancer Controller" href="#aws-load-balancer-controller"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;AWS provides Gateway API support through their Load Balancer Controller:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GatewayClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws-lb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;controllerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;elbv2.k8s.aws/gateway-controller&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="migration-from-ingress"&gt;
Migration from Ingress
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#migration-from-ingress" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Migration from Ingress" href="#migration-from-ingress"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="key-differences"&gt;
Key Differences
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#key-differences" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Differences" href="#key-differences"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;When migrating from Ingress to Gateway API, understand these key differences:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ingress&lt;/th&gt;
&lt;th&gt;Gateway API&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single resource type&lt;/td&gt;
&lt;td&gt;Multiple resource types (Gateway, HTTPRoute, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Namespace-scoped only&lt;/td&gt;
&lt;td&gt;Supports cross-namespace routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limited routing features&lt;/td&gt;
&lt;td&gt;Advanced routing with headers, query params, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basic traffic splitting&lt;/td&gt;
&lt;td&gt;Native weight-based splitting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limited TLS support&lt;/td&gt;
&lt;td&gt;Enhanced TLS configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor-specific annotations&lt;/td&gt;
&lt;td&gt;Standard extension points&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="migration-steps"&gt;
Migration Steps
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#migration-steps" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Migration Steps" href="#migration-steps"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Assess Current Ingress Usage&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all Ingress resources&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get ingress --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Export Ingress configurations&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get ingress -n production -o yaml &amp;gt; ingress-configs.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;Install a Gateway API Implementation&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Choose and install a Gateway API implementation that meets your needs.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;Create Gateway Resources&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Set up Gateway instances to replace Ingress controllers:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;migration-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Terminate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tls-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;&lt;strong&gt;Convert Ingress to HTTPRoute&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Translate Ingress rules to HTTPRoute resources:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Original Ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pathType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Prefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Equivalent HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-route&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;migration-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostnames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PathPrefix&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="5"&gt;
&lt;li&gt;&lt;strong&gt;Test and Validate&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Gradually migrate services and validate functionality:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Apply HTTPRoute&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f web-route.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test routing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -H &lt;span class="s2"&gt;&amp;#34;Host: example.com&amp;#34;&lt;/span&gt; http://gateway-ip/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Monitor Gateway status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get gateway -n gateway-system
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe gateway migration-gateway -n gateway-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="6"&gt;
&lt;li&gt;&lt;strong&gt;Gradual Rollout&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Use traffic splitting to gradually migrate:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gradual-migration&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parentRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;migration-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;backendRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Keep Ingress controller running initially&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ingress-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Route most traffic to Gateway API&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="best-practices"&gt;
Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Best Practices" href="#best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-use-gatewayclasses-for-multi-tenancy"&gt;
1. Use GatewayClasses for Multi-tenancy
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#1-use-gatewayclasses-for-multi-tenancy" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Use GatewayClasses for Multi-tenancy" href="#1-use-gatewayclasses-for-multi-tenancy"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Define GatewayClasses for different teams or environments:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GatewayClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;team-a-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;controllerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org/gateway-controller&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parametersRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.nginx.org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GatewayClassConfig&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;team-a-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-implement-namespace-policies"&gt;
2. Implement Namespace Policies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#2-implement-namespace-policies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Implement Namespace Policies" href="#2-implement-namespace-policies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Control which namespaces can use which Gateways:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;shared-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gatewayClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowedRoutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Selector&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway-access&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;allowed&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-use-reference-grants-for-cross-namespace"&gt;
3. Use Reference Grants for Cross-Namespace
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#3-use-reference-grants-for-cross-namespace" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Use Reference Grants for Cross-Namespace" href="#3-use-reference-grants-for-cross-namespace"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Enable secure cross-namespace references:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ReferenceGrant&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;allow-frontend-to-backend&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;backend&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPRoute&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;frontend&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-implement-proper-tls-management"&gt;
4. Implement Proper TLS Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#4-implement-proper-tls-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Implement Proper TLS Management" href="#4-implement-proper-tls-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Use proper certificate management:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway.networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secure-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listeners&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HTTPS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Terminate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;certificateRefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tls-cert&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cert-manager&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="performance-and-scalability"&gt;
Performance and Scalability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#performance-and-scalability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance and Scalability" href="#performance-and-scalability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Gateway API implementations typically offer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better Performance&lt;/strong&gt;: More efficient routing decisions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Horizontal Scalability&lt;/strong&gt;: Better support for scaling Gateway instances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Efficiency&lt;/strong&gt;: Lower resource overhead than traditional Ingress controllers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection Pooling&lt;/strong&gt;: Better connection management&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="future-developments"&gt;
Future Developments
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#future-developments" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Future Developments" href="#future-developments"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The Gateway API continues to evolve with new features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GRPCRoute&lt;/strong&gt;: Native support for gRPC routing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TCPRoute Enhancements&lt;/strong&gt;: Advanced TCP routing features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service Mesh Integration&lt;/strong&gt;: Better integration with service mesh technologies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Observability&lt;/strong&gt;: Built-in metrics and tracing support&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/gateway-api-reaches-stable-production-ready/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The Gateway API reaching stable status represents a significant milestone in Kubernetes networking. With its role-oriented design, advanced routing capabilities, and broad ecosystem support, it provides a compelling path forward for modern Kubernetes deployments.&lt;/p&gt;
&lt;p&gt;Key takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Production Ready&lt;/strong&gt;: Multiple stable resource types available&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Capabilities&lt;/strong&gt;: Significantly more powerful than traditional Ingress&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem Support&lt;/strong&gt;: Multiple implementations available&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migration Path&lt;/strong&gt;: Clear migration strategies from Ingress&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Future-Proof&lt;/strong&gt;: Active development and community support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Organizations should evaluate Gateway API implementations and plan migrations from Ingress, especially as the ecosystem continues to mature and traditional Ingress controllers face deprecation timelines.&lt;/p&gt;
&lt;p&gt;The Gateway API is not just an evolution of Ingress—it&amp;rsquo;s a fundamental improvement that enables better security, scalability, and operational practices for Kubernetes networking.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about Gateway API, visit the &lt;a
class="gblog-markdown__link"
href="https://gateway-api.sigs.k8s.io/"
&gt;official Gateway API documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://github.com/kubernetes-sigs/gateway-api"
&gt;Kubernetes Gateway API repository&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/gateway-api" term="gateway-api" label="gateway-api"/><category scheme="https://k8s-ops.net/tags/networking" term="networking" label="networking"/><category scheme="https://k8s-ops.net/tags/ingress" term="ingress" label="ingress"/><category scheme="https://k8s-ops.net/tags/cloud-native" term="cloud-native" label="cloud-native"/><category scheme="https://k8s-ops.net/tags/production" term="production" label="production"/></entry><entry><title>Top 10 Kubernetes Security Tools</title><link href="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/top-10-kubernetes-security-tools/</id><published>2025-09-20T00:00:00+00:00</published><updated>2025-07-04T14:46:07-04:00</updated><content type="html">
&lt;p&gt;Security is paramount in Kubernetes environments, where the attack surface spans containers, pods, services, and the cluster itself. The cloud-native security ecosystem has evolved to address these challenges with specialized tools for runtime protection, vulnerability scanning, policy enforcement, and compliance monitoring. Here are the top 10 Kubernetes security tools that every security-conscious organization should implement.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="1-falco---runtime-security-engine"&gt;
1. Falco - Runtime Security Engine
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#1-falco---runtime-security-engine" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Falco - Runtime Security Engine" href="#1-falco---runtime-security-engine"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Runtime security engine detecting abnormal container behavior.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Falco is the de facto standard for runtime security in Kubernetes, providing real-time threat detection and alerting based on system calls and container behavior. It&amp;rsquo;s designed to detect security threats and compliance violations in real-time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Real-time system call monitoring&lt;/li&gt;
&lt;li&gt;Customizable rules engine&lt;/li&gt;
&lt;li&gt;Container-aware security policies&lt;/li&gt;
&lt;li&gt;Integration with SIEM systems&lt;/li&gt;
&lt;li&gt;Compliance monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add falcosecurity https://falcosecurity.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install falco falcosecurity/falco
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/falcosecurity/falco/master/deploy/kubernetes/falco.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;falco-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;falco.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; rules_file:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - /etc/falco/falco_rules.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - /etc/falco/k8s_audit_rules.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; # Output configuration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; program_output:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; enabled: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; program: &amp;#34;curl -d @- -X POST http://falco-webhook:8080&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; # Webhook output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; webserver:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; enabled: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; listen_port: 9376
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; k8s_healthz_endpoint: /healthz
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; ssl_enabled: false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Sample Rules:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="nt"&gt;rule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Unauthorized Process&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Detect unauthorized processes running in containers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;spawned_process and container and not proc.name in (authorized_processes)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Unauthorized process started (user=%user.name command=%proc.cmdline container=%container.name)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;WARNING&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://falco.org/"
&gt;Learn more about Falco&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="2-kube-bench---cis-benchmark-scanner"&gt;
2. Kube-Bench - CIS Benchmark Scanner
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#2-kube-bench---cis-benchmark-scanner" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Kube-Bench - CIS Benchmark Scanner" href="#2-kube-bench---cis-benchmark-scanner"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;CIS Benchmark scanner for Kubernetes nodes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kube-Bench automates the Center for Internet Security (CIS) Kubernetes Benchmark tests, helping organizations ensure their clusters meet security best practices and compliance requirements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CIS Benchmark compliance&lt;/li&gt;
&lt;li&gt;Automated security testing&lt;/li&gt;
&lt;li&gt;Detailed reporting&lt;/li&gt;
&lt;li&gt;Multiple Kubernetes versions support&lt;/li&gt;
&lt;li&gt;Remediation guidance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run --rm -v &lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;:/host aquasec/kube-bench:latest install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;batch/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Job&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-bench&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostPID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-bench&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aquasec/kube-bench:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;kube-bench&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;--benchmark&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cis-1.6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;var-lib-kubelet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/lib/kubelet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;etc-systemd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/etc/systemd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;etc-kubernetes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/etc/kubernetes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;var-lib-kubelet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/lib/kubelet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;etc-systemd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/etc/systemd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;etc-kubernetes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/etc/kubernetes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restartPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Never&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/aquasecurity/kube-bench"
&gt;Get Kube-Bench on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="3-kube-hunter---security-vulnerability-scanner"&gt;
3. Kube-Hunter - Security Vulnerability Scanner
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#3-kube-hunter---security-vulnerability-scanner" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Kube-Hunter - Security Vulnerability Scanner" href="#3-kube-hunter---security-vulnerability-scanner"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Actively hunts for security issues in your clusters.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kube-Hunter is an active security scanner that hunts for security weaknesses in Kubernetes clusters. It can run from outside or inside the cluster to identify potential attack vectors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Active vulnerability scanning&lt;/li&gt;
&lt;li&gt;Multiple scanning modes&lt;/li&gt;
&lt;li&gt;Detailed attack vector reporting&lt;/li&gt;
&lt;li&gt;Remediation recommendations&lt;/li&gt;
&lt;li&gt;Non-intrusive testing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-hunter/main/job.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -it --rm --network host aquasec/kube-hunter
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;batch/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Job&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-hunter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-hunter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aquasec/kube-hunter:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;kube-hunter.py&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;--remote&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;your-cluster-ip&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;KUBERNETES_SERVICE_HOST&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;your-cluster-ip&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;KUBERNETES_SERVICE_PORT&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;6443&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restartPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Never&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Scanning Modes:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Passive scanning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-hunter --passive
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Active scanning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-hunter --active
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Network scanning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-hunter --remote 192.168.1.0/24
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Custom reporting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-hunter --report json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/aquasecurity/kube-hunter"
&gt;Get Kube-Hunter on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="4-trivy---comprehensive-vulnerability-scanner"&gt;
4. Trivy - Comprehensive Vulnerability Scanner
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#4-trivy---comprehensive-vulnerability-scanner" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Trivy - Comprehensive Vulnerability Scanner" href="#4-trivy---comprehensive-vulnerability-scanner"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;All-in-one scanner for containers, SBOMs, IaC, and more.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Trivy is a comprehensive security scanner that covers containers, infrastructure as code, software bill of materials (SBOM), and Kubernetes manifests. It&amp;rsquo;s fast, accurate, and easy to integrate into CI/CD pipelines.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Container image scanning&lt;/li&gt;
&lt;li&gt;Infrastructure as Code scanning&lt;/li&gt;
&lt;li&gt;SBOM generation and analysis&lt;/li&gt;
&lt;li&gt;Kubernetes manifest scanning&lt;/li&gt;
&lt;li&gt;CI/CD integration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/aquasecurity/trivy/main/deploy/kubernetes/trivy.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add aqua https://aquasecurity.github.io/helm-charts/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install trivy aqua/trivy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;batch/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;CronJob&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;trivy-scan&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;0 2 * * *&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jobTemplate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;trivy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aquasec/trivy:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/bin/sh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- -&lt;span class="l"&gt;c&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; trivy image --format json --output /reports/scan.json nginx:latest
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; trivy config --format json --output /reports/config.json /manifests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;reports&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/reports&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;manifests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/manifests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;reports&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;emptyDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;manifests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configMap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;k8s-manifests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restartPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;OnFailure&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Scanning Examples:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scan container image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;trivy image nginx:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scan Kubernetes manifests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;trivy config k8s/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Generate SBOM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;trivy image --format cyclonedx nginx:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scan for secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;trivy secret ./
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/aquasecurity/trivy"
&gt;Get Trivy on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="5-opagatekeeper---policy-enforcement"&gt;
5. OPA/Gatekeeper - Policy Enforcement
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#5-opagatekeeper---policy-enforcement" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. OPA/Gatekeeper - Policy Enforcement" href="#5-opagatekeeper---policy-enforcement"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Policy enforcement via Rego rules for Kubernetes objects.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Open Policy Agent (OPA) with Gatekeeper provides powerful policy enforcement for Kubernetes clusters using the Rego policy language. It enables organizations to enforce security, compliance, and operational policies consistently.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Declarative policy language (Rego)&lt;/li&gt;
&lt;li&gt;Kubernetes-native integration&lt;/li&gt;
&lt;li&gt;Real-time policy enforcement&lt;/li&gt;
&lt;li&gt;Audit and dry-run modes&lt;/li&gt;
&lt;li&gt;Custom resource validation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/deploy/gatekeeper.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install gatekeeper gatekeeper/gatekeeper
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Policy Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rego" data-lang="rego"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kubernetes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;admission&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;deny&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pod&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;securityContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;runAsNonRoot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pods must not run as root&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;deny&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pod&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;securityContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readOnlyRootFilesystem&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Container %v must have a read-only root filesystem&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;deny&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Service&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;LoadBalancer&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;service.beta.kubernetes.io/aws-load-balancer-internal&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;LoadBalancer services must be internal&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Constraint Template:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;templates.gatekeeper.sh/v1beta1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConstraintTemplate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;k8srequiredlabels&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;crd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;names&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;K8sRequiredLabels&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admission.k8s.gatekeeper.sh&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rego&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; package k8srequiredlabels
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; violation[{&amp;#34;msg&amp;#34;: msg, &amp;#34;details&amp;#34;: {&amp;#34;missing_labels&amp;#34;: missing}}] {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; provided := {label | input.review.object.metadata.labels[label]}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; required := {label | label := input.parameters.labels[_]}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; missing := required - provided
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; count(missing) &amp;gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; msg := sprintf(&amp;#34;you must provide labels: %v&amp;#34;, [missing])
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://www.openpolicyagent.org/"
&gt;Learn about OPA&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="6-kyverno---kubernetes-native-policy-engine"&gt;
6. Kyverno - Kubernetes-Native Policy Engine
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#6-kyverno---kubernetes-native-policy-engine" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 6. Kyverno - Kubernetes-Native Policy Engine" href="#6-kyverno---kubernetes-native-policy-engine"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes-native policy engine using YAML syntax.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kyverno provides policy enforcement using familiar Kubernetes YAML syntax, making it easier for teams to write and maintain policies without learning a new language.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;YAML-based policies&lt;/li&gt;
&lt;li&gt;Kubernetes-native design&lt;/li&gt;
&lt;li&gt;Mutation and validation&lt;/li&gt;
&lt;li&gt;Resource generation&lt;/li&gt;
&lt;li&gt;Background scanning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add kyverno https://kyverno.github.io/kyverno/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install kyverno kyverno/kyverno --namespace kyverno --create-namespace
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://github.com/kyverno/kyverno/releases/latest/download/install.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Policy Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kyverno.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;require-labels&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;validationFailureAction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;enforce&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;check-for-labels&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kinds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;label &amp;#39;app.kubernetes.io/name&amp;#39; is required&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app.kubernetes.io/name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;?*&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kyverno.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;disallow-privileged&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;validationFailureAction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;enforce&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;check-privileged&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kinds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Privileged containers are not allowed&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;privileged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kyverno.io/"
&gt;Explore Kyverno&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="7-k-rail---lightweight-security-rules"&gt;
7. K-Rail - Lightweight Security Rules
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#7-k-rail---lightweight-security-rules" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 7. K-Rail - Lightweight Security Rules" href="#7-k-rail---lightweight-security-rules"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Lightweight rule engine to enforce security best practices.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;K-Rail is a lightweight admission controller that enforces security best practices in Kubernetes clusters. It focuses on practical security rules that are easy to understand and implement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lightweight design&lt;/li&gt;
&lt;li&gt;Security-focused rules&lt;/li&gt;
&lt;li&gt;Easy configuration&lt;/li&gt;
&lt;li&gt;Admission control integration&lt;/li&gt;
&lt;li&gt;Practical best practices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/cruise-automation/k-rail/master/deploy/k-rail.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add k-rail https://cruise-automation.github.io/k-rail/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install k-rail k-rail/k-rail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;k-rail-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; policies:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - name: &amp;#34;no-privileged-containers&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; enabled: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; rules:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - name: &amp;#34;no-privileged-containers&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; enabled: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; message: &amp;#34;Privileged containers are not allowed&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; resource_types:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - &amp;#34;pods&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; validate:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - rule: &amp;#34;no-privileged-containers&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - name: &amp;#34;no-host-path&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; enabled: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; rules:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - name: &amp;#34;no-host-path&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; enabled: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; message: &amp;#34;Host path volumes are not allowed&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; resource_types:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - &amp;#34;pods&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; validate:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - rule: &amp;#34;no-host-path&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/cruise-automation/k-rail"
&gt;Get K-Rail on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="8-tufin-rego-policy-tester---policy-validation"&gt;
8. Tufin Rego Policy Tester - Policy Validation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#8-tufin-rego-policy-tester---policy-validation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 8. Tufin Rego Policy Tester - Policy Validation" href="#8-tufin-rego-policy-tester---policy-validation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Validates policies offline before applying.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tufin Rego Policy Tester provides a way to test and validate OPA policies offline before deploying them to production clusters, reducing the risk of policy-related issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Offline policy testing&lt;/li&gt;
&lt;li&gt;Rego syntax validation&lt;/li&gt;
&lt;li&gt;Test case management&lt;/li&gt;
&lt;li&gt;CI/CD integration&lt;/li&gt;
&lt;li&gt;Policy debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Go&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install github.com/Tufin/kube-open-policy-agent@latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull tufin/kube-open-policy-agent:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test a policy file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opa &lt;span class="nb"&gt;test&lt;/span&gt; policy.rego
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test with data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opa &lt;span class="nb"&gt;test&lt;/span&gt; policy.rego data.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run specific tests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opa &lt;span class="nb"&gt;test&lt;/span&gt; policy.rego --run test_name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Coverage report&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opa &lt;span class="nb"&gt;test&lt;/span&gt; policy.rego --coverage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/Tufin/kube-open-policy-agent"
&gt;Get Tufin Rego Policy Tester on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="9-slimtoolkit-dockerslim---container-optimization"&gt;
9. SlimToolkit (DockerSlim) - Container Optimization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#9-slimtoolkit-dockerslim---container-optimization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 9. SlimToolkit (DockerSlim) - Container Optimization" href="#9-slimtoolkit-dockerslim---container-optimization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Minimize container attack surface by stripping unused binaries.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SlimToolkit reduces container attack surface by removing unnecessary files, binaries, and dependencies from container images, making them more secure and efficient.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Container image optimization&lt;/li&gt;
&lt;li&gt;Attack surface reduction&lt;/li&gt;
&lt;li&gt;Size reduction&lt;/li&gt;
&lt;li&gt;Security hardening&lt;/li&gt;
&lt;li&gt;Multi-stage optimization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull dslim/slim
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/slimtoolkit/slim/master/deploy/kubernetes/slim.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Optimize an image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;slim build nginx:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interactive optimization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;slim build --interactive nginx:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Custom optimization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;slim build --target nginx:latest --include-path /etc/nginx --include-path /usr/sbin/nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Security analysis&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;slim analyze nginx:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/slimtoolkit/slim"
&gt;Get SlimToolkit on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="10-cilium-tetragon---ebpf-runtime-security"&gt;
10. Cilium Tetragon - eBPF Runtime Security
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#10-cilium-tetragon---ebpf-runtime-security" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 10. Cilium Tetragon - eBPF Runtime Security" href="#10-cilium-tetragon---ebpf-runtime-security"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;eBPF-based runtime enforcement and observability.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cilium Tetragon provides deep runtime security and observability using eBPF technology, offering real-time visibility into system calls, network activity, and process behavior.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;eBPF-based monitoring&lt;/li&gt;
&lt;li&gt;Real-time process tracking&lt;/li&gt;
&lt;li&gt;Network security&lt;/li&gt;
&lt;li&gt;Custom policies&lt;/li&gt;
&lt;li&gt;Performance monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add cilium https://helm.cilium.io/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install tetragon cilium/tetragon -n kube-system
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/cilium/tetragon/main/install/kubernetes/install.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tetragon-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; tracing:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; policy:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - name: &amp;#34;process-monitoring&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; rules:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - name: &amp;#34;suspicious-processes&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; process:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; binary: &amp;#34;.*&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; args: &amp;#34;.*&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; return: &amp;#34;.*&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; action: &amp;#34;post&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; monitoring:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; events:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - process_exec
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - process_exit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - process_kprobe
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - process_tracepoint&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://tetragon.io/"
&gt;Learn about Tetragon&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="building-a-comprehensive-security-strategy"&gt;
Building a Comprehensive Security Strategy
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#building-a-comprehensive-security-strategy" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Building a Comprehensive Security Strategy" href="#building-a-comprehensive-security-strategy"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="security-layers"&gt;
Security Layers
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#security-layers" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Security Layers" href="#security-layers"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Infrastructure Security&lt;/strong&gt;: Kube-Bench, Kube-Hunter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image Security&lt;/strong&gt;: Trivy, SlimToolkit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime Security&lt;/strong&gt;: Falco, Cilium Tetragon&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy Enforcement&lt;/strong&gt;: OPA/Gatekeeper, Kyverno&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance&lt;/strong&gt;: K-Rail, custom policies&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="implementation-roadmap"&gt;
Implementation Roadmap
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#implementation-roadmap" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Implementation Roadmap" href="#implementation-roadmap"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Phase 1: Foundation&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deploy Kube-Bench for baseline security&lt;/li&gt;
&lt;li&gt;Implement Trivy for image scanning&lt;/li&gt;
&lt;li&gt;Set up basic policy enforcement&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Phase 2: Runtime Protection&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deploy Falco for runtime monitoring&lt;/li&gt;
&lt;li&gt;Implement Kyverno policies&lt;/li&gt;
&lt;li&gt;Configure alerting and notifications&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Phase 3: Advanced Security&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deploy Cilium Tetragon&lt;/li&gt;
&lt;li&gt;Implement custom OPA policies&lt;/li&gt;
&lt;li&gt;Set up comprehensive monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="best-practices"&gt;
Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Best Practices" href="#best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Defense in Depth&lt;/strong&gt;: Implement multiple security layers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Least Privilege&lt;/strong&gt;: Use RBAC and security contexts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regular Scanning&lt;/strong&gt;: Automate vulnerability scanning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy as Code&lt;/strong&gt;: Version control all security policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring and Alerting&lt;/strong&gt;: Set up comprehensive monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incident Response&lt;/strong&gt;: Prepare for security incidents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Training&lt;/strong&gt;: Educate teams on security best practices&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-security-tools/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Kubernetes security requires a multi-layered approach that addresses infrastructure, application, and runtime security concerns. The tools outlined above provide comprehensive coverage for securing Kubernetes environments.&lt;/p&gt;
&lt;p&gt;Start with the foundational tools (Kube-Bench, Trivy) and gradually implement more advanced solutions based on your security requirements and risk profile. Remember that security is an ongoing process that requires regular assessment, updates, and monitoring.&lt;/p&gt;
&lt;p&gt;For organizations with compliance requirements, ensure that your security tools and policies align with relevant standards (CIS, NIST, SOC 2, etc.) and maintain proper documentation for audits and assessments.&lt;/p&gt;
&lt;p&gt;For more information about Kubernetes security, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/security/"
&gt;official Kubernetes security documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://landscape.cncf.io/card-mode?category=security&amp;amp;grouping=category"
&gt;CNCF security landscape&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/security" term="security" label="security"/><category scheme="https://k8s-ops.net/tags/falco" term="falco" label="falco"/><category scheme="https://k8s-ops.net/tags/trivy" term="trivy" label="trivy"/><category scheme="https://k8s-ops.net/tags/opa" term="opa" label="opa"/><category scheme="https://k8s-ops.net/tags/compliance" term="compliance" label="compliance"/><category scheme="https://k8s-ops.net/tags/runtime-security" term="runtime-security" label="runtime-security"/></entry><entry><title>Getting Started with Kubernetes on DigitalOcean: A Beginner's Guide</title><link href="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/</id><published>2025-08-15T00:00:00+00:00</published><updated>2025-07-04T14:53:10-04:00</updated><content type="html">
&lt;p&gt;Kubernetes can seem overwhelming for beginners, but DigitalOcean&amp;rsquo;s managed Kubernetes service (DOKS) provides an excellent entry point into the world of container orchestration. With its simplified setup, competitive pricing, and excellent documentation, DigitalOcean makes it easy to get started with Kubernetes without the complexity of managing your own cluster infrastructure.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="why-choose-digitalocean-for-kubernetes"&gt;
Why Choose DigitalOcean for Kubernetes?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#why-choose-digitalocean-for-kubernetes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Why Choose DigitalOcean for Kubernetes?" href="#why-choose-digitalocean-for-kubernetes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="managed-service-benefits"&gt;
Managed Service Benefits
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#managed-service-benefits" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Managed Service Benefits" href="#managed-service-benefits"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;DigitalOcean Kubernetes (DOKS) eliminates the operational overhead of managing cluster infrastructure while providing a production-ready Kubernetes environment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Advantages:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zero Infrastructure Management&lt;/strong&gt;: DigitalOcean handles control plane updates, security patches, and infrastructure scaling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simple Setup&lt;/strong&gt;: Create a cluster in minutes through the web interface or CLI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost-Effective&lt;/strong&gt;: Transparent pricing with no hidden fees or complex billing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global Presence&lt;/strong&gt;: Multiple data centers for low-latency deployments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Excellent Documentation&lt;/strong&gt;: Comprehensive guides and tutorials for all skill levels&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Pricing Transparency:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Control Plane&lt;/strong&gt;: Free (managed by DigitalOcean)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worker Nodes&lt;/strong&gt;: Pay only for the compute resources you use&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load Balancers&lt;/strong&gt;: $12/month per load balancer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Block Storage&lt;/strong&gt;: $0.10/GB/month&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No Data Transfer Fees&lt;/strong&gt;: Between DOKS and other DigitalOcean services&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="perfect-for-learning-and-development"&gt;
Perfect for Learning and Development
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#perfect-for-learning-and-development" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Perfect for Learning and Development" href="#perfect-for-learning-and-development"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;DOKS is particularly well-suited for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Learning Kubernetes&lt;/strong&gt;: Focus on concepts without infrastructure complexity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development Environments&lt;/strong&gt;: Quick setup and teardown for testing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Small to Medium Applications&lt;/strong&gt;: Production workloads with reasonable scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proof of Concepts&lt;/strong&gt;: Rapid prototyping and experimentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://docs.digitalocean.com/products/kubernetes/"
&gt;Learn more about DigitalOcean Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="setting-up-your-first-cluster"&gt;
Setting Up Your First Cluster
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#setting-up-your-first-cluster" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Setting Up Your First Cluster" href="#setting-up-your-first-cluster"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="prerequisites"&gt;
Prerequisites
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#prerequisites" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Prerequisites" href="#prerequisites"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Before creating your cluster, ensure you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A DigitalOcean account (sign up with our &lt;a
class="gblog-markdown__link"
href="https://m.do.co/c/kubernetes-starter"
&gt;referral link&lt;/a&gt; for $200 in credits)&lt;/li&gt;
&lt;li&gt;Basic understanding of containers and Docker&lt;/li&gt;
&lt;li&gt;Familiarity with command-line tools&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="step-1-create-your-cluster"&gt;
Step 1: Create Your Cluster
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#step-1-create-your-cluster" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Step 1: Create Your Cluster" href="#step-1-create-your-cluster"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Via Web Interface:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log into your DigitalOcean account&lt;/li&gt;
&lt;li&gt;Navigate to Kubernetes in the left sidebar&lt;/li&gt;
&lt;li&gt;Click &amp;ldquo;Create Cluster&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Choose your cluster configuration:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Region&lt;/strong&gt;: Select the closest to your users&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes Version&lt;/strong&gt;: Latest stable version (recommended)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node Pool&lt;/strong&gt;: Start with 2-3 nodes for learning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node Size&lt;/strong&gt;: 2GB RAM, 1 vCPU for development workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Via doctl CLI:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install doctl (DigitalOcean CLI)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install doctl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;snap install doctl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Authenticate with your DigitalOcean account&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;doctl auth init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create a cluster&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;doctl kubernetes cluster create my-first-cluster &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --region nyc1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --size s-2vcpu-4gb &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --count &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --version 1.28
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="step-2-configure-kubectl"&gt;
Step 2: Configure kubectl
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#step-2-configure-kubectl" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Step 2: Configure kubectl" href="#step-2-configure-kubectl"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Download kubeconfig:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Get your cluster&amp;#39;s kubeconfig&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;doctl kubernetes cluster kubeconfig save my-first-cluster
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Verify connection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl cluster-info
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get nodes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME STATUS ROLES AGE VERSION
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pool-abc123-def456-1 Ready &amp;lt;none&amp;gt; 5m v1.28.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pool-abc123-def456-2 Ready &amp;lt;none&amp;gt; 5m v1.28.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://docs.digitalocean.com/products/kubernetes/how-to/create-clusters/"
&gt;Learn more about cluster setup&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="deploying-your-first-application"&gt;
Deploying Your First Application
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#deploying-your-first-application" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deploying Your First Application" href="#deploying-your-first-application"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="step-1-create-a-simple-application"&gt;
Step 1: Create a Simple Application
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#step-1-create-a-simple-application" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Step 1: Create a Simple Application" href="#step-1-create-a-simple-application"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Create a namespace for your application:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create namespace my-app
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl config set-context --current --namespace&lt;span class="o"&gt;=&lt;/span&gt;my-app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Deploy a sample application:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# app-deployment.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hello-world&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hello-world&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hello-world&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hello-world&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;64Mi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;250m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;128Mi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;500m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Apply the deployment:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f app-deployment.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="step-2-expose-your-application"&gt;
Step 2: Expose Your Application
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#step-2-expose-your-application" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Step 2: Expose Your Application" href="#step-2-expose-your-application"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Create a service:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# app-service.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hello-world-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hello-world&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterIP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Create a load balancer:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# app-ingress.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hello-world-lb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hello-world&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;LoadBalancer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Apply the services:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f app-service.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f app-ingress.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check the load balancer IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get service hello-world-lb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://docs.digitalocean.com/products/kubernetes/how-to/deploy-applications/"
&gt;Learn more about deploying applications&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="essential-kubernetes-concepts-to-master"&gt;
Essential Kubernetes Concepts to Master
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#essential-kubernetes-concepts-to-master" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Essential Kubernetes Concepts to Master" href="#essential-kubernetes-concepts-to-master"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-pods-and-deployments"&gt;
1. Pods and Deployments
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#1-pods-and-deployments" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Pods and Deployments" href="#1-pods-and-deployments"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Pods&lt;/strong&gt; are the smallest deployable units in Kubernetes. A Pod can contain one or more containers that share the same network namespace and storage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deployments&lt;/strong&gt; manage the lifecycle of Pods, providing features like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rolling updates and rollbacks&lt;/li&gt;
&lt;li&gt;Scaling up and down&lt;/li&gt;
&lt;li&gt;Self-healing (replacing failed Pods)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Deployment:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;livenessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;httpGet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/health&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;periodSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readinessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;httpGet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/ready&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;periodSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-services-and-networking"&gt;
2. Services and Networking
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#2-services-and-networking" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Services and Networking" href="#2-services-and-networking"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Services&lt;/strong&gt; provide stable network endpoints for your Pods, enabling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Load balancing across multiple Pods&lt;/li&gt;
&lt;li&gt;Service discovery within the cluster&lt;/li&gt;
&lt;li&gt;External access to your applications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Service Types:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ClusterIP&lt;/strong&gt;: Internal access only (default)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NodePort&lt;/strong&gt;: External access via node IP and port&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LoadBalancer&lt;/strong&gt;: External access via cloud load balancer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Service:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-app-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;LoadBalancer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-configmaps-and-secrets"&gt;
3. ConfigMaps and Secrets
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#3-configmaps-and-secrets" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. ConfigMaps and Secrets" href="#3-configmaps-and-secrets"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;ConfigMaps&lt;/strong&gt; store non-sensitive configuration data:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;database_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;postgresql://db.example.com:5432/mydb&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;log_level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;INFO&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature_flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; enable_cache=true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; debug_mode=false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Secrets&lt;/strong&gt; store sensitive data like passwords and API keys:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Secret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-secrets&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Opaque&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;db_password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cGFzc3dvcmQxMjM= &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# base64 encoded&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;YXBpLWtleS1oZXJl&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/"
&gt;Learn more about Kubernetes concepts&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="monitoring-and-observability"&gt;
Monitoring and Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#monitoring-and-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Monitoring and Observability" href="#monitoring-and-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="built-in-monitoring"&gt;
Built-in Monitoring
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#built-in-monitoring" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Built-in Monitoring" href="#built-in-monitoring"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;DigitalOcean provides:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cluster Metrics&lt;/strong&gt;: CPU, memory, and disk usage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node Health&lt;/strong&gt;: Status and performance monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application Metrics&lt;/strong&gt;: Pod-level resource consumption&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logs&lt;/strong&gt;: Centralized logging for troubleshooting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Access monitoring data:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View cluster metrics&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl top nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl top pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check resource usage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe pods
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="setting-up-prometheus-and-grafana"&gt;
Setting Up Prometheus and Grafana
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#setting-up-prometheus-and-grafana" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Setting Up Prometheus and Grafana" href="#setting-up-prometheus-and-grafana"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Install monitoring stack:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add Prometheus Helm repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install Prometheus and Grafana&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install monitoring prometheus-community/kube-prometheus-stack &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --namespace monitoring &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --create-namespace
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Access Grafana:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Port forward to access Grafana&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl port-forward -n monitoring svc/monitoring-grafana 3000:80
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Default credentials: admin / prom-operator&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://docs.digitalocean.com/products/kubernetes/how-to/monitor-clusters/"
&gt;Learn more about monitoring&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="security-best-practices"&gt;
Security Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#security-best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Security Best Practices" href="#security-best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-network-policies"&gt;
1. Network Policies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#1-network-policies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Network Policies" href="#1-network-policies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Implement network segmentation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NetworkPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default-deny&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;podSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;policyTypes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Egress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Allow specific traffic:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NetworkPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;allow-frontend-to-api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;podSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;policyTypes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ingress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;podSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;frontend&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-pod-security-standards"&gt;
2. Pod Security Standards
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#2-pod-security-standards" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Pod Security Standards" href="#2-pod-security-standards"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Apply restricted security context:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secure-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pod-security.kubernetes.io/enforce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;restricted&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsNonRoot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowPrivilegeEscalation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnlyRootFilesystem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-rbac-role-based-access-control"&gt;
3. RBAC (Role-Based Access Control)
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#3-rbac-role-based-access-control" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. RBAC (Role-Based Access Control)" href="#3-rbac-role-based-access-control"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Create service accounts with minimal permissions:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ServiceAccount&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-service-account&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Role&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-role&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;- &lt;span class="nt"&gt;apiGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pods&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;services&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;verbs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;list&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;watch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RoleBinding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-role-binding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;subjects&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;- &lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ServiceAccount&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-service-account&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;roleRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Role&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-role&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/security/"
&gt;Learn more about Kubernetes security&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="cost-optimization-strategies"&gt;
Cost Optimization Strategies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#cost-optimization-strategies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Cost Optimization Strategies" href="#cost-optimization-strategies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-right-sizing-resources"&gt;
1. Right-sizing Resources
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#1-right-sizing-resources" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Right-sizing Resources" href="#1-right-sizing-resources"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Monitor resource usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check current resource usage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl top pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl top nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Analyze resource requests vs. actual usage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe pods
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Optimize resource requests:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;256Mi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Based on actual usage&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;250m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Based on actual usage&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;512Mi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 2x requests for safety&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;500m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 2x requests for safety&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-autoscaling"&gt;
2. Autoscaling
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#2-autoscaling" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Autoscaling" href="#2-autoscaling"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Implement Horizontal Pod Autoscaler:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;autoscaling/v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HorizontalPodAutoscaler&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-app-hpa&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scaleTargetRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;web-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minReplicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxReplicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Resource&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Utilization&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;averageUtilization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;70&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Cluster Autoscaler:&lt;/strong&gt;
DigitalOcean automatically scales your cluster based on demand, but you can optimize by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setting appropriate minimum and maximum node counts&lt;/li&gt;
&lt;li&gt;Using node pools with different instance types&lt;/li&gt;
&lt;li&gt;Implementing proper resource requests and limits&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-storage-optimization"&gt;
3. Storage Optimization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#3-storage-optimization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Storage Optimization" href="#3-storage-optimization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Use appropriate storage classes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SSD Block Storage&lt;/strong&gt;: For high-performance workloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standard Block Storage&lt;/strong&gt;: For cost-sensitive applications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object Storage&lt;/strong&gt;: For large, infrequently accessed data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Implement storage policies:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PersistentVolumeClaim&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-storage&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;accessModes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ReadWriteOnce&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storageClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;do-block-storage&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://docs.digitalocean.com/products/kubernetes/how-to/optimize-clusters/"
&gt;Learn more about cost optimization&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="learning-path-and-next-steps"&gt;
Learning Path and Next Steps
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#learning-path-and-next-steps" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Learning Path and Next Steps" href="#learning-path-and-next-steps"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="beginner-level-0-3-months"&gt;
Beginner Level (0-3 months)
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#beginner-level-0-3-months" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Beginner Level (0-3 months)" href="#beginner-level-0-3-months"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes Fundamentals&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Complete the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tutorials/"
&gt;official Kubernetes tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Practice with kubectl commands&lt;/li&gt;
&lt;li&gt;Deploy simple applications&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DigitalOcean Specific&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explore DOKS features and limitations&lt;/li&gt;
&lt;li&gt;Learn about DigitalOcean&amp;rsquo;s networking and storage&lt;/li&gt;
&lt;li&gt;Practice with load balancers and block storage&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Basic Operations&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monitor application health&lt;/li&gt;
&lt;li&gt;Scale applications up and down&lt;/li&gt;
&lt;li&gt;Perform rolling updates&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="intermediate-level-3-6-months"&gt;
Intermediate Level (3-6 months)
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#intermediate-level-3-6-months" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Intermediate Level (3-6 months)" href="#intermediate-level-3-6-months"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Advanced Concepts&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;StatefulSets and persistent storage&lt;/li&gt;
&lt;li&gt;ConfigMaps and Secrets management&lt;/li&gt;
&lt;li&gt;Network policies and security&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set up monitoring with Prometheus/Grafana&lt;/li&gt;
&lt;li&gt;Implement centralized logging&lt;/li&gt;
&lt;li&gt;Create dashboards and alerts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CI/CD Integration&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Integrate with GitHub Actions or GitLab CI&lt;/li&gt;
&lt;li&gt;Implement GitOps workflows&lt;/li&gt;
&lt;li&gt;Automate deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="advanced-level-6-months"&gt;
Advanced Level (6+ months)
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#advanced-level-6-months" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Advanced Level (6&amp;#43; months)" href="#advanced-level-6-months"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Multi-cluster Management&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Federation and multi-cluster deployments&lt;/li&gt;
&lt;li&gt;Disaster recovery strategies&lt;/li&gt;
&lt;li&gt;Cross-cluster service mesh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resource optimization and tuning&lt;/li&gt;
&lt;li&gt;Performance monitoring and analysis&lt;/li&gt;
&lt;li&gt;Capacity planning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security Hardening&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Advanced RBAC configurations&lt;/li&gt;
&lt;li&gt;Pod security policies&lt;/li&gt;
&lt;li&gt;Compliance and auditing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="real-world-project-ideas"&gt;
Real-world Project Ideas
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#real-world-project-ideas" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Real-world Project Ideas" href="#real-world-project-ideas"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-web-application-stack"&gt;
1. Web Application Stack
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#1-web-application-stack" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Web Application Stack" href="#1-web-application-stack"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Deploy a complete web application with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Frontend (React/Vue.js)&lt;/li&gt;
&lt;li&gt;Backend API (Node.js/Python)&lt;/li&gt;
&lt;li&gt;Database (PostgreSQL/MySQL)&lt;/li&gt;
&lt;li&gt;Redis for caching&lt;/li&gt;
&lt;li&gt;Load balancer and ingress&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-microservices-architecture"&gt;
2. Microservices Architecture
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#2-microservices-architecture" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Microservices Architecture" href="#2-microservices-architecture"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Build a microservices application with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Service discovery and communication&lt;/li&gt;
&lt;li&gt;API gateway&lt;/li&gt;
&lt;li&gt;Distributed tracing&lt;/li&gt;
&lt;li&gt;Centralized logging&lt;/li&gt;
&lt;li&gt;Monitoring and alerting&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-data-pipeline"&gt;
3. Data Pipeline
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#3-data-pipeline" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Data Pipeline" href="#3-data-pipeline"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Create a data processing pipeline with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Message queues (RabbitMQ/Kafka)&lt;/li&gt;
&lt;li&gt;Stream processing&lt;/li&gt;
&lt;li&gt;Data storage and analytics&lt;/li&gt;
&lt;li&gt;Visualization dashboards&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-machine-learning-platform"&gt;
4. Machine Learning Platform
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#4-machine-learning-platform" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Machine Learning Platform" href="#4-machine-learning-platform"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Deploy ML workloads with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jupyter notebooks&lt;/li&gt;
&lt;li&gt;Model training and serving&lt;/li&gt;
&lt;li&gt;GPU acceleration&lt;/li&gt;
&lt;li&gt;Model versioning and deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="troubleshooting-common-issues"&gt;
Troubleshooting Common Issues
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#troubleshooting-common-issues" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Troubleshooting Common Issues" href="#troubleshooting-common-issues"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-pod-stuck-in-pending-state"&gt;
1. Pod Stuck in Pending State
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#1-pod-stuck-in-pending-state" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Pod Stuck in Pending State" href="#1-pod-stuck-in-pending-state"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check node resources&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl top nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check Pod events&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe pod &amp;lt;pod-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check resource requests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -o wide
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-service-not-accessible"&gt;
2. Service Not Accessible
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#2-service-not-accessible" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Service Not Accessible" href="#2-service-not-accessible"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check service endpoints&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get endpoints &amp;lt;service-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check Pod labels&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods --show-labels
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test service connectivity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run test-pod --image&lt;span class="o"&gt;=&lt;/span&gt;busybox --rm -it --restart&lt;span class="o"&gt;=&lt;/span&gt;Never -- nslookup &amp;lt;service-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-high-resource-usage"&gt;
3. High Resource Usage
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#3-high-resource-usage" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. High Resource Usage" href="#3-high-resource-usage"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check resource usage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl top pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl top nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Analyze resource requests vs. limits&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check for resource leaks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl logs &amp;lt;pod-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-network-connectivity-issues"&gt;
4. Network Connectivity Issues
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#4-network-connectivity-issues" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Network Connectivity Issues" href="#4-network-connectivity-issues"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check network policies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get networkpolicies
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test Pod-to-Pod connectivity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run test-pod --image&lt;span class="o"&gt;=&lt;/span&gt;busybox --rm -it --restart&lt;span class="o"&gt;=&lt;/span&gt;Never -- wget -O- &amp;lt;service-name&amp;gt;:&amp;lt;port&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check DNS resolution&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run test-pod --image&lt;span class="o"&gt;=&lt;/span&gt;busybox --rm -it --restart&lt;span class="o"&gt;=&lt;/span&gt;Never -- nslookup kubernetes.default
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/getting-started-with-kubernetes-digitalocean/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;DigitalOcean Kubernetes provides an excellent platform for learning and deploying Kubernetes applications. With its managed service approach, competitive pricing, and comprehensive documentation, DOKS eliminates much of the complexity associated with running Kubernetes while providing a production-ready environment.&lt;/p&gt;
&lt;p&gt;Key takeaways for beginners:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Start Simple&lt;/strong&gt;: Begin with basic deployments and gradually add complexity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Managed Services&lt;/strong&gt;: Let DigitalOcean handle infrastructure management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Practice Regularly&lt;/strong&gt;: Deploy and experiment with different applications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor Everything&lt;/strong&gt;: Set up observability from the beginning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Follow Security Best Practices&lt;/strong&gt;: Implement security measures early&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimize Costs&lt;/strong&gt;: Monitor resource usage and implement autoscaling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Remember that Kubernetes is a journey, not a destination. Start with the basics, build confidence with simple applications, and gradually explore more advanced features. DigitalOcean&amp;rsquo;s platform makes this learning process much more accessible and cost-effective.&lt;/p&gt;
&lt;p&gt;For continued learning, explore the &lt;a
class="gblog-markdown__link"
href="https://docs.digitalocean.com/products/kubernetes/"
&gt;DigitalOcean Kubernetes documentation&lt;/a&gt;, &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tutorials/"
&gt;official Kubernetes tutorials&lt;/a&gt;, and the vibrant Kubernetes community.&lt;/p&gt;
&lt;p&gt;Ready to get started? &lt;a
class="gblog-markdown__link"
href="https://m.do.co/c/kubernetes-starter"
&gt;Sign up for DigitalOcean&lt;/a&gt; and receive $200 in credits to begin your Kubernetes journey today!&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/digitalocean" term="digitalocean" label="digitalocean"/><category scheme="https://k8s-ops.net/tags/getting-started" term="getting-started" label="getting-started"/><category scheme="https://k8s-ops.net/tags/cloud" term="cloud" label="cloud"/><category scheme="https://k8s-ops.net/tags/devops" term="devops" label="devops"/><category scheme="https://k8s-ops.net/tags/learning" term="learning" label="learning"/></entry><entry><title>Advanced Kubernetes Interview Questions (2025 Edition)</title><link href="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/</id><published>2025-07-01T00:00:00+00:00</published><updated>2025-07-04T14:53:10-04:00</updated><content type="html">
&lt;p&gt;For senior Kubernetes roles, interviewers expect deep technical knowledge, architectural understanding, and the ability to solve complex problems. This guide covers advanced concepts that demonstrate expertise in Kubernetes internals, troubleshooting, and system design.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-does-kubernetes-handle-pod-scheduling-and-what-factors-influence-it"&gt;
How does Kubernetes handle Pod scheduling and what factors influence it?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#how-does-kubernetes-handle-pod-scheduling-and-what-factors-influence-it" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How does Kubernetes handle Pod scheduling and what factors influence it?" href="#how-does-kubernetes-handle-pod-scheduling-and-what-factors-influence-it"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Pod scheduling involves multiple components working together to place Pods on appropriate nodes based on various constraints and requirements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scheduling Process:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Predicates&lt;/strong&gt;: Hard requirements that must be met (resource availability, node selectors)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priorities&lt;/strong&gt;: Soft requirements that influence node selection (resource distribution, affinity)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Binding&lt;/strong&gt;: Final placement decision and Pod-to-node binding&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Key Factors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource Requests/Limits&lt;/strong&gt;: CPU and memory requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node Selectors&lt;/strong&gt;: Hard node affinity rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node Affinity&lt;/strong&gt;: Soft node preference rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pod Affinity/Anti-affinity&lt;/strong&gt;: Pod placement relative to other Pods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Taints and Tolerations&lt;/strong&gt;: Node isolation and Pod acceptance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Distribution&lt;/strong&gt;: Spread Pods across nodes for better resource utilization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;disk&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ssd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;affinity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodeAffinity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preferredDuringSchedulingIgnoredDuringExecution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preference&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchExpressions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;zone&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;In&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;us-west-2a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;podAffinity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requiredDuringSchedulingIgnoredDuringExecution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;labelSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchExpressions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;In&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;database&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;topologyKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubernetes.io/hostname&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tolerations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dedicated&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Equal&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;database&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;effect&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;NoSchedule&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;The scheduler uses a two-phase approach: predicates and priorities. Predicates are hard requirements like resource availability and node selectors. Priorities are soft requirements that score nodes based on factors like resource distribution and affinity rules. The scheduler also considers taints and tolerations for node isolation, and can use custom schedulers for specialized workloads. For example, you might want database Pods to avoid being scheduled on the same node for high availability.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/"
&gt;Learn more about Scheduling&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="explain-the-difference-between-init-containers-and-sidecar-containers"&gt;
Explain the difference between Init Containers and Sidecar Containers.
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#explain-the-difference-between-init-containers-and-sidecar-containers" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Explain the difference between Init Containers and Sidecar Containers." href="#explain-the-difference-between-init-containers-and-sidecar-containers"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Both patterns extend Pod functionality, but they serve different purposes and have different execution models.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Init Containers:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: Setup and initialization tasks that must complete before the main container starts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution&lt;/strong&gt;: Run sequentially, all must succeed before main container starts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle&lt;/strong&gt;: Run once during Pod startup, then terminate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;: Database migrations, configuration downloads, dependency checks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restart Policy&lt;/strong&gt;: Always restart on failure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Sidecar Containers:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: Support and enhance the main application container&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution&lt;/strong&gt;: Run alongside the main container throughout its lifecycle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle&lt;/strong&gt;: Start with main container and run until Pod termination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;: Logging, monitoring, caching, security proxies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restart Policy&lt;/strong&gt;: Follows main container restart policy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Init Container Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initContainers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;init-db&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgres:13&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sh&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;until pg_isready -h db-service; do echo waiting for database; sleep 2; done;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;init-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;busybox&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sh&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;wget -O /config/app.conf https://config-server/app.conf&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;config-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;config-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/app/config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;config-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;emptyDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Sidecar Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sidecar&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fluentd:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;fluentd&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/fluentd/etc/fluent.conf&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;log-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/var/log&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;log-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;emptyDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Init containers run before your main application starts and are perfect for setup tasks like database migrations or downloading configuration. They run sequentially and all must succeed. Sidecar containers run alongside your main application throughout its lifecycle, handling cross-cutting concerns like logging, monitoring, or caching. For example, you might use an init container to wait for a database to be ready, then use a sidecar container for log aggregation that runs for the entire Pod lifecycle.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/pods/init-containers/"
&gt;Learn more about Init Containers&lt;/a&gt;
&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/pods/#workload-resources-for-managing-pods"
&gt;Learn more about Sidecar Pattern&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-does-kubernetes-handle-network-policies-and-what-are-the-implications"&gt;
How does Kubernetes handle network policies and what are the implications?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#how-does-kubernetes-handle-network-policies-and-what-are-the-implications" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How does Kubernetes handle network policies and what are the implications?" href="#how-does-kubernetes-handle-network-policies-and-what-are-the-implications"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Network policies control Pod-to-Pod communication within the cluster, providing fine-grained network security controls.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Network Policy Components:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pod Selectors&lt;/strong&gt;: Define which Pods the policy applies to&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ingress Rules&lt;/strong&gt;: Control incoming traffic to Pods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Egress Rules&lt;/strong&gt;: Control outgoing traffic from Pods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy Types&lt;/strong&gt;: Ingress, Egress, or both&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default Policies&lt;/strong&gt;: Allow or deny all traffic by default&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Implementation Requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CNI Plugin&lt;/strong&gt;: Must support NetworkPolicy (e.g., Calico, Cilium, Weave Net)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy Controller&lt;/strong&gt;: Enforces the policies at the network level&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Namespace Isolation&lt;/strong&gt;: Can be applied per namespace&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Network Policy:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NetworkPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-network-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;podSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;policyTypes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Egress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ingress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;podSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;frontend&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;namespaceSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;monitoring&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;egress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;podSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;database&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5432&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;namespaceSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;UDP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Default Deny Policy:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NetworkPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default-deny&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;podSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;policyTypes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Egress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Network policies provide microsegmentation at the Pod level. You can control which Pods can communicate with each other based on labels and namespaces. For example, you might allow only frontend Pods to talk to API Pods, and only API Pods to talk to database Pods. The key is that you need a CNI plugin that supports NetworkPolicy, and you should start with a default-deny policy and explicitly allow required traffic. This follows the principle of least privilege.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/services-networking/network-policies/"
&gt;Learn more about Network Policies&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="explain-the-concept-of-pod-disruption-budgets-and-their-importance"&gt;
Explain the concept of Pod Disruption Budgets and their importance.
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#explain-the-concept-of-pod-disruption-budgets-and-their-importance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Explain the concept of Pod Disruption Budgets and their importance." href="#explain-the-concept-of-pod-disruption-budgets-and-their-importance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Pod Disruption Budgets (PDBs) ensure application availability during voluntary disruptions like node maintenance, cluster upgrades, or scaling operations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PDB Concepts:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Voluntary Disruptions&lt;/strong&gt;: Planned operations that can cause Pod termination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Involuntary Disruptions&lt;/strong&gt;: Unplanned events like node failures&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Min Available&lt;/strong&gt;: Minimum number of Pods that must be available&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Max Unavailable&lt;/strong&gt;: Maximum number of Pods that can be unavailable&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Budget Enforcement&lt;/strong&gt;: Prevents operations that would violate the budget&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PDB Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;policy/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PodDisruptionBudget&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app-pdb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minAvailable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Alternative Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;policy/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PodDisruptionBudget&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app-pdb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxUnavailable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High Availability&lt;/strong&gt;: Ensure minimum number of replicas during maintenance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rolling Updates&lt;/strong&gt;: Prevent too many Pods from being unavailable&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node Draining&lt;/strong&gt;: Control Pod eviction during node maintenance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cluster Scaling&lt;/strong&gt;: Manage Pod termination during scale-down operations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;PDBs protect your applications during planned operations like node maintenance or cluster upgrades. For example, if you have 5 replicas of your application, you might set a PDB to ensure at least 3 are always available. This prevents operations that would leave you with fewer than 3 replicas. PDBs work with the eviction API, so when you drain a node or perform rolling updates, Kubernetes respects the budget and won&amp;rsquo;t terminate Pods if it would violate the PDB.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/pods/disruptions/"
&gt;Learn more about Pod Disruption Budgets&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-does-kubernetes-handle-storage-and-what-are-the-different-volume-types"&gt;
How does Kubernetes handle storage and what are the different volume types?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#how-does-kubernetes-handle-storage-and-what-are-the-different-volume-types" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How does Kubernetes handle storage and what are the different volume types?" href="#how-does-kubernetes-handle-storage-and-what-are-the-different-volume-types"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Kubernetes provides a flexible storage abstraction that supports various storage backends and access patterns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Storage Architecture:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PersistentVolume (PV)&lt;/strong&gt;: Cluster-wide storage resource&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PersistentVolumeClaim (PVC)&lt;/strong&gt;: User&amp;rsquo;s request for storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;StorageClass&lt;/strong&gt;: Dynamic provisioning configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volume Plugin&lt;/strong&gt;: Interface to storage backend&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Volume Types:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Persistent Volumes:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PersistentVolume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-pv&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;accessModes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ReadWriteOnce&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;persistentVolumeReclaimPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Retain&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storageClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fast-ssd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hostPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/mnt/data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2. Storage Classes:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;storage.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;StorageClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fast-ssd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;provisioner&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubernetes.io/aws-ebs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gp3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;iops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3000&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;throughput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;125&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;reclaimPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Delete&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;volumeBindingMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;WaitForFirstConsumer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;3. PVC Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PersistentVolumeClaim&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-pvc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;accessModes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ReadWriteOnce&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storageClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fast-ssd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Volume Access Modes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ReadWriteOnce (RWO)&lt;/strong&gt;: Single node read/write&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReadOnlyMany (ROX)&lt;/strong&gt;: Multiple nodes read-only&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReadWriteMany (RWM)&lt;/strong&gt;: Multiple nodes read/write&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Kubernetes abstracts storage through PVs and PVCs. PVs represent actual storage resources in the cluster, while PVCs are requests for storage by users. StorageClasses enable dynamic provisioning - when you create a PVC, Kubernetes automatically creates a PV that matches your requirements. Access modes determine how the volume can be mounted: RWO for single-node databases, RWM for shared file systems. The key is choosing the right storage class and access mode for your workload.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/storage/"
&gt;Learn more about Storage&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="explain-the-concept-of-custom-resource-definitions-crds-and-their-use-cases"&gt;
Explain the concept of Custom Resource Definitions (CRDs) and their use cases.
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#explain-the-concept-of-custom-resource-definitions-crds-and-their-use-cases" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Explain the concept of Custom Resource Definitions (CRDs) and their use cases." href="#explain-the-concept-of-custom-resource-definitions-crds-and-their-use-cases"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
CRDs extend the Kubernetes API to support custom resources, enabling domain-specific abstractions and operators.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CRD Components:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom Resource&lt;/strong&gt;: The new resource type you&amp;rsquo;re defining&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Controller&lt;/strong&gt;: Logic that manages the custom resource&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Server&lt;/strong&gt;: Handles CRUD operations for custom resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation&lt;/strong&gt;: Schema validation for custom resources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;CRD Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apiextensions.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;CustomResourceDefinition&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;databases.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;versions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;served&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openAPIV3Schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;object&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;object&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;databaseName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;string&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;integer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minimum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;object&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;string&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;^[0-9]+Gi$&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Namespaced&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;names&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;plural&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;databases&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;singular&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;database&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Database&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;shortNames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;db&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Custom Resource Instance:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example.com/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Database&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-database&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;databaseName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myapp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;100Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operators&lt;/strong&gt;: Automate complex application lifecycle management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain-Specific Abstractions&lt;/strong&gt;: Create resources that match your business domain&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integration&lt;/strong&gt;: Bridge Kubernetes with external systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automation&lt;/strong&gt;: Encode operational knowledge in custom controllers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;CRDs let you extend Kubernetes with your own resource types. For example, instead of managing database deployments manually, you could create a Database CRD that represents a database instance. A custom controller would watch for Database resources and automatically create the necessary StatefulSets, Services, and PersistentVolumeClaims. This encapsulates operational knowledge and provides a higher-level abstraction that&amp;rsquo;s specific to your domain.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/"
&gt;Learn more about CRDs&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-does-kubernetes-handle-security-contexts-and-what-are-the-implications"&gt;
How does Kubernetes handle security contexts and what are the implications?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#how-does-kubernetes-handle-security-contexts-and-what-are-the-implications" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How does Kubernetes handle security contexts and what are the implications?" href="#how-does-kubernetes-handle-security-contexts-and-what-are-the-implications"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Security contexts control the security settings for Pods and containers, including user/group IDs, capabilities, and privilege levels.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Security Context Levels:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pod Security Context&lt;/strong&gt;: Applies to all containers in the Pod&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container Security Context&lt;/strong&gt;: Applies to specific containers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pod Security Standards&lt;/strong&gt;: Cluster-wide security policies&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Security Context Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secure-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsNonRoot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fsGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;supplementalGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowPrivilegeEscalation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnlyRootFilesystem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;seccompProfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RuntimeDefault&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;emptyDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Pod Security Standards:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;restricted-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pod-security.kubernetes.io/enforce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;restricted&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pod-security.kubernetes.io/audit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;restricted&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pod-security.kubernetes.io/warn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;restricted&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsNonRoot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowPrivilegeEscalation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnlyRootFilesystem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Security Implications:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Privilege Escalation&lt;/strong&gt;: Controls whether containers can gain additional privileges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Access&lt;/strong&gt;: Running as non-root reduces attack surface&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capabilities&lt;/strong&gt;: Fine-grained permission control&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read-only Filesystem&lt;/strong&gt;: Prevents runtime modifications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seccomp Profiles&lt;/strong&gt;: System call filtering&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Security contexts control how containers run in terms of user identity, capabilities, and privilege levels. Running as non-root and with read-only filesystems significantly reduces the attack surface. Pod Security Standards provide cluster-wide policies that enforce security best practices. For example, the restricted policy requires non-root execution, drops all capabilities, and uses read-only filesystems. This follows the principle of least privilege.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tasks/configure-pod-container/security-context/"
&gt;Learn more about Security Contexts&lt;/a&gt;
&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/security/pod-security-standards/"
&gt;Learn more about Pod Security Standards&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-does-kubernetes-handle-resource-quotas-and-limit-ranges"&gt;
How does Kubernetes handle resource quotas and limit ranges?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#how-does-kubernetes-handle-resource-quotas-and-limit-ranges" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How does Kubernetes handle resource quotas and limit ranges?" href="#how-does-kubernetes-handle-resource-quotas-and-limit-ranges"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Resource quotas and limit ranges provide cluster and namespace-level resource management to prevent resource exhaustion and ensure fair resource distribution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resource Quotas:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ResourceQuota&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;compute-quota&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests.cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests.memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;8Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits.cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;8&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits.memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;16Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;persistentvolumeclaims&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Limit Ranges:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;LimitRange&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;resource-limits&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;512Mi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;500m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;defaultRequest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;256Mi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;250m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Container&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1000m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;128Mi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;100m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Container&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2000m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Quota Types:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compute Resources&lt;/strong&gt;: CPU and memory requests/limits&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Resources&lt;/strong&gt;: Persistent volume claims&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object Counts&lt;/strong&gt;: Number of resources (Pods, Services, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extended Resources&lt;/strong&gt;: Custom resources like GPUs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Resource quotas set hard limits on resource consumption within a namespace, preventing any single namespace from consuming all cluster resources. Limit ranges provide defaults and constraints for resource requests and limits, ensuring Pods have reasonable resource specifications. For example, you might set a quota limiting a namespace to 4 CPU cores and 8GB memory, with limit ranges ensuring each container requests at least 100m CPU and 128Mi memory.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/policy/resource-quotas/"
&gt;Learn more about Resource Quotas&lt;/a&gt;
&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/policy/limit-range/"
&gt;Learn more about Limit Ranges&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="explain-the-concept-of-admission-controllers-and-their-role-in-kubernetes"&gt;
Explain the concept of admission controllers and their role in Kubernetes.
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#explain-the-concept-of-admission-controllers-and-their-role-in-kubernetes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Explain the concept of admission controllers and their role in Kubernetes." href="#explain-the-concept-of-admission-controllers-and-their-role-in-kubernetes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Admission controllers intercept requests to the Kubernetes API server and can modify or reject requests based on policies and rules.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Admission Controller Types:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Validating&lt;/strong&gt;: Check requests and can reject them&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mutating&lt;/strong&gt;: Modify requests before persistence&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webhook&lt;/strong&gt;: External HTTP callbacks for custom logic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Common Admission Controllers:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NodeRestriction&lt;/strong&gt;: Limits node modifications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ResourceQuota&lt;/strong&gt;: Enforces resource quotas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LimitRanger&lt;/strong&gt;: Applies limit ranges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PodSecurityPolicy&lt;/strong&gt;: Enforces security policies (deprecated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ValidatingAdmissionWebhook&lt;/strong&gt;: Custom validation logic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Webhook Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admissionregistration.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ValidatingWebhookConfiguration&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pod-policy.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;webhooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pod-policy.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;apiGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiVersions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;v1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CREATE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pods&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Namespaced&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clientConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;service&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pod-policy-webhook&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/validate&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;admissionReviewVersions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;v1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sideEffects&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;None&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeoutSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Security Enforcement&lt;/strong&gt;: Validate security policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Management&lt;/strong&gt;: Enforce resource limits and quotas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance&lt;/strong&gt;: Ensure regulatory compliance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Business Logic&lt;/strong&gt;: Implement domain-specific rules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Admission controllers act as gatekeepers for the Kubernetes API. They can validate requests before they&amp;rsquo;re persisted, mutate requests to add defaults or labels, or reject requests that violate policies. For example, a validating webhook might check that all Pods have security contexts set, or a mutating webhook might automatically add labels based on namespace. This provides a powerful way to enforce policies and implement custom business logic.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/"
&gt;Learn more about Admission Controllers&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-does-kubernetes-handle-multi-tenancy-and-namespace-isolation"&gt;
How does Kubernetes handle multi-tenancy and namespace isolation?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#how-does-kubernetes-handle-multi-tenancy-and-namespace-isolation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How does Kubernetes handle multi-tenancy and namespace isolation?" href="#how-does-kubernetes-handle-multi-tenancy-and-namespace-isolation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Kubernetes provides multiple layers of isolation for multi-tenant environments, from namespace separation to cluster-level isolation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Namespace Isolation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Namespace&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tenant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Resource Quotas per Tenant:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ResourceQuota&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a-quota&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests.cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests.memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;4Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits.cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits.memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;8Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;20&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Network Policies for Isolation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;networking.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NetworkPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;deny-all&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;podSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;policyTypes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Egress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;RBAC for Tenant Isolation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Role&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-admin&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;- &lt;span class="nt"&gt;apiGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pods&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;services&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;configmaps&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;verbs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;list&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;create&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;update&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;delete&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RoleBinding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-admin-binding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;subjects&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;- &lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;User&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-a-admin&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;roleRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Role&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tenant-admin&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Multi-tenancy Models:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Namespace-based&lt;/strong&gt;: Single cluster, multiple namespaces&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cluster-based&lt;/strong&gt;: Separate clusters per tenant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Virtual Clusters&lt;/strong&gt;: Kubernetes-in-Kubernetes approach&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Multi-tenancy in Kubernetes typically uses namespaces as the primary isolation boundary. Each tenant gets their own namespace with resource quotas, network policies, and RBAC controls. Network policies prevent cross-tenant communication, while resource quotas ensure fair resource distribution. For stronger isolation, you might use separate clusters or virtual clusters. The key is balancing isolation requirements with operational efficiency.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/security/pod-security-standards/"
&gt;Learn more about Multi-tenancy&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="additional-tips-for-advanced-interviews"&gt;
Additional Tips for Advanced Interviews
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#additional-tips-for-advanced-interviews" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Additional Tips for Advanced Interviews" href="#additional-tips-for-advanced-interviews"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="deep-technical-knowledge"&gt;
Deep Technical Knowledge
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#deep-technical-knowledge" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deep Technical Knowledge" href="#deep-technical-knowledge"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Be prepared to discuss:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes internals and architecture&lt;/li&gt;
&lt;li&gt;Performance optimization and troubleshooting&lt;/li&gt;
&lt;li&gt;Security best practices and compliance&lt;/li&gt;
&lt;li&gt;Scalability and high availability patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="real-world-scenarios"&gt;
Real-world Scenarios
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#real-world-scenarios" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Real-world Scenarios" href="#real-world-scenarios"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Expect questions about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Complex troubleshooting scenarios&lt;/li&gt;
&lt;li&gt;Performance bottlenecks and solutions&lt;/li&gt;
&lt;li&gt;Security incidents and responses&lt;/li&gt;
&lt;li&gt;Large-scale cluster management&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="architecture-and-design"&gt;
Architecture and Design
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#architecture-and-design" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Architecture and Design" href="#architecture-and-design"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Demonstrate understanding of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System design principles&lt;/li&gt;
&lt;li&gt;Trade-offs between different approaches&lt;/li&gt;
&lt;li&gt;Scalability considerations&lt;/li&gt;
&lt;li&gt;Operational complexity management&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="leadership-and-mentoring"&gt;
Leadership and Mentoring
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#leadership-and-mentoring" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Leadership and Mentoring" href="#leadership-and-mentoring"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Senior roles often require:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Team leadership experience&lt;/li&gt;
&lt;li&gt;Mentoring junior engineers&lt;/li&gt;
&lt;li&gt;Process improvement&lt;/li&gt;
&lt;li&gt;Strategic thinking&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/advanced-kubernetes-interview-questions-2025/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Advanced Kubernetes interviews test not just technical knowledge, but also architectural thinking, problem-solving abilities, and operational experience. Success requires deep understanding of Kubernetes internals, practical experience with complex scenarios, and the ability to design and implement robust solutions.&lt;/p&gt;
&lt;p&gt;For candidates: Focus on demonstrating practical experience, architectural thinking, and the ability to solve complex problems. Be prepared to discuss real-world scenarios and trade-offs.&lt;/p&gt;
&lt;p&gt;For interviewers: Look for candidates who can think architecturally, discuss trade-offs, and demonstrate deep technical understanding rather than just memorized knowledge.&lt;/p&gt;
&lt;p&gt;Remember, advanced Kubernetes expertise comes from experience with complex, production environments. Focus on demonstrating practical problem-solving skills and the ability to design robust, scalable solutions.&lt;/p&gt;
&lt;p&gt;For more information about advanced Kubernetes concepts and best practices, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/"
&gt;official Kubernetes documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tutorials/"
&gt;Kubernetes.io advanced tutorials&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/interview" term="interview" label="interview"/><category scheme="https://k8s-ops.net/tags/advanced" term="advanced" label="advanced"/><category scheme="https://k8s-ops.net/tags/devops" term="devops" label="devops"/><category scheme="https://k8s-ops.net/tags/career" term="career" label="career"/><category scheme="https://k8s-ops.net/tags/learning" term="learning" label="learning"/></entry><entry><title>Top 10 Krew Plugins for kubectl</title><link href="https://k8s-ops.net/posts/top-10-krew-plugins/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/top-10-krew-plugins/</id><published>2025-06-25T00:00:00+00:00</published><updated>2025-07-04T14:53:10-04:00</updated><content type="html">
&lt;p&gt;Krew is the package manager for kubectl plugins, making it easy to extend kubectl&amp;rsquo;s functionality with community-contributed tools. With hundreds of plugins available, Krew transforms kubectl from a basic CLI tool into a powerful, extensible platform for Kubernetes management. Here are the top 10 Krew plugins that every Kubernetes practitioner should have in their toolkit.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="1-ctx---fast-context-switching"&gt;
1. ctx - Fast Context Switching
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#1-ctx---fast-context-switching" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. ctx - Fast Context Switching" href="#1-ctx---fast-context-switching"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Fast context switching between Kubernetes clusters.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The ctx plugin provides lightning-fast context switching, allowing you to move between different Kubernetes clusters with minimal keystrokes. It&amp;rsquo;s an essential tool for anyone managing multiple clusters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Instant context switching&lt;/li&gt;
&lt;li&gt;Interactive selection mode&lt;/li&gt;
&lt;li&gt;Tab completion support&lt;/li&gt;
&lt;li&gt;Fuzzy matching&lt;/li&gt;
&lt;li&gt;Context aliases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install ctx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all contexts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl ctx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Switch to specific context&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl ctx production-cluster
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interactive selection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl ctx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Switch to previous context&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl ctx -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add to your shell profile for better UX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW_ROOT&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.krew&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enable tab completion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;kubectl completion bash&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/ahmetb/kubectx"
&gt;Get ctx on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="2-ns---namespace-switcher"&gt;
2. ns - Namespace Switcher
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#2-ns---namespace-switcher" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. ns - Namespace Switcher" href="#2-ns---namespace-switcher"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Quick namespace switching within the current context.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The ns plugin complements ctx by providing fast namespace switching within your current cluster context. It&amp;rsquo;s perfect for developers and operators who work across multiple namespaces.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quick namespace switching&lt;/li&gt;
&lt;li&gt;Interactive selection&lt;/li&gt;
&lt;li&gt;Tab completion&lt;/li&gt;
&lt;li&gt;Namespace aliases&lt;/li&gt;
&lt;li&gt;Current namespace display&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install ns
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all namespaces&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl ns
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Switch to specific namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl ns production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interactive selection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl ns
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Switch to previous namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl ns -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Integration with kube-ps1:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add to your shell prompt to show current namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PS1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;[\u@\h \W $(kubectl_ps1)]\$ &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/ahmetb/kubectx"
&gt;Get ns on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="3-neat---clean-kubectl-output"&gt;
3. neat - Clean kubectl Output
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#3-neat---clean-kubectl-output" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. neat - Clean kubectl Output" href="#3-neat---clean-kubectl-output"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Cleans up verbose kubectl output for human-readable inspection.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The neat plugin removes unnecessary fields and metadata from kubectl output, making it much more readable and easier to work with during debugging and troubleshooting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removes default fields and metadata&lt;/li&gt;
&lt;li&gt;Preserves important information&lt;/li&gt;
&lt;li&gt;YAML and JSON output support&lt;/li&gt;
&lt;li&gt;Customizable field filtering&lt;/li&gt;
&lt;li&gt;Maintains resource structure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install neat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clean up pod output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pod my-pod -o yaml &lt;span class="p"&gt;|&lt;/span&gt; kubectl neat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clean up deployment output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get deployment my-deployment -o yaml &lt;span class="p"&gt;|&lt;/span&gt; kubectl neat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clean up service output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get service my-service -o yaml &lt;span class="p"&gt;|&lt;/span&gt; kubectl neat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clean up configmap output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get configmap my-config -o yaml &lt;span class="p"&gt;|&lt;/span&gt; kubectl neat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Custom Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Create custom neat configuration&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;neat-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; remove:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - metadata.creationTimestamp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - metadata.generation
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - metadata.resourceVersion
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - metadata.uid
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - status&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/itaysk/kubectl-neat"
&gt;Get neat on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="4-tree---resource-hierarchy-visualization"&gt;
4. tree - Resource Hierarchy Visualization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#4-tree---resource-hierarchy-visualization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. tree - Resource Hierarchy Visualization" href="#4-tree---resource-hierarchy-visualization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;View hierarchical ownership relationships between Kubernetes resources.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The tree plugin visualizes the ownership relationships between Kubernetes resources, making it easier to understand dependencies and troubleshoot issues in complex deployments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hierarchical resource display&lt;/li&gt;
&lt;li&gt;Owner reference tracking&lt;/li&gt;
&lt;li&gt;Custom resource support&lt;/li&gt;
&lt;li&gt;Multiple output formats&lt;/li&gt;
&lt;li&gt;Dependency visualization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install tree
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show pod ownership tree&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree pod my-pod
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show deployment tree&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree deployment my-deployment
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show all resources in namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree all -n production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show specific resource type&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree service my-service
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show with custom format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree pod my-pod --graphviz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Advanced Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show tree with specific fields&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree pod my-pod --show-labels
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show tree with status information&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree deployment my-deployment --show-status
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Filter by labels&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree all -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;frontend
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/ahmetb/kubectl-tree"
&gt;Get tree on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="5-score---static-analysis-for-manifests"&gt;
5. score - Static Analysis for Manifests
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#5-score---static-analysis-for-manifests" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. score - Static Analysis for Manifests" href="#5-score---static-analysis-for-manifests"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Performs static analysis of your Kubernetes manifests.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The score plugin analyzes Kubernetes manifests for best practices, security issues, and potential problems before deployment. It&amp;rsquo;s an essential tool for maintaining high-quality configurations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Static analysis of manifests&lt;/li&gt;
&lt;li&gt;Best practice checking&lt;/li&gt;
&lt;li&gt;Security validation&lt;/li&gt;
&lt;li&gt;Performance recommendations&lt;/li&gt;
&lt;li&gt;Custom scoring rules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install score
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Analyze a single file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl score deployment.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Analyze multiple files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl score *.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Analyze with specific output format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl score deployment.yaml --output-format json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Analyze with custom rules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl score deployment.yaml --policy-file custom-policy.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Analyze with verbose output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl score deployment.yaml --verbose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Sample Output:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl score deployment.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;CRITICAL&lt;span class="o"&gt;]&lt;/span&gt; Container has no resource limits
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;WARNING&lt;span class="o"&gt;]&lt;/span&gt; Container is not using a non-root user
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;INFO&lt;span class="o"&gt;]&lt;/span&gt; Consider adding liveness probe
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;PASS&lt;span class="o"&gt;]&lt;/span&gt; Container has security context
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Custom Policy Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;score.dev/v1alpha3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production-policy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;require-resource-limits&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;All containers must have resource limits&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;container-resource-limits&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;spec.template.spec.containers[*].resources.limits&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/zegl/kube-score"
&gt;Get score on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="6-who-can---permission-analysis"&gt;
6. who-can - Permission Analysis
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#6-who-can---permission-analysis" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 6. who-can - Permission Analysis" href="#6-who-can---permission-analysis"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Shows which subjects can perform an action on a resource.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The who-can plugin helps you understand RBAC permissions by showing which users, groups, or service accounts can perform specific actions on Kubernetes resources. It&amp;rsquo;s invaluable for security audits and troubleshooting permission issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RBAC permission analysis&lt;/li&gt;
&lt;li&gt;Subject identification&lt;/li&gt;
&lt;li&gt;Action-specific queries&lt;/li&gt;
&lt;li&gt;Verbose permission details&lt;/li&gt;
&lt;li&gt;Security auditing support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install who-can
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check who can create pods&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can create pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check who can delete deployments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can delete deployments
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check who can access secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can get secrets
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check specific resource&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can get secret my-secret
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check with namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can create pods -n production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check with specific user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can create pods --as&lt;span class="o"&gt;=&lt;/span&gt;user@example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Advanced Queries:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check multiple actions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can create,update,delete pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check with specific API group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can create deployments.apps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check with custom resource&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl who-can create customresources.example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/aquasecurity/kubectl-who-can"
&gt;Get who-can on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="7-tail---multi-pod-log-streaming"&gt;
7. tail - Multi-pod Log Streaming
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#7-tail---multi-pod-log-streaming" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 7. tail - Multi-pod Log Streaming" href="#7-tail---multi-pod-log-streaming"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Stream logs across multiple pods with intelligent filtering.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The tail plugin provides advanced log streaming capabilities, allowing you to follow logs from multiple pods simultaneously with intelligent filtering and formatting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-pod log streaming&lt;/li&gt;
&lt;li&gt;Intelligent pod selection&lt;/li&gt;
&lt;li&gt;Real-time filtering&lt;/li&gt;
&lt;li&gt;Color-coded output&lt;/li&gt;
&lt;li&gt;Custom formatting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install tail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs from all pods with specific label&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;frontend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs from specific namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail -n production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs with custom selector&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail --selector &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;api,version&lt;span class="o"&gt;=&lt;/span&gt;v2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs with timestamps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail --timestamps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs with custom format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail --format json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Advanced Filtering:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs with regex filter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail --regex &lt;span class="s2"&gt;&amp;#34;error|exception&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs from specific containers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail --container main
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs with custom since time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail --since&lt;span class="o"&gt;=&lt;/span&gt;1h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs with line limits&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tail --tail&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/boz/kail"
&gt;Get tail on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="8-topology---network-topology-visualization"&gt;
8. topology - Network Topology Visualization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#8-topology---network-topology-visualization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 8. topology - Network Topology Visualization" href="#8-topology---network-topology-visualization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Shows pod-to-service-to-node relationships.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The topology plugin visualizes the network topology of your Kubernetes cluster, showing how pods, services, and nodes are connected. It&amp;rsquo;s perfect for understanding network architecture and troubleshooting connectivity issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Network topology visualization&lt;/li&gt;
&lt;li&gt;Pod-to-service mapping&lt;/li&gt;
&lt;li&gt;Node relationship display&lt;/li&gt;
&lt;li&gt;Custom output formats&lt;/li&gt;
&lt;li&gt;Interactive exploration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install topology
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show topology for specific namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl topology -n production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show topology for specific service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl topology service my-service
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show topology with custom format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl topology --format json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show topology with specific labels&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl topology -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;frontend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show topology with verbose output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl topology --verbose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Output Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl topology -n production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Namespace: production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── Service: frontend-service
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── Pod: frontend-pod-1 &lt;span class="o"&gt;(&lt;/span&gt;Node: worker-1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── Pod: frontend-pod-2 &lt;span class="o"&gt;(&lt;/span&gt;Node: worker-2&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── Service: backend-service
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── Pod: backend-pod-1 &lt;span class="o"&gt;(&lt;/span&gt;Node: worker-1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── Pod: backend-pod-2 &lt;span class="o"&gt;(&lt;/span&gt;Node: worker-3&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── Service: database-service
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── Pod: database-pod-1 &lt;span class="o"&gt;(&lt;/span&gt;Node: worker-3&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/jthomperoo/kubectl-topology"
&gt;Get topology on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="9-view-secret---secret-decoding"&gt;
9. view-secret - Secret Decoding
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#9-view-secret---secret-decoding" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 9. view-secret - Secret Decoding" href="#9-view-secret---secret-decoding"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Decodes and shows Kubernetes Secrets in a readable format.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The view-secret plugin makes it easy to view and decode Kubernetes Secrets without manually base64 decoding each value. It&amp;rsquo;s essential for debugging and verifying secret configurations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatic base64 decoding&lt;/li&gt;
&lt;li&gt;Readable secret display&lt;/li&gt;
&lt;li&gt;Multiple output formats&lt;/li&gt;
&lt;li&gt;Secure handling&lt;/li&gt;
&lt;li&gt;Custom formatting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install view-secret
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View secret in readable format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl view-secret my-secret
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View secret with specific key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl view-secret my-secret username
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View secret in JSON format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl view-secret my-secret --format json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View secret with custom output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl view-secret my-secret --output yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View secret from different namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl view-secret my-secret -n production
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Security Considerations:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View secret without logging to history&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl view-secret my-secret --no-log
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View secret with minimal output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl view-secret my-secret --quiet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# View secret with specific keys only&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl view-secret my-secret --keys username,password
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/eladb/kubectl-view-secret"
&gt;Get view-secret on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="10-get-all---comprehensive-resource-listing"&gt;
10. get-all - Comprehensive Resource Listing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#10-get-all---comprehensive-resource-listing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 10. get-all - Comprehensive Resource Listing" href="#10-get-all---comprehensive-resource-listing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Lists all namespaced resources in a cluster.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The get-all plugin provides a comprehensive view of all resources in your cluster or namespace, making it easier to audit and understand your Kubernetes environment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Comprehensive resource listing&lt;/li&gt;
&lt;li&gt;Namespace-specific views&lt;/li&gt;
&lt;li&gt;Custom filtering options&lt;/li&gt;
&lt;li&gt;Multiple output formats&lt;/li&gt;
&lt;li&gt;Resource categorization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install get-all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources in current namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources in specific namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all -n production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources with custom format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all --output wide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources with specific labels&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;frontend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources with custom columns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all --custom-columns&lt;span class="o"&gt;=&lt;/span&gt;NAME:.metadata.name,KIND:.kind,AGE:.metadata.creationTimestamp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Advanced Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources with status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all --show-status
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources with events&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all --show-events
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources with custom sorting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all --sort-by&lt;span class="o"&gt;=&lt;/span&gt;.metadata.creationTimestamp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all resources with specific API versions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get-all --api-version&lt;span class="o"&gt;=&lt;/span&gt;v1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/corneliusweig/ketall"
&gt;Get get-all on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="installing-and-managing-krew"&gt;
Installing and Managing Krew
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#installing-and-managing-krew" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Installing and Managing Krew" href="#installing-and-managing-krew"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="initial-setup"&gt;
Initial Setup
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#initial-setup" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Initial Setup" href="#initial-setup"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install Krew&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;set&lt;/span&gt; -x&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;mktemp -d&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;OS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname &lt;span class="p"&gt;|&lt;/span&gt; tr &lt;span class="s1"&gt;&amp;#39;[:upper:]&amp;#39;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;[:lower:]&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -m &lt;span class="p"&gt;|&lt;/span&gt; sed -e &lt;span class="s1"&gt;&amp;#39;s/x86_64/amd64/&amp;#39;&lt;/span&gt; -e &lt;span class="s1"&gt;&amp;#39;s/\(arm\)\(64\)\?.*/\1\2/&amp;#39;&lt;/span&gt; -e &lt;span class="s1"&gt;&amp;#39;s/aarch64$/arm64/&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;KREW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;krew-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; curl -fsSLO &lt;span class="s2"&gt;&amp;#34;https://github.com/kubernetes-sigs/krew/releases/latest/download/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tar zxvf &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ./&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; install krew
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add Krew to PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW_ROOT&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.krew&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="plugin-management"&gt;
Plugin Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#plugin-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Plugin Management" href="#plugin-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List installed plugins&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Search for plugins&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew search &amp;lt;plugin-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install a plugin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install &amp;lt;plugin-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Update plugins&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Remove a plugin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew uninstall &amp;lt;plugin-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show plugin information&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew info &amp;lt;plugin-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="shell-integration"&gt;
Shell Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#shell-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Shell Integration" href="#shell-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add to your shell profile (.bashrc, .zshrc, etc.)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW_ROOT&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.krew&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enable kubectl completion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;kubectl completion bash&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add custom aliases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;kubectl&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;kctx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;kubectl ctx&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;kns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;kubectl ns&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://krew.sigs.k8s.io/"
&gt;Learn more about krew&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="best-practices-for-krew-plugin-usage"&gt;
Best Practices for Krew Plugin Usage
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#best-practices-for-krew-plugin-usage" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Best Practices for Krew Plugin Usage" href="#best-practices-for-krew-plugin-usage"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-plugin-selection"&gt;
1. Plugin Selection
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#1-plugin-selection" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Plugin Selection" href="#1-plugin-selection"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Choose plugins that solve specific problems&lt;/li&gt;
&lt;li&gt;Verify plugin maintenance and community support&lt;/li&gt;
&lt;li&gt;Test plugins in non-production environments first&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-security-considerations"&gt;
2. Security Considerations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#2-security-considerations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Security Considerations" href="#2-security-considerations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Review plugin source code before installation&lt;/li&gt;
&lt;li&gt;Use plugins from trusted sources&lt;/li&gt;
&lt;li&gt;Be cautious with plugins that require elevated permissions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-performance-optimization"&gt;
3. Performance Optimization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#3-performance-optimization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Performance Optimization" href="#3-performance-optimization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Limit the number of installed plugins&lt;/li&gt;
&lt;li&gt;Use plugins efficiently to avoid performance impact&lt;/li&gt;
&lt;li&gt;Monitor plugin resource usage&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-team-standardization"&gt;
4. Team Standardization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#4-team-standardization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Team Standardization" href="#4-team-standardization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Establish team standards for plugin usage&lt;/li&gt;
&lt;li&gt;Document preferred plugins and configurations&lt;/li&gt;
&lt;li&gt;Share plugin configurations across team members&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="5-maintenance"&gt;
5. Maintenance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#5-maintenance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. Maintenance" href="#5-maintenance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Regularly update plugins for security and features&lt;/li&gt;
&lt;li&gt;Remove unused plugins to reduce clutter&lt;/li&gt;
&lt;li&gt;Monitor plugin compatibility with kubectl updates&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-krew-plugins/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Krew plugins significantly enhance kubectl&amp;rsquo;s functionality, transforming it from a basic CLI tool into a powerful, extensible platform for Kubernetes management. The plugins outlined above provide essential capabilities for context management, resource analysis, security auditing, and productivity enhancement.&lt;/p&gt;
&lt;p&gt;Start with the core plugins (ctx, ns, neat) and gradually expand your toolkit based on your specific needs and workflows. Remember that the best tool is the one that fits your workflow and helps you solve real problems efficiently.&lt;/p&gt;
&lt;p&gt;For teams managing multiple clusters or complex environments, consider creating standardized plugin configurations and documentation to ensure consistency across your organization. The Krew ecosystem continues to grow, so stay updated with new plugins that might benefit your workflow.&lt;/p&gt;
&lt;p&gt;For more information about Kubernetes CLI tools and best practices, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tasks/tools/"
&gt;official Kubernetes documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://krew.sigs.k8s.io/plugins/"
&gt;Krew plugin index&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/kubectl" term="kubectl" label="kubectl"/><category scheme="https://k8s-ops.net/tags/krew" term="krew" label="krew"/><category scheme="https://k8s-ops.net/tags/plugins" term="plugins" label="plugins"/><category scheme="https://k8s-ops.net/tags/productivity" term="productivity" label="productivity"/><category scheme="https://k8s-ops.net/tags/cli" term="cli" label="cli"/></entry><entry><title>How to Hire Kubernetes Experts in 2025</title><link href="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/</id><published>2025-06-23T00:00:00+00:00</published><updated>2025-07-04T14:53:10-04:00</updated><content type="html">
&lt;p&gt;As Kubernetes continues to dominate the container orchestration landscape, finding and hiring qualified Kubernetes experts has become increasingly challenging. With the platform&amp;rsquo;s complexity and rapid evolution, organizations need a strategic approach to identify, evaluate, and attract top talent. This comprehensive guide provides practical strategies for hiring Kubernetes experts in 2025.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="understanding-the-kubernetes-talent-landscape"&gt;
Understanding the Kubernetes Talent Landscape
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#understanding-the-kubernetes-talent-landscape" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Understanding the Kubernetes Talent Landscape" href="#understanding-the-kubernetes-talent-landscape"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="current-market-conditions"&gt;
Current Market Conditions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#current-market-conditions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Current Market Conditions" href="#current-market-conditions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Kubernetes talent market remains highly competitive, with demand significantly outstripping supply. According to recent industry surveys, Kubernetes skills are among the most sought-after in the DevOps and cloud-native space.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Market Trends:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High Demand&lt;/strong&gt;: Kubernetes expertise commands premium salaries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill Gap&lt;/strong&gt;: Limited supply of experienced practitioners&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rapid Evolution&lt;/strong&gt;: Continuous learning requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specialization&lt;/strong&gt;: Growing need for domain-specific expertise&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="role-categories-and-requirements"&gt;
Role Categories and Requirements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#role-categories-and-requirements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Role Categories and Requirements" href="#role-categories-and-requirements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Entry-Level Kubernetes Engineer:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basic Kubernetes concepts and kubectl usage&lt;/li&gt;
&lt;li&gt;Understanding of Pods, Services, and Deployments&lt;/li&gt;
&lt;li&gt;Experience with container technologies (Docker)&lt;/li&gt;
&lt;li&gt;Familiarity with YAML and basic troubleshooting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mid-Level Kubernetes Engineer:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deep understanding of Kubernetes architecture&lt;/li&gt;
&lt;li&gt;Experience with advanced concepts (StatefulSets, Operators)&lt;/li&gt;
&lt;li&gt;Knowledge of networking, storage, and security&lt;/li&gt;
&lt;li&gt;Practical experience with production clusters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Senior Kubernetes Engineer:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expert-level knowledge of Kubernetes internals&lt;/li&gt;
&lt;li&gt;Experience with multi-cluster management&lt;/li&gt;
&lt;li&gt;Deep understanding of performance optimization&lt;/li&gt;
&lt;li&gt;Leadership and architectural skills&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes Platform Engineer:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Focus on developer experience and tooling&lt;/li&gt;
&lt;li&gt;Experience with GitOps and CI/CD integration&lt;/li&gt;
&lt;li&gt;Knowledge of service mesh and observability&lt;/li&gt;
&lt;li&gt;Platform design and implementation skills&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/overview/"
&gt;Learn more about Kubernetes roles&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="crafting-effective-job-descriptions"&gt;
Crafting Effective Job Descriptions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#crafting-effective-job-descriptions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Crafting Effective Job Descriptions" href="#crafting-effective-job-descriptions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="essential-components"&gt;
Essential Components
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#essential-components" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Essential Components" href="#essential-components"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Clear Role Definition:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Senior Kubernetes Engineer
We&amp;#39;re looking for a Kubernetes expert to help us scale our containerized applications and build robust, self-healing infrastructure. You&amp;#39;ll work with our platform team to design, implement, and maintain our Kubernetes clusters across multiple environments.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Specific Technical Requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Core Skills&lt;/strong&gt;: Kubernetes 1.28+, Docker, Linux administration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced Concepts&lt;/strong&gt;: Operators, CRDs, admission controllers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;: Terraform, Ansible, or similar IaC tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: Prometheus, Grafana, or similar observability stack&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networking&lt;/strong&gt;: CNI plugins, service mesh (Istio/Linkerd)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: RBAC, network policies, pod security standards&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Experience Levels:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Junior&lt;/strong&gt;: 1-2 years of Kubernetes experience&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mid-level&lt;/strong&gt;: 3-5 years with production experience&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Senior&lt;/strong&gt;: 5+ years with large-scale deployments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lead&lt;/strong&gt;: 7+ years with team leadership experience&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="red-flags-to-avoid"&gt;
Red Flags to Avoid
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#red-flags-to-avoid" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Red Flags to Avoid" href="#red-flags-to-avoid"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Vague Requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Kubernetes experience&amp;rdquo; (too broad)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Cloud experience&amp;rdquo; (not specific enough)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;DevOps skills&amp;rdquo; (overly generic)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Unrealistic Expectations:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requiring 5+ years of experience for entry-level roles&lt;/li&gt;
&lt;li&gt;Expecting expertise in every Kubernetes ecosystem tool&lt;/li&gt;
&lt;li&gt;Demanding experience with specific versions that are too new&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Poor Compensation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Below-market salaries for specialized skills&lt;/li&gt;
&lt;li&gt;No mention of benefits or growth opportunities&lt;/li&gt;
&lt;li&gt;Unclear career progression paths&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/overview/"
&gt;Learn more about Kubernetes career paths&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="sourcing-strategies"&gt;
Sourcing Strategies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#sourcing-strategies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Sourcing Strategies" href="#sourcing-strategies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="traditional-channels"&gt;
Traditional Channels
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#traditional-channels" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Traditional Channels" href="#traditional-channels"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Job Boards:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LinkedIn, Indeed, Glassdoor&lt;/li&gt;
&lt;li&gt;Specialized DevOps job boards&lt;/li&gt;
&lt;li&gt;Kubernetes community job boards&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Professional Networks:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LinkedIn connections and referrals&lt;/li&gt;
&lt;li&gt;Industry conferences and meetups&lt;/li&gt;
&lt;li&gt;Professional associations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recruitment Agencies:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Specialized DevOps recruiters&lt;/li&gt;
&lt;li&gt;Technical recruitment firms&lt;/li&gt;
&lt;li&gt;Executive search for senior roles&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="emerging-channels"&gt;
Emerging Channels
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#emerging-channels" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Emerging Channels" href="#emerging-channels"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Open Source Contributions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub activity and contributions&lt;/li&gt;
&lt;li&gt;Kubernetes community participation&lt;/li&gt;
&lt;li&gt;Open source project maintainers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Community Engagement:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes meetups and conferences&lt;/li&gt;
&lt;li&gt;Online forums and discussion groups&lt;/li&gt;
&lt;li&gt;Technical blogs and publications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Social Media:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Twitter/X for technical discussions&lt;/li&gt;
&lt;li&gt;Reddit communities (r/kubernetes, r/devops)&lt;/li&gt;
&lt;li&gt;YouTube channels and podcasts&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="passive-candidate-outreach"&gt;
Passive Candidate Outreach
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#passive-candidate-outreach" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Passive Candidate Outreach" href="#passive-candidate-outreach"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Content Marketing:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Technical blog posts and tutorials&lt;/li&gt;
&lt;li&gt;Conference presentations and workshops&lt;/li&gt;
&lt;li&gt;Open source contributions and projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Employer Branding:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Showcase Kubernetes projects and challenges&lt;/li&gt;
&lt;li&gt;Highlight learning and development opportunities&lt;/li&gt;
&lt;li&gt;Demonstrate commitment to open source&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/topics/kubernetes"
&gt;Find Kubernetes talent on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="assessment-and-evaluation"&gt;
Assessment and Evaluation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#assessment-and-evaluation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Assessment and Evaluation" href="#assessment-and-evaluation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="technical-screening"&gt;
Technical Screening
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#technical-screening" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Technical Screening" href="#technical-screening"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Initial Assessment:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Online Coding Tests&lt;/strong&gt;: Kubernetes-specific scenarios&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Take-home Projects&lt;/strong&gt;: Real-world cluster setup challenges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technical Interviews&lt;/strong&gt;: Deep-dive into Kubernetes concepts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Sample Technical Questions:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Architecture and Design:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;How would you design a multi-tenant Kubernetes cluster?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;What&amp;rsquo;s your approach to implementing zero-downtime deployments?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;How do you handle secrets management in Kubernetes?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Troubleshooting Scenarios:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;A Pod is stuck in Pending state. Walk me through your debugging process.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;How would you investigate high memory usage across your cluster?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;What steps would you take if a service is unreachable?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Advanced Concepts:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Explain the difference between Init Containers and Sidecar Containers.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;How do you implement custom admission controllers?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;What&amp;rsquo;s your experience with Kubernetes operators?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="practical-assessments"&gt;
Practical Assessments
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#practical-assessments" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Practical Assessments" href="#practical-assessments"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Cluster Setup Challenge:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Sample assessment: Multi-tier application deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# Candidates must create:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# - Namespace with resource quotas&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# - Frontend deployment with 3 replicas&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# - Backend deployment with database&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# - Services and ingress configuration&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# - Network policies for security&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="c"&gt;# - Monitoring and logging setup&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Troubleshooting Exercise:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provide a &amp;ldquo;broken&amp;rdquo; cluster configuration&lt;/li&gt;
&lt;li&gt;Ask candidates to identify and fix issues&lt;/li&gt;
&lt;li&gt;Evaluate debugging methodology and approach&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Architecture Design:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Present a business requirement&lt;/li&gt;
&lt;li&gt;Ask for Kubernetes architecture design&lt;/li&gt;
&lt;li&gt;Evaluate trade-offs and decision-making&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="behavioral-assessment"&gt;
Behavioral Assessment
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#behavioral-assessment" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Behavioral Assessment" href="#behavioral-assessment"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Leadership and Collaboration:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Experience mentoring junior engineers&lt;/li&gt;
&lt;li&gt;Cross-functional team collaboration&lt;/li&gt;
&lt;li&gt;Conflict resolution and communication&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Problem-solving Approach:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How they handle complex technical challenges&lt;/li&gt;
&lt;li&gt;Learning and adaptation strategies&lt;/li&gt;
&lt;li&gt;Documentation and knowledge sharing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cultural Fit:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alignment with company values&lt;/li&gt;
&lt;li&gt;Work style and preferences&lt;/li&gt;
&lt;li&gt;Growth and development goals&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/"
&gt;Learn more about Kubernetes best practices&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="interview-process-design"&gt;
Interview Process Design
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#interview-process-design" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Interview Process Design" href="#interview-process-design"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="multi-stage-approach"&gt;
Multi-stage Approach
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#multi-stage-approach" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Multi-stage Approach" href="#multi-stage-approach"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Stage 1: Initial Screening (30 minutes)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;High-level technical discussion&lt;/li&gt;
&lt;li&gt;Experience overview and career goals&lt;/li&gt;
&lt;li&gt;Cultural fit assessment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Stage 2: Technical Deep-dive (60-90 minutes)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Detailed technical questions&lt;/li&gt;
&lt;li&gt;Architecture discussions&lt;/li&gt;
&lt;li&gt;Problem-solving scenarios&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Stage 3: Practical Assessment (2-4 hours)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Take-home project or live coding&lt;/li&gt;
&lt;li&gt;Real-world scenario simulation&lt;/li&gt;
&lt;li&gt;Tool and technology evaluation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Stage 4: Team Interview (60 minutes)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Collaboration with potential teammates&lt;/li&gt;
&lt;li&gt;Code review and pair programming&lt;/li&gt;
&lt;li&gt;Team dynamics assessment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Stage 5: Leadership/Culture (30-60 minutes)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Meeting with engineering leadership&lt;/li&gt;
&lt;li&gt;Company culture and values discussion&lt;/li&gt;
&lt;li&gt;Career growth and opportunities&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="interview-best-practices"&gt;
Interview Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#interview-best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Interview Best Practices" href="#interview-best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Structured Questions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use consistent evaluation criteria&lt;/li&gt;
&lt;li&gt;Document responses and observations&lt;/li&gt;
&lt;li&gt;Provide clear feedback and next steps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Inclusive Design:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avoid biased or exclusionary language&lt;/li&gt;
&lt;li&gt;Provide accommodations for different needs&lt;/li&gt;
&lt;li&gt;Focus on skills and potential rather than background&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Candidate Experience:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear communication about process and timeline&lt;/li&gt;
&lt;li&gt;Respect for candidate&amp;rsquo;s time and preparation&lt;/li&gt;
&lt;li&gt;Constructive feedback regardless of outcome&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/community/"
&gt;Learn more about inclusive hiring practices&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="compensation-and-benefits"&gt;
Compensation and Benefits
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#compensation-and-benefits" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Compensation and Benefits" href="#compensation-and-benefits"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="market-research"&gt;
Market Research
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#market-research" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Market Research" href="#market-research"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Salary Benchmarks:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Research local and remote market rates&lt;/li&gt;
&lt;li&gt;Consider experience level and specialization&lt;/li&gt;
&lt;li&gt;Factor in cost of living and market conditions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Compensation Components:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Base Salary&lt;/strong&gt;: Competitive market rate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Equity/Stock Options&lt;/strong&gt;: Long-term incentives&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Bonuses&lt;/strong&gt;: Achievement-based rewards&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Benefits&lt;/strong&gt;: Health, retirement, professional development&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="non-monetary-benefits"&gt;
Non-monetary Benefits
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#non-monetary-benefits" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Non-monetary Benefits" href="#non-monetary-benefits"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Professional Development:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conference attendance and training budgets&lt;/li&gt;
&lt;li&gt;Certification programs and courses&lt;/li&gt;
&lt;li&gt;Mentorship and career development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Work Environment:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flexible work arrangements&lt;/li&gt;
&lt;li&gt;Modern development tools and infrastructure&lt;/li&gt;
&lt;li&gt;Collaborative and supportive culture&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Growth Opportunities:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear career progression paths&lt;/li&gt;
&lt;li&gt;Leadership and management opportunities&lt;/li&gt;
&lt;li&gt;Technical specialization tracks&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="onboarding-and-retention"&gt;
Onboarding and Retention
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#onboarding-and-retention" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Onboarding and Retention" href="#onboarding-and-retention"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="effective-onboarding"&gt;
Effective Onboarding
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#effective-onboarding" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Effective Onboarding" href="#effective-onboarding"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Technical Setup:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access to development environments&lt;/li&gt;
&lt;li&gt;Documentation and runbooks&lt;/li&gt;
&lt;li&gt;Mentorship and pair programming&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Knowledge Transfer:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Architecture and design decisions&lt;/li&gt;
&lt;li&gt;Operational procedures and tools&lt;/li&gt;
&lt;li&gt;Team processes and communication&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Integration:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Team introductions and relationships&lt;/li&gt;
&lt;li&gt;Project assignments and responsibilities&lt;/li&gt;
&lt;li&gt;Performance expectations and feedback&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="retention-strategies"&gt;
Retention Strategies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#retention-strategies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Retention Strategies" href="#retention-strategies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Continuous Learning:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Regular training and skill development&lt;/li&gt;
&lt;li&gt;Conference attendance and speaking opportunities&lt;/li&gt;
&lt;li&gt;Open source contribution support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Career Growth:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear promotion criteria and timelines&lt;/li&gt;
&lt;li&gt;Leadership and management opportunities&lt;/li&gt;
&lt;li&gt;Technical specialization and expertise development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Work-Life Balance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flexible scheduling and remote work options&lt;/li&gt;
&lt;li&gt;Reasonable workload and expectations&lt;/li&gt;
&lt;li&gt;Support for personal and professional development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/community/"
&gt;Learn more about Kubernetes community&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="common-hiring-mistakes"&gt;
Common Hiring Mistakes
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#common-hiring-mistakes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Common Hiring Mistakes" href="#common-hiring-mistakes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="what-to-avoid"&gt;
What to Avoid
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#what-to-avoid" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What to Avoid" href="#what-to-avoid"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Over-emphasizing Certifications:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;While certifications show commitment, they don&amp;rsquo;t guarantee practical skills&lt;/li&gt;
&lt;li&gt;Focus on real-world experience and problem-solving abilities&lt;/li&gt;
&lt;li&gt;Use certifications as one data point, not the primary criteria&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ignoring Soft Skills:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Technical expertise is important, but collaboration and communication matter&lt;/li&gt;
&lt;li&gt;Evaluate ability to work in teams and mentor others&lt;/li&gt;
&lt;li&gt;Consider cultural fit and alignment with company values&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Rushing the Process:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Take time to thoroughly evaluate candidates&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t compromise on quality for speed&lt;/li&gt;
&lt;li&gt;Ensure all stakeholders are involved in decision-making&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Poor Candidate Experience:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Communicate clearly about process and timeline&lt;/li&gt;
&lt;li&gt;Provide constructive feedback regardless of outcome&lt;/li&gt;
&lt;li&gt;Respect candidate&amp;rsquo;s time and preparation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="red-flags-in-candidates"&gt;
Red Flags in Candidates
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#red-flags-in-candidates" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Red Flags in Candidates" href="#red-flags-in-candidates"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Lack of Practical Experience:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Theoretical knowledge without real-world application&lt;/li&gt;
&lt;li&gt;No experience with production environments&lt;/li&gt;
&lt;li&gt;Unable to discuss specific challenges and solutions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Poor Problem-solving Skills:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unable to think through complex scenarios&lt;/li&gt;
&lt;li&gt;Lack of systematic debugging approach&lt;/li&gt;
&lt;li&gt;No experience with troubleshooting and optimization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Communication Issues:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Difficulty explaining technical concepts&lt;/li&gt;
&lt;li&gt;Poor documentation and knowledge sharing&lt;/li&gt;
&lt;li&gt;Inability to collaborate effectively&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="building-a-kubernetes-talent-pipeline"&gt;
Building a Kubernetes Talent Pipeline
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#building-a-kubernetes-talent-pipeline" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Building a Kubernetes Talent Pipeline" href="#building-a-kubernetes-talent-pipeline"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="long-term-strategies"&gt;
Long-term Strategies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#long-term-strategies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Long-term Strategies" href="#long-term-strategies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;University Partnerships:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internship and co-op programs&lt;/li&gt;
&lt;li&gt;Curriculum development and guest lectures&lt;/li&gt;
&lt;li&gt;Research collaborations and projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Community Engagement:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sponsorship of Kubernetes meetups and conferences&lt;/li&gt;
&lt;li&gt;Open source contributions and projects&lt;/li&gt;
&lt;li&gt;Technical blog posts and tutorials&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Internal Development:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Training programs for existing employees&lt;/li&gt;
&lt;li&gt;Mentorship and knowledge sharing&lt;/li&gt;
&lt;li&gt;Career development and specialization tracks&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="employer-branding"&gt;
Employer Branding
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#employer-branding" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Employer Branding" href="#employer-branding"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Technical Excellence:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Showcase challenging and interesting projects&lt;/li&gt;
&lt;li&gt;Highlight use of cutting-edge technologies&lt;/li&gt;
&lt;li&gt;Demonstrate commitment to best practices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Learning and Growth:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear career progression paths&lt;/li&gt;
&lt;li&gt;Support for continuous learning&lt;/li&gt;
&lt;li&gt;Opportunities for specialization and leadership&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Work Environment:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Collaborative and supportive culture&lt;/li&gt;
&lt;li&gt;Modern tools and infrastructure&lt;/li&gt;
&lt;li&gt;Work-life balance and flexibility&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/how-to-hire-kubernetes-experts-2025/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Hiring Kubernetes experts in 2025 requires a strategic approach that balances technical expertise with cultural fit and growth potential. Success depends on understanding the market, crafting compelling job descriptions, implementing effective assessment processes, and creating an environment that attracts and retains top talent.&lt;/p&gt;
&lt;p&gt;Key success factors include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Clear role definition&lt;/strong&gt; and realistic requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive assessment&lt;/strong&gt; of technical and soft skills&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Competitive compensation&lt;/strong&gt; and benefits packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Effective onboarding&lt;/strong&gt; and retention strategies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long-term talent pipeline&lt;/strong&gt; development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Remember that Kubernetes expertise is valuable and in high demand. Focus on creating an environment where talented engineers want to work and grow, rather than just filling immediate needs. Invest in your team&amp;rsquo;s development and create opportunities for advancement and specialization.&lt;/p&gt;
&lt;p&gt;The most successful organizations in the Kubernetes space are those that view hiring as a long-term investment in their team and culture, not just a short-term staffing need.&lt;/p&gt;
&lt;p&gt;For more information about Kubernetes careers and community involvement, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/"
&gt;official Kubernetes documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/community/"
&gt;Kubernetes community resources&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/hiring" term="hiring" label="hiring"/><category scheme="https://k8s-ops.net/tags/recruitment" term="recruitment" label="recruitment"/><category scheme="https://k8s-ops.net/tags/devops" term="devops" label="devops"/><category scheme="https://k8s-ops.net/tags/career" term="career" label="career"/><category scheme="https://k8s-ops.net/tags/talent" term="talent" label="talent"/></entry><entry><title>Kubernetes v1.34 Release Preview: What to Expect</title><link href="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/</id><published>2025-06-15T00:00:00+00:00</published><updated>2025-07-04T14:28:58-04:00</updated><content type="html">
&lt;p&gt;As the Kubernetes community prepares for the v1.34 release cycle, scheduled for early 2026, developers and operators are eagerly anticipating the new features, improvements, and enhancements that will shape the future of container orchestration. Based on ongoing development work, community discussions, and SIG (Special Interest Group) roadmaps, here&amp;rsquo;s a comprehensive preview of what to expect in Kubernetes v1.34.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="release-timeline-and-planning"&gt;
Release Timeline and Planning
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#release-timeline-and-planning" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Timeline and Planning" href="#release-timeline-and-planning"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="development-schedule"&gt;
Development Schedule
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#development-schedule" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Development Schedule" href="#development-schedule"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.34 release cycle follows the established Kubernetes release cadence:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feature Freeze&lt;/strong&gt;: December 2025&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Freeze&lt;/strong&gt;: January 2026&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release Candidate&lt;/strong&gt;: February 2026&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;General Availability&lt;/strong&gt;: March 2026&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="release-team"&gt;
Release Team
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#release-team" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Team" href="#release-team"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.34 release team, led by experienced community members, is focusing on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stability Improvements&lt;/strong&gt;: Enhanced reliability and performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Experience&lt;/strong&gt;: Better tooling and debugging capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Enhancements&lt;/strong&gt;: Advanced security features and compliance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Improved support for edge and IoT workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="expected-major-features"&gt;
Expected Major Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#expected-major-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Expected Major Features" href="#expected-major-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enhanced-webassembly-support"&gt;
1. Enhanced WebAssembly Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#1-enhanced-webassembly-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced WebAssembly Support" href="#1-enhanced-webassembly-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;WebAssembly (Wasm) support is expected to graduate from alpha to beta in v1.34, providing more mature capabilities for running Wasm workloads in Kubernetes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anticipated Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improved Performance&lt;/strong&gt;: Better integration with container runtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Sandboxed execution with better isolation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Tools&lt;/strong&gt;: Better debugging and monitoring capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem Integration&lt;/strong&gt;: Improved support for Wasm toolchains&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Serverless functions&lt;/li&gt;
&lt;li&gt;Edge computing workloads&lt;/li&gt;
&lt;li&gt;Plugin systems&lt;/li&gt;
&lt;li&gt;Cross-platform applications&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-advanced-resource-management"&gt;
2. Advanced Resource Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#2-advanced-resource-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Advanced Resource Management" href="#2-advanced-resource-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Resource management capabilities are expected to receive significant enhancements, particularly around GPU and specialized hardware support.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Improvements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Resource Allocation&lt;/strong&gt;: More sophisticated resource sharing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU Scheduling&lt;/strong&gt;: Enhanced GPU-aware scheduling algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Optimization&lt;/strong&gt;: Better memory pressure handling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Management&lt;/strong&gt;: Improved storage resource allocation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Implementation Examples:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-workload&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-container&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nvidia/cuda:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nvidia.com/gpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;4Gi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nvidia.com/gpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2Gi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-enhanced-observability"&gt;
3. Enhanced Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#3-enhanced-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Enhanced Observability" href="#3-enhanced-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Observability features are expected to receive major updates, building on the structured logging improvements from previous releases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anticipated Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Distributed Tracing&lt;/strong&gt;: Native support for request tracing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metrics Collection&lt;/strong&gt;: Enhanced performance metrics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Log Aggregation&lt;/strong&gt;: Improved log management capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Observability&lt;/strong&gt;: Better support for custom observability tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Configuration Examples:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;observability-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tracing.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; sampling:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; rate: 0.1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; exporters:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - jaeger
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - zipkin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; processors:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - batch
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - memory_limiter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-improved-security-features"&gt;
4. Improved Security Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#4-improved-security-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Improved Security Features" href="#4-improved-security-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Security continues to be a top priority, with several enhancements expected in v1.34.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Security Improvements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhanced RBAC&lt;/strong&gt;: More granular permission controls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network Policies&lt;/strong&gt;: Advanced network security features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pod Security&lt;/strong&gt;: Improved pod security standards&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supply Chain Security&lt;/strong&gt;: Better container image security&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Security Context Enhancements:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secure-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsNonRoot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fsGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;seccompProfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RuntimeDefault&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowPrivilegeEscalation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnlyRootFilesystem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="5-edge-computing-enhancements"&gt;
5. Edge Computing Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#5-edge-computing-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. Edge Computing Enhancements" href="#5-edge-computing-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Edge computing support is expected to mature significantly in v1.34, with better support for resource-constrained environments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anticipated Edge Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lightweight Components&lt;/strong&gt;: Optimized for edge devices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline Operation&lt;/strong&gt;: Better support for intermittent connectivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local Processing&lt;/strong&gt;: Reduced dependency on centralized resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-cluster Management&lt;/strong&gt;: Coordinated edge deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Edge Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Node&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;edge-node-1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;edge&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;factory-floor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offlineMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resourceOptimization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="beta-features-moving-to-stable"&gt;
Beta Features Moving to Stable
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#beta-features-moving-to-stable" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Beta Features Moving to Stable" href="#beta-features-moving-to-stable"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enhanced-api-server-performance"&gt;
1. Enhanced API Server Performance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#1-enhanced-api-server-performance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced API Server Performance" href="#1-enhanced-api-server-performance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;API server performance improvements that have been in beta are expected to graduate to stable, providing better scalability and reliability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Improvements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduced Latency&lt;/strong&gt;: Faster request processing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Memory Management&lt;/strong&gt;: More efficient memory utilization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Caching&lt;/strong&gt;: Enhanced caching mechanisms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection Optimization&lt;/strong&gt;: Better connection pooling&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-advanced-scheduling-features"&gt;
2. Advanced Scheduling Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#2-advanced-scheduling-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Advanced Scheduling Features" href="#2-advanced-scheduling-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Scheduling enhancements are expected to graduate to stable, providing more sophisticated workload placement capabilities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource-aware Scheduling&lt;/strong&gt;: Better resource utilization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost-aware Placement&lt;/strong&gt;: Consideration of resource costs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network-aware Scheduling&lt;/strong&gt;: Network topology consideration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage-aware Placement&lt;/strong&gt;: Optimized storage allocation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-improved-storage-management"&gt;
3. Improved Storage Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#3-improved-storage-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Improved Storage Management" href="#3-improved-storage-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Storage features that have been evolving through beta are expected to reach stable status.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Improvements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Volume Snapshots&lt;/strong&gt;: Enhanced backup capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Provisioning&lt;/strong&gt;: Better storage class support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Capacity Tracking&lt;/strong&gt;: More accurate resource management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-attach Volumes&lt;/strong&gt;: Support for shared storage access&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="alpha-features-to-watch"&gt;
Alpha Features to Watch
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#alpha-features-to-watch" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Alpha Features to Watch" href="#alpha-features-to-watch"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-quantum-computing-support"&gt;
1. Quantum Computing Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#1-quantum-computing-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Quantum Computing Support" href="#1-quantum-computing-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Early support for quantum computing workloads may enter alpha, preparing Kubernetes for future quantum computing integration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Potential Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quantum Resource Management&lt;/strong&gt;: Basic quantum resource allocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quantum Workload Scheduling&lt;/strong&gt;: Preliminary quantum workload support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hybrid Classical-Quantum&lt;/strong&gt;: Support for mixed workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-advanced-aiml-workload-support"&gt;
2. Advanced AI/ML Workload Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#2-advanced-aiml-workload-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Advanced AI/ML Workload Support" href="#2-advanced-aiml-workload-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Enhanced support for artificial intelligence and machine learning workloads is expected to continue evolving.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anticipated Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model Serving&lt;/strong&gt;: Better support for ML model deployment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Training Optimization&lt;/strong&gt;: Enhanced training workload management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Scheduling&lt;/strong&gt;: AI/ML-aware resource allocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: Specialized monitoring for ML workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-sustainability-features"&gt;
3. Sustainability Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#3-sustainability-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Sustainability Features" href="#3-sustainability-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Environmental impact considerations may enter alpha, reflecting the industry&amp;rsquo;s focus on green computing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Potential Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Carbon-aware Scheduling&lt;/strong&gt;: Consideration of environmental impact&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Energy-efficient Placement&lt;/strong&gt;: Optimized for energy consumption&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability Metrics&lt;/strong&gt;: Environmental impact tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Green Computing Policies&lt;/strong&gt;: Sustainability-focused policies&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="deprecations-and-removals"&gt;
Deprecations and Removals
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#deprecations-and-removals" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deprecations and Removals" href="#deprecations-and-removals"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="expected-deprecations"&gt;
Expected Deprecations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#expected-deprecations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Expected Deprecations" href="#expected-deprecations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Several features are expected to be deprecated in v1.34:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legacy API Versions&lt;/strong&gt;: Older API versions that have been deprecated for multiple releases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated Flags&lt;/strong&gt;: Command-line flags that are no longer recommended&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obsolete Configurations&lt;/strong&gt;: Configuration options with better alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="planned-removals"&gt;
Planned Removals
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#planned-removals" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Planned Removals" href="#planned-removals"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Features that may be removed in v1.34:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unused Components&lt;/strong&gt;: Components that are no longer maintained&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated APIs&lt;/strong&gt;: APIs that have been deprecated for multiple releases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy Tools&lt;/strong&gt;: Tools that have been replaced by newer alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="performance-improvements"&gt;
Performance Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#performance-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Improvements" href="#performance-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="scheduler-enhancements"&gt;
Scheduler Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#scheduler-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Scheduler Enhancements" href="#scheduler-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Kubernetes scheduler is expected to receive significant performance improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Algorithms&lt;/strong&gt;: Improved scheduling algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallel Processing&lt;/strong&gt;: Better utilization of multiple cores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Efficiency&lt;/strong&gt;: Reduced memory footprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Better performance at scale&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="etcd-optimizations"&gt;
etcd Optimizations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#etcd-optimizations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor etcd Optimizations" href="#etcd-optimizations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;etcd, the backing store for Kubernetes, is expected to receive optimizations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduced Storage Requirements&lt;/strong&gt;: More efficient data storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster Operations&lt;/strong&gt;: Improved read and write performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Compression&lt;/strong&gt;: Enhanced data compression algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Reliability&lt;/strong&gt;: Better fault tolerance and recovery&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="community-and-ecosystem-impact"&gt;
Community and Ecosystem Impact
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#community-and-ecosystem-impact" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community and Ecosystem Impact" href="#community-and-ecosystem-impact"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="developer-experience"&gt;
Developer Experience
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#developer-experience" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Developer Experience" href="#developer-experience"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;v1.34 is expected to focus heavily on improving developer experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better Tooling&lt;/strong&gt;: Enhanced development tools and utilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplified Configuration&lt;/strong&gt;: Easier configuration management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Documentation&lt;/strong&gt;: Better documentation and examples&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Debugging&lt;/strong&gt;: Better debugging and troubleshooting capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="operator-experience"&gt;
Operator Experience
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#operator-experience" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Operator Experience" href="#operator-experience"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Operators can expect improvements in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: Better monitoring and alerting capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Troubleshooting&lt;/strong&gt;: Enhanced troubleshooting tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automation&lt;/strong&gt;: Improved automation and orchestration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance&lt;/strong&gt;: Better compliance and governance features&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="migration-and-upgrade-considerations"&gt;
Migration and Upgrade Considerations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#migration-and-upgrade-considerations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Migration and Upgrade Considerations" href="#migration-and-upgrade-considerations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="pre-upgrade-preparation"&gt;
Pre-upgrade Preparation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#pre-upgrade-preparation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Pre-upgrade Preparation" href="#pre-upgrade-preparation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Organizations should prepare for v1.34 by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reviewing Deprecations&lt;/strong&gt;: Understanding what features will be deprecated&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing Applications&lt;/strong&gt;: Ensuring applications work with new features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updating Tools&lt;/strong&gt;: Updating kubectl and other client tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planning Migration&lt;/strong&gt;: Creating migration plans for deprecated features&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="upgrade-strategy"&gt;
Upgrade Strategy
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#upgrade-strategy" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Upgrade Strategy" href="#upgrade-strategy"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Recommended upgrade approach:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Staging Environment&lt;/strong&gt;: Test upgrades in staging first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gradual Rollout&lt;/strong&gt;: Use rolling upgrades for production&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;: Closely monitor during and after upgrades&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollback Plan&lt;/strong&gt;: Have rollback procedures ready&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Document any issues and solutions&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-ahead-beyond-v134"&gt;
Looking Ahead: Beyond v1.34
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#looking-ahead-beyond-v134" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Ahead: Beyond v1.34" href="#looking-ahead-beyond-v134"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="future-directions"&gt;
Future Directions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#future-directions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Future Directions" href="#future-directions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Kubernetes community is already planning beyond v1.34:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simplification&lt;/strong&gt;: Making Kubernetes easier to use and operate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Expanding edge and IoT capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI/ML Integration&lt;/strong&gt;: Better support for AI/ML workloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability&lt;/strong&gt;: Environmental impact considerations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-platform&lt;/strong&gt;: Better support for diverse architectures&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="community-evolution"&gt;
Community Evolution
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#community-evolution" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Evolution" href="#community-evolution"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The community continues to evolve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Diversity&lt;/strong&gt;: Increasing diversity in contributors and leadership&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Education&lt;/strong&gt;: Better educational resources and training&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability&lt;/strong&gt;: Ensuring long-term project sustainability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global Reach&lt;/strong&gt;: Expanding to new regions and markets&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-34-release-preview/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Kubernetes v1.34 promises to be an exciting release with significant improvements in performance, security, observability, and developer experience. The focus on edge computing, WebAssembly support, and enhanced resource management reflects the evolving needs of the cloud-native ecosystem.&lt;/p&gt;
&lt;p&gt;Organizations should start preparing now by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Monitoring Development&lt;/strong&gt;: Following SIG discussions and proposals&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing Features&lt;/strong&gt;: Experimenting with alpha and beta features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planning Upgrades&lt;/strong&gt;: Creating upgrade strategies and timelines&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Training Teams&lt;/strong&gt;: Ensuring teams are ready for new features&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Kubernetes community&amp;rsquo;s commitment to innovation, stability, and user experience ensures that v1.34 will continue the platform&amp;rsquo;s evolution as the foundation of modern cloud computing. As always, the best approach is to stay engaged with the community, test new features early, and plan upgrades carefully to maximize the benefits of the new release.&lt;/p&gt;
&lt;p&gt;For the latest information on v1.34 development, follow the &lt;a
class="gblog-markdown__link"
href="https://github.com/kubernetes/sig-release"
&gt;Kubernetes SIG-Release discussions&lt;/a&gt; and &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/community/"
&gt;community meetings&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/releases" term="releases" label="releases"/><category scheme="https://k8s-ops.net/tags/v1.34" term="v1.34" label="v1.34"/><category scheme="https://k8s-ops.net/tags/features" term="features" label="features"/><category scheme="https://k8s-ops.net/tags/preview" term="preview" label="preview"/><category scheme="https://k8s-ops.net/tags/2025" term="2025" label="2025"/></entry><entry><title>Basic Kubernetes Interview Questions (2025 Edition)</title><link href="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/</id><published>2025-06-01T00:00:00+00:00</published><updated>2025-07-04T14:53:10-04:00</updated><content type="html">
&lt;p&gt;Kubernetes has become the de facto standard for container orchestration, making it an essential skill for anyone entering the DevOps, cloud engineering, or platform engineering space. Whether you&amp;rsquo;re a hiring manager evaluating entry-level candidates or a professional preparing for your first Kubernetes interview, this guide covers the fundamental concepts that demonstrate core understanding.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="what-is-kubernetes-and-what-problems-does-it-solve"&gt;
What is Kubernetes and what problems does it solve?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#what-is-kubernetes-and-what-problems-does-it-solve" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What is Kubernetes and what problems does it solve?" href="#what-is-kubernetes-and-what-problems-does-it-solve"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Kubernetes is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. It solves several critical problems in modern application deployment:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Problems it solves:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container Orchestration&lt;/strong&gt;: Manages thousands of containers across multiple hosts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;: Automatically finds and connects services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load Balancing&lt;/strong&gt;: Distributes traffic across multiple instances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-healing&lt;/strong&gt;: Automatically replaces failed containers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Horizontal Scaling&lt;/strong&gt;: Scales applications up or down based on demand&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rolling Updates&lt;/strong&gt;: Updates applications without downtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Management&lt;/strong&gt;: Efficiently allocates CPU, memory, and storage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Key Concepts to Mention:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Declarative configuration (desired state vs. current state)&lt;/li&gt;
&lt;li&gt;API-driven architecture&lt;/li&gt;
&lt;li&gt;Cloud-native design principles&lt;/li&gt;
&lt;li&gt;Multi-cloud and hybrid cloud support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Kubernetes is a container orchestration platform that solves the complexity of managing containerized applications at scale. Instead of manually deploying containers on individual servers, Kubernetes provides automation for deployment, scaling, load balancing, and self-healing. It&amp;rsquo;s like having an intelligent system that ensures your applications are always running, properly distributed, and automatically recover from failures.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/overview/"
&gt;Learn more about Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="describe-the-function-of-a-pod"&gt;
Describe the function of a Pod.
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#describe-the-function-of-a-pod" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Describe the function of a Pod." href="#describe-the-function-of-a-pod"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
A Pod is the smallest deployable unit in Kubernetes. It represents a single instance of a running process in your cluster and can contain one or more containers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Points:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Atomic Unit&lt;/strong&gt;: Pods are the basic building blocks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared Resources&lt;/strong&gt;: Containers in a Pod share network namespace and storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle&lt;/strong&gt;: Pods are ephemeral and can be created, destroyed, and recreated&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IP Address&lt;/strong&gt;: Each Pod gets its own IP address&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scheduling&lt;/strong&gt;: Pods are scheduled to nodes by the scheduler&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Container Relationship:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;main-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sidecar&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;busybox:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sh&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;while true; do echo &amp;#34;sidecar running&amp;#34;; sleep 30; done&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;A Pod is the smallest unit in Kubernetes that can be deployed. Think of it as a wrapper around one or more containers that share the same network namespace, storage, and lifecycle. For example, if you have a web application that needs a logging sidecar, both containers would run in the same Pod so they can communicate via localhost and share the same network identity.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/pods/"
&gt;Learn more about Pods&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="whats-the-difference-between-a-deployment-and-a-statefulset"&gt;
What&amp;rsquo;s the difference between a Deployment and a StatefulSet?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#whats-the-difference-between-a-deployment-and-a-statefulset" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What&amp;rsquo;s the difference between a Deployment and a StatefulSet?" href="#whats-the-difference-between-a-deployment-and-a-statefulset"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Deployments and StatefulSets are both controllers that manage Pods, but they serve different purposes based on the application&amp;rsquo;s state requirements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deployment:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stateless Applications&lt;/strong&gt;: Designed for applications that don&amp;rsquo;t need persistent state&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Random Names&lt;/strong&gt;: Pods get random names (e.g., &lt;code&gt;app-abc123&lt;/code&gt;, &lt;code&gt;app-def456&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interchangeable&lt;/strong&gt;: Any Pod can replace any other Pod&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rolling Updates&lt;/strong&gt;: Supports rolling updates and rollbacks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scaling&lt;/strong&gt;: Easy horizontal scaling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;StatefulSet:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stateful Applications&lt;/strong&gt;: Designed for applications that need stable, unique identities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ordered Names&lt;/strong&gt;: Pods get predictable names (e.g., &lt;code&gt;app-0&lt;/code&gt;, &lt;code&gt;app-1&lt;/code&gt;, &lt;code&gt;app-2&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stable Network&lt;/strong&gt;: Each Pod gets a stable network identity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ordered Operations&lt;/strong&gt;: Creates and deletes Pods in order&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistent Storage&lt;/strong&gt;: Each Pod can have its own persistent volume&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Deployments are for stateless applications where any instance can handle any request. Think of a web server - you can have 10 instances and it doesn&amp;rsquo;t matter which one serves a request. StatefulSets are for applications like databases where each instance has a specific role, needs stable network identity, and requires persistent storage. For example, in a Redis cluster, each node needs to know its position and maintain its data.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/"
&gt;Learn more about Deployments&lt;/a&gt;
&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/"
&gt;Learn more about StatefulSets&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-does-a-service-work-in-kubernetes"&gt;
How does a Service work in Kubernetes?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#how-does-a-service-work-in-kubernetes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How does a Service work in Kubernetes?" href="#how-does-a-service-work-in-kubernetes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
A Service provides a stable network endpoint for accessing a set of Pods. It abstracts the underlying Pod IPs and provides load balancing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Functions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;: Provides a stable IP address and DNS name&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load Balancing&lt;/strong&gt;: Distributes traffic across multiple Pods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abstraction&lt;/strong&gt;: Hides Pod lifecycle from clients&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Port Mapping&lt;/strong&gt;: Maps service ports to container ports&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Service Types:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ClusterIP&lt;/strong&gt;: Internal access only (default)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NodePort&lt;/strong&gt;: External access via node IP and port&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LoadBalancer&lt;/strong&gt;: External access via cloud load balancer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ExternalName&lt;/strong&gt;: Maps service to external DNS name&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterIP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;A Service acts as a stable frontend for your Pods. When Pods are created or destroyed, the Service automatically updates its endpoints to route traffic to the available Pods. It provides load balancing and service discovery. For example, if you have 3 Pods running your web application, the Service will distribute incoming requests across all three Pods and automatically handle Pod failures by routing traffic to healthy Pods.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/services-networking/service/"
&gt;Learn more about Services&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="what-is-a-configmap-vs-a-secret"&gt;
What is a ConfigMap vs. a Secret?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#what-is-a-configmap-vs-a-secret" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What is a ConfigMap vs. a Secret?" href="#what-is-a-configmap-vs-a-secret"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Both ConfigMaps and Secrets are used to store configuration data, but they serve different purposes based on the sensitivity of the data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ConfigMap:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Non-sensitive Data&lt;/strong&gt;: Configuration files, environment variables, command-line arguments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plain Text&lt;/strong&gt;: Data is stored in plain text&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Examples&lt;/strong&gt;: Database URLs, feature flags, application settings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;: Configuration that can be shared or version controlled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Secret:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sensitive Data&lt;/strong&gt;: Passwords, API keys, certificates, tokens&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Base64 Encoded&lt;/strong&gt;: Data is base64 encoded (not encrypted)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Examples&lt;/strong&gt;: Database passwords, OAuth tokens, TLS certificates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;: Credentials and sensitive configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ConfigMap Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;database_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;postgresql://db.example.com:5432/mydb&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;log_level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;INFO&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature_flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; enable_cache=true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; debug_mode=false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Secret Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Secret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-secrets&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Opaque&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;db_password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cGFzc3dvcmQxMjM= &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# base64 encoded&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;YXBpLWtleS1oZXJl&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;ConfigMaps store non-sensitive configuration like database URLs, log levels, or feature flags. Secrets store sensitive data like passwords, API keys, or certificates. The main difference is that Secrets are base64 encoded and treated with more care by Kubernetes. You&amp;rsquo;d use a ConfigMap for something like &amp;lsquo;database_url&amp;rsquo; and a Secret for &amp;lsquo;database_password&amp;rsquo;. Both can be mounted as environment variables or files in your Pods.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/configuration/configmap/"
&gt;Learn more about ConfigMaps&lt;/a&gt;
&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/configuration/secret/"
&gt;Learn more about Secrets&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-does-kubernetes-handle-rolling-updates"&gt;
How does Kubernetes handle rolling updates?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#how-does-kubernetes-handle-rolling-updates" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How does Kubernetes handle rolling updates?" href="#how-does-kubernetes-handle-rolling-updates"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Rolling updates allow you to update an application without downtime by gradually replacing old Pods with new ones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Process:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gradual Replacement&lt;/strong&gt;: Updates Pods one by one or in small batches&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Health Checks&lt;/strong&gt;: Verifies new Pods are healthy before continuing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollback Capability&lt;/strong&gt;: Can rollback to previous version if issues occur&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero Downtime&lt;/strong&gt;: Ensures service availability throughout the update&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RollingUpdate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rollingUpdate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxSurge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Maximum extra Pods during update&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxUnavailable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Maximum unavailable Pods during update&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app:v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Rolling updates work by gradually replacing old Pods with new ones. If you have 3 replicas, Kubernetes might update them one at a time. It creates a new Pod with the updated image, waits for it to be healthy, then terminates an old Pod. This continues until all Pods are updated. The key is that there are always enough Pods running to handle traffic, ensuring zero downtime. If something goes wrong, you can quickly rollback to the previous version.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-update-deployment"
&gt;Learn more about Rolling Updates&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="what-are-liveness-and-readiness-probes"&gt;
What are liveness and readiness probes?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#what-are-liveness-and-readiness-probes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What are liveness and readiness probes?" href="#what-are-liveness-and-readiness-probes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Probes are health checks that help Kubernetes determine the health and readiness of your application.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Liveness Probe:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: Determines if the application is alive and running&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt;: Restarts the Pod if the probe fails&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Detects deadlocks, infinite loops, or stuck states&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frequency&lt;/strong&gt;: Runs periodically throughout the Pod&amp;rsquo;s lifecycle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Readiness Probe:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: Determines if the application is ready to receive traffic&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt;: Removes Pod from service endpoints if probe fails&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Ensures application is fully initialized and ready&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frequency&lt;/strong&gt;: Runs before the Pod receives traffic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;livenessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;httpGet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/health&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;periodSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readinessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;httpGet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/ready&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;periodSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;Liveness probes check if your application is alive and should restart the Pod if it fails. For example, if your app gets stuck in a deadlock, the liveness probe would detect this and restart it. Readiness probes check if your app is ready to receive traffic. For example, if your app needs to load configuration or connect to a database, the readiness probe ensures it&amp;rsquo;s fully initialized before receiving requests. Liveness probes restart Pods, while readiness probes just remove them from the load balancer.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/"
&gt;Learn more about Probes&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="explain-the-role-of-kubelet-kube-apiserver-and-etcd"&gt;
Explain the role of kubelet, kube-apiserver, and etcd.
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#explain-the-role-of-kubelet-kube-apiserver-and-etcd" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Explain the role of kubelet, kube-apiserver, and etcd." href="#explain-the-role-of-kubelet-kube-apiserver-and-etcd"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
These are core components of the Kubernetes control plane that work together to manage the cluster.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;kubelet:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Role&lt;/strong&gt;: Primary node agent that runs on each node&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Responsibilities&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Manages Pod lifecycle on the node&lt;/li&gt;
&lt;li&gt;Reports node and Pod status to API server&lt;/li&gt;
&lt;li&gt;Executes Pod specifications&lt;/li&gt;
&lt;li&gt;Handles container runtime communication&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location&lt;/strong&gt;: Runs on every worker node&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;kube-apiserver:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Role&lt;/strong&gt;: Frontend for the Kubernetes control plane&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Responsibilities&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Exposes the Kubernetes API&lt;/li&gt;
&lt;li&gt;Validates and processes API requests&lt;/li&gt;
&lt;li&gt;Manages authentication and authorization&lt;/li&gt;
&lt;li&gt;Coordinates all cluster operations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location&lt;/strong&gt;: Runs on control plane nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;etcd:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Role&lt;/strong&gt;: Distributed key-value store that stores all cluster data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Responsibilities&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Stores cluster state and configuration&lt;/li&gt;
&lt;li&gt;Provides consistency and reliability&lt;/li&gt;
&lt;li&gt;Handles leader election&lt;/li&gt;
&lt;li&gt;Maintains cluster data integrity&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location&lt;/strong&gt;: Runs on control plane nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;kubelet is like a supervisor on each worker node - it makes sure Pods are running correctly and reports back to the control plane. kube-apiserver is the front door to the cluster - all requests go through it, and it validates and processes them. etcd is the cluster&amp;rsquo;s memory - it stores all the configuration and state information. Think of it like this: you send a request to create a Pod to the API server, it validates it and stores the information in etcd, then kubelet on the appropriate node reads the information and creates the Pod.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/overview/components/"
&gt;Learn more about Kubernetes Components&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="how-do-you-scale-an-application-in-kubernetes"&gt;
How do you scale an application in Kubernetes?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#how-do-you-scale-an-application-in-kubernetes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor How do you scale an application in Kubernetes?" href="#how-do-you-scale-an-application-in-kubernetes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Kubernetes provides multiple ways to scale applications, both manually and automatically.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Manual Scaling:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scale deployment to 5 replicas&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl scale deployment my-app --replicas&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scale using YAML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f - &lt;span class="s"&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;apiVersion: apps/v1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;kind: Deployment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; name: my-app
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; replicas: 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Automatic Scaling (HPA):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;autoscaling/v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HorizontalPodAutoscaler&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app-hpa&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scaleTargetRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minReplicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxReplicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Resource&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cpu&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Utilization&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;averageUtilization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;70&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Scaling Types:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Horizontal Scaling&lt;/strong&gt;: Add more Pod instances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vertical Scaling&lt;/strong&gt;: Increase resource limits (VPA)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cluster Scaling&lt;/strong&gt;: Add more nodes to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;You can scale applications manually using kubectl scale or by updating the YAML. For automatic scaling, you use HorizontalPodAutoscaler (HPA) which monitors metrics like CPU or memory usage and automatically adjusts the number of replicas. For example, if CPU usage goes above 70%, HPA might scale from 3 to 5 replicas. You can also use VerticalPodAutoscaler (VPA) to adjust resource requests and limits automatically.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/controllers/horizontalpodautoscaler/"
&gt;Learn more about Scaling&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="whats-the-difference-between-kubectl-get-and-kubectl-describe"&gt;
What&amp;rsquo;s the difference between kubectl get and kubectl describe?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#whats-the-difference-between-kubectl-get-and-kubectl-describe" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What&amp;rsquo;s the difference between kubectl get and kubectl describe?" href="#whats-the-difference-between-kubectl-get-and-kubectl-describe"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Expected Answer:&lt;/strong&gt;
Both commands provide information about Kubernetes resources, but they serve different purposes and provide different levels of detail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;kubectl get:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: Lists resources with basic information&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output&lt;/strong&gt;: Tabular format with key fields&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Quick overview, checking status, listing resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Example&lt;/strong&gt;: &lt;code&gt;kubectl get pods&lt;/code&gt; shows Pod name, ready status, restart count, age&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;kubectl describe:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: Provides detailed information about a specific resource&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output&lt;/strong&gt;: Detailed YAML-like format with all fields and events&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case&lt;/strong&gt;: Debugging, troubleshooting, understanding resource state&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Example&lt;/strong&gt;: &lt;code&gt;kubectl describe pod my-pod&lt;/code&gt; shows full Pod specification, events, conditions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Output Comparison:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# kubectl get pods&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME READY STATUS RESTARTS AGE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;my-pod-abc123 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 5m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# kubectl describe pod my-pod-abc123&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Name: my-pod-abc123
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Namespace: default
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Priority: &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Node: worker-1/10.0.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Start Time: Mon, &lt;span class="m"&gt;01&lt;/span&gt; Jan &lt;span class="m"&gt;2025&lt;/span&gt; 10:00:00 +0000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Labels: &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-app
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Annotations: kubernetes.io/psp: restricted
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Status: Running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IP: 10.244.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Containers:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; app:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Container ID: docker://abc123...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Image: nginx:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; State: Running
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Started: Mon, &lt;span class="m"&gt;01&lt;/span&gt; Jan &lt;span class="m"&gt;2025&lt;/span&gt; 10:00:01 +0000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Ready: True
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Restart Count: &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Limits:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cpu: 500m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; memory: 512Mi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Requests:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cpu: 250m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; memory: 256Mi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Events:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type Reason Age From Message
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ---- ------ ---- ---- -------
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Normal Scheduled 5m default-scheduler Successfully assigned default/my-pod-abc123 to worker-1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Normal Pulling 5m kubelet Pulling image &lt;span class="s2"&gt;&amp;#34;nginx:latest&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Normal Pulled 5m kubelet Successfully pulled image &lt;span class="s2"&gt;&amp;#34;nginx:latest&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Normal Created 5m kubelet Created container app
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Normal Started 5m kubelet Started container app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example Response:&lt;/strong&gt;
&amp;ldquo;kubectl get gives you a quick overview - like a table showing the basic status of resources. It&amp;rsquo;s great for checking if things are running or seeing how many replicas you have. kubectl describe gives you the full story - all the details about a specific resource including its configuration, events, and current state. I use get for quick checks and describe when I need to debug something or understand what&amp;rsquo;s happening with a resource.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/reference/kubectl/overview/"
&gt;Learn more about kubectl&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="additional-tips-for-interview-success"&gt;
Additional Tips for Interview Success
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#additional-tips-for-interview-success" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Additional Tips for Interview Success" href="#additional-tips-for-interview-success"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="understanding-vs-memorization"&gt;
Understanding vs. Memorization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#understanding-vs-memorization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Understanding vs. Memorization" href="#understanding-vs-memorization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Focus on understanding concepts rather than memorizing commands. Interviewers want to see that you understand the &amp;ldquo;why&amp;rdquo; behind Kubernetes design decisions.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="practical-experience"&gt;
Practical Experience
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#practical-experience" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Practical Experience" href="#practical-experience"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Be prepared to discuss:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Real-world scenarios you&amp;rsquo;ve encountered&lt;/li&gt;
&lt;li&gt;How you&amp;rsquo;ve solved specific problems&lt;/li&gt;
&lt;li&gt;Trade-offs you&amp;rsquo;ve considered in your decisions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="common-follow-up-questions"&gt;
Common Follow-up Questions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#common-follow-up-questions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Common Follow-up Questions" href="#common-follow-up-questions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;What would you do if a Pod keeps crashing?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;How would you troubleshoot a service that&amp;rsquo;s not accessible?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;What&amp;rsquo;s the difference between a Pod and a container?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="red-flags-to-avoid"&gt;
Red Flags to Avoid
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#red-flags-to-avoid" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Red Flags to Avoid" href="#red-flags-to-avoid"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Over-reliance on managed services&lt;/strong&gt;: Show understanding of underlying concepts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inability to explain basic concepts&lt;/strong&gt;: Demonstrate fundamental knowledge&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No practical experience&lt;/strong&gt;: Be ready to discuss real scenarios&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/basic-kubernetes-interview-questions-2025/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;These basic Kubernetes interview questions test fundamental understanding of core concepts. Success depends not just on knowing the answers, but on demonstrating practical understanding and the ability to apply concepts to real-world scenarios.&lt;/p&gt;
&lt;p&gt;For candidates: Focus on understanding the &amp;ldquo;why&amp;rdquo; behind Kubernetes design decisions and be prepared to discuss practical applications.&lt;/p&gt;
&lt;p&gt;For interviewers: Look for candidates who can explain concepts clearly, discuss trade-offs, and demonstrate practical problem-solving skills rather than just memorized answers.&lt;/p&gt;
&lt;p&gt;Remember, Kubernetes is a complex system, and no one expects entry-level candidates to know everything. Focus on demonstrating solid foundational knowledge, eagerness to learn, and practical problem-solving abilities.&lt;/p&gt;
&lt;p&gt;For more information about Kubernetes concepts and best practices, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/"
&gt;official Kubernetes documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tutorials/"
&gt;Kubernetes.io tutorials&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/interview" term="interview" label="interview"/><category scheme="https://k8s-ops.net/tags/basics" term="basics" label="basics"/><category scheme="https://k8s-ops.net/tags/devops" term="devops" label="devops"/><category scheme="https://k8s-ops.net/tags/career" term="career" label="career"/><category scheme="https://k8s-ops.net/tags/learning" term="learning" label="learning"/></entry><entry><title>Kubernetes v1.33 'Octarine' Release on April 23</title><link href="https://k8s-ops.net/posts/kubernetes-v1-33-release/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-v1-33-release/</id><published>2025-04-23T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;On April 23, 2025, the Kubernetes community released v1.33, codenamed &amp;ldquo;Octarine,&amp;rdquo; marking the first major release of 2025. This release brings 46 enhancements with 13 moving to stable, 20 entering beta, and 13 remaining in alpha. The v1.33 release focuses on enhanced security, improved performance, and new capabilities for emerging workloads.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="release-overview"&gt;
Release Overview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#release-overview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Overview" href="#release-overview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="key-statistics"&gt;
Key Statistics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#key-statistics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Statistics" href="#key-statistics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.33 release represents the collective effort of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1,400+ Contributors&lt;/strong&gt;: From around the world&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;75+ Organizations&lt;/strong&gt;: Contributing code and resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;35+ Special Interest Groups&lt;/strong&gt;: Coordinating development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 Months&lt;/strong&gt;: Of active development and testing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="release-name-octarine"&gt;
Release Name: Octarine
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#release-name-octarine" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Name: Octarine" href="#release-name-octarine"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The codename &amp;ldquo;Octarine&amp;rdquo; continues Kubernetes&amp;rsquo; tradition of naming releases after notable figures in computing history, honoring contributions to the field of computer science and technology.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="major-features-moving-to-stable"&gt;
Major Features Moving to Stable
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#major-features-moving-to-stable" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Major Features Moving to Stable" href="#major-features-moving-to-stable"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enhanced-security-context"&gt;
1. Enhanced Security Context
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#1-enhanced-security-context" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced Security Context" href="#1-enhanced-security-context"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Security context features graduate to stable, providing improved security controls:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="advanced-security-controls"&gt;
Advanced Security Controls
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#advanced-security-controls" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Advanced Security Controls" href="#advanced-security-controls"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fine-grained Permissions&lt;/strong&gt;: More granular control over container capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seccomp Profiles&lt;/strong&gt;: Enhanced system call filtering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SELinux Integration&lt;/strong&gt;: Better integration with SELinux policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capability Management&lt;/strong&gt;: Improved Linux capability controls&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="implementation-example"&gt;
Implementation Example
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#implementation-example" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Implementation Example" href="#implementation-example"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secure-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsNonRoot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runAsGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fsGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;seccompProfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RuntimeDefault&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;securityContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowPrivilegeEscalation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnlyRootFilesystem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-advanced-resource-management"&gt;
2. Advanced Resource Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#2-advanced-resource-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Advanced Resource Management" href="#2-advanced-resource-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Resource management capabilities receive significant improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="dynamic-resource-allocation"&gt;
Dynamic Resource Allocation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#dynamic-resource-allocation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Dynamic Resource Allocation" href="#dynamic-resource-allocation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPU Sharing&lt;/strong&gt;: Multiple pods can share GPU resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Optimization&lt;/strong&gt;: Better memory allocation and management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage-aware Scheduling&lt;/strong&gt;: Optimized storage resource allocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network Resource Management&lt;/strong&gt;: Enhanced network resource allocation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="performance-benefits"&gt;
Performance Benefits
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#performance-benefits" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Benefits" href="#performance-benefits"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better Resource Utilization&lt;/strong&gt;: More efficient use of available resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost Optimization&lt;/strong&gt;: Reduced resource waste&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Scalability&lt;/strong&gt;: Better performance at scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Reliability&lt;/strong&gt;: More stable resource allocation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-enhanced-api-server-performance"&gt;
3. Enhanced API Server Performance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#3-enhanced-api-server-performance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Enhanced API Server Performance" href="#3-enhanced-api-server-performance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The API server receives major performance improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="optimizations"&gt;
Optimizations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#optimizations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Optimizations" href="#optimizations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduced Latency&lt;/strong&gt;: Faster request processing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Memory Management&lt;/strong&gt;: More efficient memory utilization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Caching&lt;/strong&gt;: Enhanced caching mechanisms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection Optimization&lt;/strong&gt;: Better connection pooling and management&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="impact-on-users"&gt;
Impact on Users
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#impact-on-users" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Impact on Users" href="#impact-on-users"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Operations&lt;/strong&gt;: Reduced response times for all API operations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Scalability&lt;/strong&gt;: Improved performance at scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Efficiency&lt;/strong&gt;: Lower resource consumption&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Reliability&lt;/strong&gt;: More stable API server operation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="beta-features"&gt;
Beta Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#beta-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Beta Features" href="#beta-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enhanced-rbac-system"&gt;
1. Enhanced RBAC System
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#1-enhanced-rbac-system" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced RBAC System" href="#1-enhanced-rbac-system"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Role-Based Access Control system receives major updates:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="fine-grained-permissions"&gt;
Fine-grained Permissions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#fine-grained-permissions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Fine-grained Permissions" href="#fine-grained-permissions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource-level Permissions&lt;/strong&gt;: Granular control over specific resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditional Access&lt;/strong&gt;: Context-aware authorization decisions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Policy Evaluation&lt;/strong&gt;: Real-time policy enforcement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Trail Enhancement&lt;/strong&gt;: Comprehensive security event tracking&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="implementation-examples"&gt;
Implementation Examples
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#implementation-examples" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Implementation Examples" href="#implementation-examples"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterRole&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;advanced-pod-reader&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;- &lt;span class="nt"&gt;apiGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pods&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;verbs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;list&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;watch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;conditions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;object.metadata.namespace == &amp;#34;production&amp;#34; &amp;amp;&amp;amp; object.status.phase == &amp;#34;Running&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-advanced-network-policies"&gt;
2. Advanced Network Policies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#2-advanced-network-policies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Advanced Network Policies" href="#2-advanced-network-policies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Network policy capabilities are significantly enhanced:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="protocol-level-filtering"&gt;
Protocol-level Filtering
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#protocol-level-filtering" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Protocol-level Filtering" href="#protocol-level-filtering"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Layer 7 Policies&lt;/strong&gt;: Application-layer traffic filtering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced Port Management&lt;/strong&gt;: Sophisticated port-based rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service Mesh Integration&lt;/strong&gt;: Better integration with service meshes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Faster policy enforcement&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-improved-storage-management"&gt;
3. Improved Storage Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#3-improved-storage-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Improved Storage Management" href="#3-improved-storage-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Storage features receive comprehensive updates:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="volume-management"&gt;
Volume Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#volume-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Volume Management" href="#volume-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Provisioning&lt;/strong&gt;: Enhanced storage class support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volume Snapshots&lt;/strong&gt;: Improved backup and recovery capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Capacity Tracking&lt;/strong&gt;: More accurate resource management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-attach Volumes&lt;/strong&gt;: Support for shared storage access&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="alpha-features"&gt;
Alpha Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#alpha-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Alpha Features" href="#alpha-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-webassembly-support"&gt;
1. WebAssembly Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#1-webassembly-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. WebAssembly Support" href="#1-webassembly-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Early support for WebAssembly workloads continues to evolve:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="cross-platform-compatibility"&gt;
Cross-platform Compatibility
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#cross-platform-compatibility" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Cross-platform Compatibility" href="#cross-platform-compatibility"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Architecture Independence&lt;/strong&gt;: Same code across different platforms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Sandboxing&lt;/strong&gt;: Isolated execution environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Near-native performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case Expansion&lt;/strong&gt;: Serverless functions, edge computing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-enhanced-observability"&gt;
2. Enhanced Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#2-enhanced-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Enhanced Observability" href="#2-enhanced-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;New observability capabilities:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="distributed-tracing"&gt;
Distributed Tracing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#distributed-tracing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Distributed Tracing" href="#distributed-tracing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;End-to-end Tracing&lt;/strong&gt;: Complete request flow tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Analysis&lt;/strong&gt;: Detailed performance insights&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debugging Support&lt;/strong&gt;: Enhanced troubleshooting capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integration&lt;/strong&gt;: Better integration with existing tools&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-edge-computing-support"&gt;
3. Edge Computing Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#3-edge-computing-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Edge Computing Support" href="#3-edge-computing-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Edge computing features continue to evolve:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="lightweight-components"&gt;
Lightweight Components
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#lightweight-components" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Lightweight Components" href="#lightweight-components"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource Optimization&lt;/strong&gt;: Reduced resource requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline Operation&lt;/strong&gt;: Better support for intermittent connectivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local Processing&lt;/strong&gt;: Reduced dependency on centralized resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-cluster Management&lt;/strong&gt;: Coordinated edge deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="security-enhancements"&gt;
Security Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#security-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Security Enhancements" href="#security-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enhanced-authentication"&gt;
1. Enhanced Authentication
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#1-enhanced-authentication" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced Authentication" href="#1-enhanced-authentication"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Authentication system improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="multi-factor-authentication"&gt;
Multi-factor Authentication
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#multi-factor-authentication" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Multi-factor Authentication" href="#multi-factor-authentication"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MFA Support&lt;/strong&gt;: Enhanced authentication security&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Certificate Management&lt;/strong&gt;: Improved certificate lifecycle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Token Security&lt;/strong&gt;: Enhanced service account token security&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity Federation&lt;/strong&gt;: Better integration with external identity providers&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-supply-chain-security"&gt;
2. Supply Chain Security
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#2-supply-chain-security" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Supply Chain Security" href="#2-supply-chain-security"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Software supply chain security features:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="artifact-verification"&gt;
Artifact Verification
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#artifact-verification" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Artifact Verification" href="#artifact-verification"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Digital Signatures&lt;/strong&gt;: Ensuring artifact integrity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Scanning&lt;/strong&gt;: Automated security scanning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy Enforcement&lt;/strong&gt;: Automated security policy compliance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Trail&lt;/strong&gt;: Comprehensive security event logging&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-zero-trust-architecture"&gt;
3. Zero Trust Architecture
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#3-zero-trust-architecture" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Zero Trust Architecture" href="#3-zero-trust-architecture"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Zero trust principles implementation:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="identity-based-access"&gt;
Identity-based Access
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#identity-based-access" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Identity-based Access" href="#identity-based-access"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Continuous Verification&lt;/strong&gt;: Ongoing authentication and authorization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Least Privilege Access&lt;/strong&gt;: Minimal required permissions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Micro-segmentation&lt;/strong&gt;: Granular network security policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context-aware Security&lt;/strong&gt;: Security decisions based on context&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="performance-improvements"&gt;
Performance Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#performance-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Improvements" href="#performance-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-etcd-optimizations"&gt;
1. etcd Optimizations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#1-etcd-optimizations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. etcd Optimizations" href="#1-etcd-optimizations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;etcd, the backing store, receives optimizations:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="storage-efficiency"&gt;
Storage Efficiency
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#storage-efficiency" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Storage Efficiency" href="#storage-efficiency"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compression&lt;/strong&gt;: Enhanced data compression&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indexing&lt;/strong&gt;: Improved data indexing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Garbage Collection&lt;/strong&gt;: Better cleanup of old data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backup Optimization&lt;/strong&gt;: Faster and more reliable backups&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-scheduler-performance"&gt;
2. Scheduler Performance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#2-scheduler-performance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Scheduler Performance" href="#2-scheduler-performance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Scheduler performance improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="algorithm-optimization"&gt;
Algorithm Optimization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#algorithm-optimization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Algorithm Optimization" href="#algorithm-optimization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Algorithms&lt;/strong&gt;: Improved scheduling algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallel Processing&lt;/strong&gt;: Better utilization of multiple cores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Efficiency&lt;/strong&gt;: Reduced memory footprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Better performance at scale&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-controller-performance"&gt;
3. Controller Performance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#3-controller-performance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Controller Performance" href="#3-controller-performance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Controller performance improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="reconciliation-optimization"&gt;
Reconciliation Optimization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#reconciliation-optimization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Reconciliation Optimization" href="#reconciliation-optimization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Reconciliation&lt;/strong&gt;: Improved reconciliation algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallel Processing&lt;/strong&gt;: Better utilization of multiple cores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Efficiency&lt;/strong&gt;: Reduced memory footprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Better performance at scale&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="new-capabilities"&gt;
New Capabilities
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#new-capabilities" class="gblog-post__anchor clip flex align-center" aria-label="Anchor New Capabilities" href="#new-capabilities"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-aiml-workload-support"&gt;
1. AI/ML Workload Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#1-aiml-workload-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. AI/ML Workload Support" href="#1-aiml-workload-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Enhanced support for artificial intelligence and machine learning workloads:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="gpu-management"&gt;
GPU Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#gpu-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor GPU Management" href="#gpu-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-GPU Support&lt;/strong&gt;: Better management of multiple GPUs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU Sharing&lt;/strong&gt;: Multiple pods can share GPU resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU Scheduling&lt;/strong&gt;: Enhanced GPU-aware scheduling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU Monitoring&lt;/strong&gt;: Better monitoring of GPU utilization&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="model-serving"&gt;
Model Serving
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#model-serving" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Model Serving" href="#model-serving"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model Deployment&lt;/strong&gt;: Simplified model deployment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-scaling&lt;/strong&gt;: Automatic scaling based on demand&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version Management&lt;/strong&gt;: Better model version management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A/B Testing&lt;/strong&gt;: Support for model A/B testing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-quantum-computing-preparation"&gt;
2. Quantum Computing Preparation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#2-quantum-computing-preparation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Quantum Computing Preparation" href="#2-quantum-computing-preparation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Early preparation for quantum computing:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="quantum-ready-infrastructure"&gt;
Quantum-ready Infrastructure
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#quantum-ready-infrastructure" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Quantum-ready Infrastructure" href="#quantum-ready-infrastructure"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quantum Algorithm Support&lt;/strong&gt;: Infrastructure for quantum algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hybrid Classical-Quantum&lt;/strong&gt;: Support for hybrid computing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quantum Security&lt;/strong&gt;: Preparation for quantum-resistant cryptography&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Management&lt;/strong&gt;: Management of quantum computing resources&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-sustainability-features"&gt;
3. Sustainability Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#3-sustainability-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Sustainability Features" href="#3-sustainability-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Environmental impact considerations:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="green-computing"&gt;
Green Computing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#green-computing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Green Computing" href="#green-computing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Energy-efficient Scheduling&lt;/strong&gt;: Optimizing for energy consumption&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carbon-aware Computing&lt;/strong&gt;: Considering environmental impact&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Optimization&lt;/strong&gt;: Better resource utilization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainable Practices&lt;/strong&gt;: Promoting sustainable computing practices&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="deprecations-and-removals"&gt;
Deprecations and Removals
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#deprecations-and-removals" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deprecations and Removals" href="#deprecations-and-removals"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="deprecated-features"&gt;
Deprecated Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#deprecated-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deprecated Features" href="#deprecated-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Several features are deprecated in v1.33:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legacy API Versions&lt;/strong&gt;: Older API versions being phased out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated Flags&lt;/strong&gt;: Command-line flags no longer recommended&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obsolete Configurations&lt;/strong&gt;: Configuration options with better alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="removed-features"&gt;
Removed Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#removed-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Removed Features" href="#removed-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Features removed in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unused Components&lt;/strong&gt;: Components no longer maintained&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated APIs&lt;/strong&gt;: APIs deprecated for multiple releases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy Tools&lt;/strong&gt;: Tools replaced by newer alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="upgrade-considerations"&gt;
Upgrade Considerations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#upgrade-considerations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Upgrade Considerations" href="#upgrade-considerations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="pre-upgrade-preparation"&gt;
Pre-upgrade Preparation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#pre-upgrade-preparation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Pre-upgrade Preparation" href="#pre-upgrade-preparation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Before upgrading to v1.33:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Review deprecation notices&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Test applications in staging environment&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Update client tools (kubectl, etc.)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Backup cluster configurations&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Verify third-party tool compatibility&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="upgrade-process"&gt;
Upgrade Process
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#upgrade-process" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Upgrade Process" href="#upgrade-process"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Recommended upgrade steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Backup&lt;/strong&gt;: Create comprehensive backups&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test&lt;/strong&gt;: Upgrade staging environment first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plan&lt;/strong&gt;: Schedule production upgrade during maintenance window&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execute&lt;/strong&gt;: Perform rolling upgrade&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validate&lt;/strong&gt;: Verify all applications and services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor&lt;/strong&gt;: Watch for any issues post-upgrade&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="rollback-strategy"&gt;
Rollback Strategy
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#rollback-strategy" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Rollback Strategy" href="#rollback-strategy"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;In case of issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Immediate Rollback&lt;/strong&gt;: Have previous version ready&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Recovery&lt;/strong&gt;: Ensure backup restoration procedures&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Communication Plan&lt;/strong&gt;: Notify stakeholders of any issues&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="community-impact"&gt;
Community Impact
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#community-impact" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Impact" href="#community-impact"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="contributor-recognition"&gt;
Contributor Recognition
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#contributor-recognition" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Contributor Recognition" href="#contributor-recognition"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.33 release highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Global Collaboration&lt;/strong&gt;: Contributors from around the world&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organizational Diversity&lt;/strong&gt;: Companies of all sizes contributing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill Development&lt;/strong&gt;: Opportunities for learning and growth&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Building&lt;/strong&gt;: Strengthening the Kubernetes ecosystem&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="ecosystem-updates"&gt;
Ecosystem Updates
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#ecosystem-updates" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Ecosystem Updates" href="#ecosystem-updates"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The broader ecosystem responds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud Providers&lt;/strong&gt;: Update managed Kubernetes services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools and Platforms&lt;/strong&gt;: Update compatibility matrices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Comprehensive documentation updates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Training Materials&lt;/strong&gt;: Updated certification programs&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-forward"&gt;
Looking Forward
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#looking-forward" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Forward" href="#looking-forward"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="v134-preview"&gt;
v1.34 Preview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#v134-preview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor v1.34 Preview" href="#v134-preview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The community is already working on v1.34, which will include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Continued Performance Improvements&lt;/strong&gt;: Further optimizations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Alpha Features&lt;/strong&gt;: Experimental capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Additional security features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Usability&lt;/strong&gt;: Improved developer and operator experience&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="long-term-roadmap"&gt;
Long-term Roadmap
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#long-term-roadmap" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Long-term Roadmap" href="#long-term-roadmap"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Future releases will focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simplification&lt;/strong&gt;: Making Kubernetes easier to use&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Better support for edge environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI/ML Workloads&lt;/strong&gt;: Enhanced support for machine learning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability&lt;/strong&gt;: Reducing resource consumption&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quantum Computing&lt;/strong&gt;: Preparation for quantum computing era&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-33-release/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The release of Kubernetes v1.33 &amp;ldquo;Octarine&amp;rdquo; represents another significant step forward in the platform&amp;rsquo;s evolution. With 46 enhancements, improved security, enhanced performance, and new capabilities for emerging workloads, this release continues Kubernetes&amp;rsquo; tradition of innovation and stability.&lt;/p&gt;
&lt;p&gt;Key highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Advanced security context and zero trust architecture&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Improvements&lt;/strong&gt;: Better API server, scheduler, and controller performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI/ML Support&lt;/strong&gt;: Enhanced support for artificial intelligence and machine learning workloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability Focus&lt;/strong&gt;: Environmental considerations in computing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Collaboration&lt;/strong&gt;: Global effort involving thousands of contributors&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The community&amp;rsquo;s commitment to backward compatibility, comprehensive testing, and user feedback ensures that upgrades are smooth and reliable. As organizations plan their upgrades to v1.33, they can be confident in the platform&amp;rsquo;s maturity and the community&amp;rsquo;s support.&lt;/p&gt;
&lt;p&gt;The success of this release demonstrates the power of open-source collaboration and the strength of the Kubernetes ecosystem. With continued innovation and community support, Kubernetes remains the foundation of modern cloud-native computing, now extending into emerging areas like AI/ML and quantum computing preparation.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about Kubernetes v1.33, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/blog/2025/04/23/kubernetes-v1-33-release/"
&gt;official release blog post&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html"
&gt;AWS EKS documentation&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/releases" term="releases" label="releases"/><category scheme="https://k8s-ops.net/tags/v1.33" term="v1.33" label="v1.33"/><category scheme="https://k8s-ops.net/tags/octarine" term="octarine" label="octarine"/><category scheme="https://k8s-ops.net/tags/features" term="features" label="features"/><category scheme="https://k8s-ops.net/tags/2025" term="2025" label="2025"/></entry><entry><title>Top 10 Kubernetes CLI Tools Every DevOps Engineer Should Know</title><link href="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/</id><published>2025-04-10T00:00:00+00:00</published><updated>2025-07-04T14:46:07-04:00</updated><content type="html">
&lt;p&gt;As Kubernetes continues to dominate the container orchestration landscape, DevOps engineers need powerful command-line tools to efficiently manage production workloads. While &lt;code&gt;kubectl&lt;/code&gt; remains the foundation, the ecosystem has evolved with specialized tools that enhance productivity, provide better visibility, and streamline troubleshooting. Here are the top 10 Kubernetes CLI tools that every DevOps engineer should have in their toolkit.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="1-kubectl---the-foundation"&gt;
1. kubectl - The Foundation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#1-kubectl---the-foundation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. kubectl - The Foundation" href="#1-kubectl---the-foundation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;The official Kubernetes CLI&lt;/strong&gt; - Required for interacting with cluster resources.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;kubectl&lt;/code&gt; is the essential starting point for any Kubernetes interaction. It provides the core functionality for managing resources, viewing logs, executing commands in pods, and more. While powerful, it can be verbose and complex for daily operations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resource management (create, update, delete)&lt;/li&gt;
&lt;li&gt;Log viewing and debugging&lt;/li&gt;
&lt;li&gt;Port forwarding and proxy access&lt;/li&gt;
&lt;li&gt;Resource inspection and validation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/reference/kubectl/overview/"
&gt;Learn more about kubectl&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="2-k9s---terminal-ui-for-real-time-cluster-management"&gt;
2. k9s - Terminal UI for Real-time Cluster Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#2-k9s---terminal-ui-for-real-time-cluster-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. k9s - Terminal UI for Real-time Cluster Management" href="#2-k9s---terminal-ui-for-real-time-cluster-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Terminal UI to interact with your cluster in real-time. Lightweight and intuitive.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;k9s transforms the terminal into an interactive dashboard, providing real-time views of pods, services, deployments, and other resources. It&amp;rsquo;s perfect for monitoring cluster health and quickly identifying issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Real-time resource monitoring&lt;/li&gt;
&lt;li&gt;Interactive pod log viewing&lt;/li&gt;
&lt;li&gt;Resource scaling and management&lt;/li&gt;
&lt;li&gt;Custom views and filters&lt;/li&gt;
&lt;li&gt;Keyboard shortcuts for efficiency&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install k9s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/derailed/k9s/releases/latest/download/k9s_Linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar -xzf k9s_Linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv k9s /usr/local/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/derailed/k9s"
&gt;Get k9s on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="3-kubectx--kubens---context-and-namespace-management"&gt;
3. kubectx + kubens - Context and Namespace Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#3-kubectx--kubens---context-and-namespace-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. kubectx &amp;#43; kubens - Context and Namespace Management" href="#3-kubectx--kubens---context-and-namespace-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Switch contexts and namespaces quickly from the CLI.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Managing multiple clusters and namespaces can be cumbersome with standard kubectl commands. kubectx and kubens provide simple, fast switching between Kubernetes contexts and namespaces.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quick context switching&lt;/li&gt;
&lt;li&gt;Namespace switching&lt;/li&gt;
&lt;li&gt;Tab completion support&lt;/li&gt;
&lt;li&gt;Interactive selection mode&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install kubectx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Switch contexts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectx minikube
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectx production-cluster
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Switch namespaces&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubens default
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubens monitoring
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/ahmetb/kubectx"
&gt;Get kubectx on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="4-kube-ps1---shell-prompt-enhancement"&gt;
4. kube-ps1 - Shell Prompt Enhancement
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#4-kube-ps1---shell-prompt-enhancement" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. kube-ps1 - Shell Prompt Enhancement" href="#4-kube-ps1---shell-prompt-enhancement"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Adds current context and namespace info to your shell prompt.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Never lose track of which cluster and namespace you&amp;rsquo;re working in. kube-ps1 enhances your shell prompt to display the current Kubernetes context and namespace, preventing costly mistakes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Context and namespace display&lt;/li&gt;
&lt;li&gt;Customizable prompt format&lt;/li&gt;
&lt;li&gt;Color coding for different environments&lt;/li&gt;
&lt;li&gt;Easy enable/disable toggle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add to your shell profile (.bashrc, .zshrc, etc.)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;kubectl completion bash&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.kube-ps1.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PS1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;[\u@\h \W $(kube_ps1)]\$ &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/jonmosco/kube-ps1"
&gt;Get kube-ps1 on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="5-stern---multi-pod-log-tailing"&gt;
5. stern - Multi-pod Log Tailing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#5-stern---multi-pod-log-tailing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. stern - Multi-pod Log Tailing" href="#5-stern---multi-pod-log-tailing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Multi-pod log tailing with filters and coloring — ideal for debugging live systems.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When debugging distributed applications, you need to monitor logs from multiple pods simultaneously. stern makes this easy with intelligent filtering and color-coded output.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-pod log streaming&lt;/li&gt;
&lt;li&gt;Regex-based pod selection&lt;/li&gt;
&lt;li&gt;Color-coded output by pod&lt;/li&gt;
&lt;li&gt;Real-time filtering&lt;/li&gt;
&lt;li&gt;Support for multiple containers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install stern
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/stern/stern/releases/latest/download/stern_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar -xzf stern_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv stern /usr/local/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs from all pods with &amp;#34;api&amp;#34; in the name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stern api
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs with specific label&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stern -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;frontend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Follow logs from specific namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stern -n production api
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/stern/stern"
&gt;Get stern on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="6-kubectl-neat---clean-output-formatting"&gt;
6. kubectl-neat - Clean Output Formatting
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#6-kubectl-neat---clean-output-formatting" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 6. kubectl-neat - Clean Output Formatting" href="#6-kubectl-neat---clean-output-formatting"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Clean up verbose &lt;code&gt;kubectl&lt;/code&gt; output for human-readable inspection.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;kubectl output can be overwhelming with default fields and metadata. kubectl-neat removes unnecessary fields and formats output for better readability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removes default fields and metadata&lt;/li&gt;
&lt;li&gt;Preserves important information&lt;/li&gt;
&lt;li&gt;YAML and JSON output support&lt;/li&gt;
&lt;li&gt;Customizable field filtering&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using krew&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install neat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Manual installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/itaysk/kubectl-neat/releases/latest/download/kubectl-neat_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar -xzf kubectl-neat_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv kubectl-neat /usr/local/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clean up pod output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pod my-pod -o yaml &lt;span class="p"&gt;|&lt;/span&gt; kubectl neat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clean up deployment output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get deployment my-deployment -o yaml &lt;span class="p"&gt;|&lt;/span&gt; kubectl neat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clean up service output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get service my-service -o yaml &lt;span class="p"&gt;|&lt;/span&gt; kubectl neat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clean up configmap output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get configmap my-config -o yaml &lt;span class="p"&gt;|&lt;/span&gt; kubectl neat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/itaysk/kubectl-neat"
&gt;Get kubectl-neat on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="7-popeye---cluster-sanitizer"&gt;
7. popeye - Cluster Sanitizer
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#7-popeye---cluster-sanitizer" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 7. popeye - Cluster Sanitizer" href="#7-popeye---cluster-sanitizer"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Cluster sanitizer that scans for misconfigurations and hygiene issues.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;popeye performs comprehensive cluster scans to identify potential issues, misconfigurations, and best practice violations. It&amp;rsquo;s essential for maintaining cluster health and security.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Comprehensive cluster scanning&lt;/li&gt;
&lt;li&gt;Security best practice checks&lt;/li&gt;
&lt;li&gt;Resource utilization analysis&lt;/li&gt;
&lt;li&gt;Detailed reporting with scores&lt;/li&gt;
&lt;li&gt;Custom rule configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install popeye
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/derailed/popeye/releases/latest/download/popeye_Linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar -xzf popeye_Linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv popeye /usr/local/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scan entire cluster&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;popeye
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scan specific namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;popeye -n production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Generate HTML report&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;popeye --out html --output-file report.html
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/derailed/popeye"
&gt;Get popeye on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="8-kubectl-tree---resource-hierarchy-visualization"&gt;
8. kubectl-tree - Resource Hierarchy Visualization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#8-kubectl-tree---resource-hierarchy-visualization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 8. kubectl-tree - Resource Hierarchy Visualization" href="#8-kubectl-tree---resource-hierarchy-visualization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;View hierarchical ownership relationships between Kubernetes resources.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Understanding resource relationships in Kubernetes can be complex. kubectl-tree visualizes the ownership hierarchy, making it easier to understand dependencies and troubleshoot issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hierarchical resource display&lt;/li&gt;
&lt;li&gt;Owner reference tracking&lt;/li&gt;
&lt;li&gt;Custom resource support&lt;/li&gt;
&lt;li&gt;Multiple output formats&lt;/li&gt;
&lt;li&gt;Dependency visualization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using krew&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install tree
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Manual installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/ahmetb/kubectl-tree/releases/latest/download/kubectl-tree_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar -xzf kubectl-tree_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv kubectl-tree /usr/local/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show pod ownership tree&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree pod my-pod
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show deployment tree&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree deployment my-deployment
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show all resources in namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree all -n production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show tree with custom format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl tree pod my-pod --graphviz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/ahmetb/kubectl-tree"
&gt;Get kubectl-tree on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="9-kubectl-cost---resource-cost-estimation"&gt;
9. kubectl-cost - Resource Cost Estimation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#9-kubectl-cost---resource-cost-estimation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 9. kubectl-cost - Resource Cost Estimation" href="#9-kubectl-cost---resource-cost-estimation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Estimate resource cost by namespace or pod using OpenCost metrics.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Understanding the cost implications of your Kubernetes workloads is crucial for budget management. kubectl-cost provides cost estimates based on resource usage and pricing data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cost estimation by namespace/pod&lt;/li&gt;
&lt;li&gt;Historical cost analysis&lt;/li&gt;
&lt;li&gt;Resource allocation insights&lt;/li&gt;
&lt;li&gt;Integration with OpenCost&lt;/li&gt;
&lt;li&gt;Custom pricing configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using krew&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install cost
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Manual installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/kubecost/kubectl-cost/releases/latest/download/kubectl-cost_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar -xzf kubectl-cost_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv kubectl-cost /usr/local/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show costs by namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl cost namespace
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show costs by pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl cost pod
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show historical costs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl cost namespace --historical
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/kubecost/kubectl-cost"
&gt;Get kubectl-cost on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="10-kubeapply---smart-kubectl-apply-wrapper"&gt;
10. kubeapply - Smart kubectl Apply Wrapper
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#10-kubeapply---smart-kubectl-apply-wrapper" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 10. kubeapply - Smart kubectl Apply Wrapper" href="#10-kubeapply---smart-kubectl-apply-wrapper"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Smart wrapper around &lt;code&gt;kubectl apply&lt;/code&gt; with templating, config reuse, and dry-run.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;kubeapply enhances the standard &lt;code&gt;kubectl apply&lt;/code&gt; command with advanced features like templating, configuration reuse, and improved dry-run capabilities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Template rendering&lt;/li&gt;
&lt;li&gt;Configuration inheritance&lt;/li&gt;
&lt;li&gt;Enhanced dry-run mode&lt;/li&gt;
&lt;li&gt;Environment-specific configs&lt;/li&gt;
&lt;li&gt;Validation and linting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Go&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install github.com/creasty/kubeapply@latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Manual installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/creasty/kubeapply/releases/latest/download/kubeapply_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar -xzf kubeapply_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv kubeapply /usr/local/bin/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Apply with templating&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubeapply -f manifests/ -e production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Dry run with validation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubeapply -f manifests/ --dry-run --validate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Apply with specific config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubeapply -f manifests/ -c config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/creasty/kubeapply"
&gt;Get kubeapply on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="getting-started-with-krew"&gt;
Getting Started with krew
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#getting-started-with-krew" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Getting Started with krew" href="#getting-started-with-krew"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Many of these tools can be installed using krew, the kubectl plugin manager:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install krew&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;set&lt;/span&gt; -x&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;mktemp -d&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;OS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname &lt;span class="p"&gt;|&lt;/span&gt; tr &lt;span class="s1"&gt;&amp;#39;[:upper:]&amp;#39;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;[:lower:]&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -m &lt;span class="p"&gt;|&lt;/span&gt; sed -e &lt;span class="s1"&gt;&amp;#39;s/x86_64/amd64/&amp;#39;&lt;/span&gt; -e &lt;span class="s1"&gt;&amp;#39;s/\(arm\)\(64\)\?.*/\1\2/&amp;#39;&lt;/span&gt; -e &lt;span class="s1"&gt;&amp;#39;s/aarch64$/arm64/&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;KREW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;krew-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; curl -fsSLO &lt;span class="s2"&gt;&amp;#34;https://github.com/kubernetes-sigs/krew/releases/latest/download/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tar zxvf &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ./&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; install krew
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add krew to PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KREW_ROOT&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.krew&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install plugins&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install neat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install tree
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl krew install cost
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://krew.sigs.k8s.io/"
&gt;Learn more about krew&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="best-practices-for-cli-tool-usage"&gt;
Best Practices for CLI Tool Usage
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#best-practices-for-cli-tool-usage" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Best Practices for CLI Tool Usage" href="#best-practices-for-cli-tool-usage"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-environment-separation"&gt;
1. Environment Separation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#1-environment-separation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Environment Separation" href="#1-environment-separation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Use different contexts and namespaces to separate development, staging, and production environments.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-automation-integration"&gt;
2. Automation Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#2-automation-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Automation Integration" href="#2-automation-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Integrate these tools into your CI/CD pipelines for automated health checks and cost monitoring.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-team-standardization"&gt;
3. Team Standardization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#3-team-standardization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Team Standardization" href="#3-team-standardization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Establish team standards for which tools to use and how to configure them consistently.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-security-considerations"&gt;
4. Security Considerations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#4-security-considerations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Security Considerations" href="#4-security-considerations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Ensure tools with elevated permissions are used carefully and audited regularly.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="5-regular-updates"&gt;
5. Regular Updates
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#5-regular-updates" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. Regular Updates" href="#5-regular-updates"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Keep tools updated to benefit from new features and security patches.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-cli-tools/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;These CLI tools significantly enhance kubectl&amp;rsquo;s functionality, transforming it from a basic CLI tool into a powerful, extensible platform for Kubernetes management. The plugins outlined above provide essential capabilities for context management, resource analysis, security auditing, and productivity enhancement.&lt;/p&gt;
&lt;p&gt;Start with the core plugins (ctx, ns, neat) and gradually expand your toolkit based on your specific needs and workflows. Remember that the best tool is the one that fits your workflow and helps you solve real problems efficiently.&lt;/p&gt;
&lt;p&gt;For teams managing multiple clusters or complex environments, consider creating standardized plugin configurations and documentation to ensure consistency across your organization. The Krew ecosystem continues to grow, so stay updated with new plugins that might benefit your workflow.&lt;/p&gt;
&lt;p&gt;For more information about Kubernetes CLI tools and best practices, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tasks/tools/"
&gt;official Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/cli" term="cli" label="cli"/><category scheme="https://k8s-ops.net/tags/tools" term="tools" label="tools"/><category scheme="https://k8s-ops.net/tags/devops" term="devops" label="devops"/><category scheme="https://k8s-ops.net/tags/kubectl" term="kubectl" label="kubectl"/><category scheme="https://k8s-ops.net/tags/productivity" term="productivity" label="productivity"/></entry><entry><title>Top 10 Kubernetes Monitoring &amp; Observability Tools</title><link href="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/</id><published>2025-02-15T00:00:00+00:00</published><updated>2025-07-04T14:46:07-04:00</updated><content type="html">
&lt;p&gt;Effective monitoring and observability are critical for running Kubernetes clusters in production. The cloud-native ecosystem offers a rich set of tools for collecting metrics, visualizing data, and gaining insights into cluster and application performance. Here are the top 10 monitoring and observability tools that every Kubernetes operator should know.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="1-prometheus---the-metrics-foundation"&gt;
1. Prometheus - The Metrics Foundation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#1-prometheus---the-metrics-foundation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Prometheus - The Metrics Foundation" href="#1-prometheus---the-metrics-foundation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;The de facto standard for collecting metrics in Kubernetes clusters.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Prometheus is the cornerstone of Kubernetes monitoring, providing a powerful time-series database and query language for collecting and analyzing metrics. Its pull-based architecture and service discovery make it ideal for dynamic container environments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Time-series data collection&lt;/li&gt;
&lt;li&gt;Powerful query language (PromQL)&lt;/li&gt;
&lt;li&gt;Service discovery integration&lt;/li&gt;
&lt;li&gt;Alerting capabilities&lt;/li&gt;
&lt;li&gt;High availability support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install prometheus prometheus-community/kube-prometheus-stack
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/setup/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;prometheus-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prometheus.yml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; global:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; scrape_interval: 15s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; scrape_configs:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - job_name: &amp;#39;kubernetes-pods&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; kubernetes_sd_configs:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - role: pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://prometheus.io/"
&gt;Learn more about Prometheus&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="2-grafana---visualization-and-dashboards"&gt;
2. Grafana - Visualization and Dashboards
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#2-grafana---visualization-and-dashboards" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Grafana - Visualization and Dashboards" href="#2-grafana---visualization-and-dashboards"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Visualization layer commonly paired with Prometheus and Loki.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Grafana transforms raw metrics data into actionable insights through beautiful dashboards and visualizations. It supports multiple data sources and provides powerful querying capabilities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rich dashboard creation&lt;/li&gt;
&lt;li&gt;Multiple data source support&lt;/li&gt;
&lt;li&gt;Alerting and notifications&lt;/li&gt;
&lt;li&gt;User management and permissions&lt;/li&gt;
&lt;li&gt;Plugin ecosystem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add grafana https://grafana.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install grafana grafana/grafana
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/grafana/helm-charts/main/charts/grafana/templates/deployment.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Dashboard Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-dashboards&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes-cluster.json&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;dashboard&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;title&amp;#34;: &amp;#34;Kubernetes Cluster&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;panels&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;title&amp;#34;: &amp;#34;CPU Usage&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;type&amp;#34;: &amp;#34;graph&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;targets&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;#34;expr&amp;#34;: &amp;#34;sum(rate(container_cpu_usage_seconds_total{container!=\&amp;#34;\&amp;#34;}[5m]))&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://grafana.com/"
&gt;Explore Grafana&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="3-loki---log-aggregation-system"&gt;
3. Loki - Log Aggregation System
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#3-loki---log-aggregation-system" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Loki - Log Aggregation System" href="#3-loki---log-aggregation-system"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A log aggregation system by Grafana Labs, designed to integrate with Prometheus.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Loki provides efficient log aggregation and querying capabilities, designed to work seamlessly with Prometheus and Grafana. It&amp;rsquo;s optimized for Kubernetes environments and provides cost-effective log storage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Efficient log storage&lt;/li&gt;
&lt;li&gt;PromQL-like query language (LogQL)&lt;/li&gt;
&lt;li&gt;Kubernetes-native design&lt;/li&gt;
&lt;li&gt;Cost-effective scaling&lt;/li&gt;
&lt;li&gt;Integration with Grafana&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add grafana https://grafana.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install loki grafana/loki
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/grafana/loki/main/production/helm/loki/templates/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;loki-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loki.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; auth_enabled: false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; server:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; http_listen_port: 3100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; ingester:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; lifecycler:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; address: 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; ring:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; kvstore:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; store: inmemory
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; replication_factor: 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; final_sleep: 0s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; chunk_idle_period: 5m
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; chunk_retain_period: 30s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; schema_config:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; configs:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - from: 2020-05-15
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; store: boltdb-shipper
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; object_store: filesystem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; schema: v11
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; index:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; prefix: index_
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; period: 24h&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://grafana.com/oss/loki/"
&gt;Discover Loki&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="4-thanos---long-term-metrics-storage"&gt;
4. Thanos - Long-term Metrics Storage
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#4-thanos---long-term-metrics-storage" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Thanos - Long-term Metrics Storage" href="#4-thanos---long-term-metrics-storage"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Long-term, highly available Prometheus setup for global metrics.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Thanos extends Prometheus with long-term storage capabilities and global querying across multiple clusters. It&amp;rsquo;s essential for organizations running multiple Kubernetes clusters or requiring long-term metric retention.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Long-term metric storage&lt;/li&gt;
&lt;li&gt;Global querying&lt;/li&gt;
&lt;li&gt;High availability&lt;/li&gt;
&lt;li&gt;Multi-cluster support&lt;/li&gt;
&lt;li&gt;Cost-effective storage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add thanos https://charts.bitnami.com/bitnami
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install thanos thanos/thanos
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/thanos-io/thanos/main/examples/k8s/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;thanos-query-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;thanos-query.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; type: s3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; config:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; bucket: &amp;#34;thanos-metrics&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; endpoint: &amp;#34;s3.amazonaws.com&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; access_key: &amp;#34;your-access-key&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; secret_key: &amp;#34;your-secret-key&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://thanos.io/"
&gt;Learn about Thanos&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="5-victoriametrics---high-performance-alternative"&gt;
5. VictoriaMetrics - High-performance Alternative
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#5-victoriametrics---high-performance-alternative" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. VictoriaMetrics - High-performance Alternative" href="#5-victoriametrics---high-performance-alternative"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Fast, scalable alternative to Prometheus with long-term storage.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;VictoriaMetrics provides a high-performance, cost-effective alternative to Prometheus with built-in long-term storage and enhanced query performance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;High-performance storage&lt;/li&gt;
&lt;li&gt;Built-in long-term retention&lt;/li&gt;
&lt;li&gt;Prometheus compatibility&lt;/li&gt;
&lt;li&gt;Cost-effective scaling&lt;/li&gt;
&lt;li&gt;Enhanced query performance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add vm https://victoriametrics.github.io/helm-charts/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install victoria-metrics vm/victoria-metrics-single
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/VictoriaMetrics/helm-charts/main/charts/victoria-metrics-single/templates/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;victoria-metrics-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;victoria-metrics.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; global:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; scrape_interval: 15s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; scrape_configs:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - job_name: &amp;#39;kubernetes-pods&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; kubernetes_sd_configs:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - role: pod
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; relabel_configs:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; action: keep
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; regex: true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://victoriametrics.com/"
&gt;Explore VictoriaMetrics&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="6-opentelemetry-collector---unified-observability"&gt;
6. OpenTelemetry Collector - Unified Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#6-opentelemetry-collector---unified-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 6. OpenTelemetry Collector - Unified Observability" href="#6-opentelemetry-collector---unified-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Foundation for tracing and metrics instrumentation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OpenTelemetry Collector provides a unified approach to collecting traces, metrics, and logs. It&amp;rsquo;s becoming the standard for observability data collection in cloud-native environments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unified data collection&lt;/li&gt;
&lt;li&gt;Multiple format support&lt;/li&gt;
&lt;li&gt;Flexible processing&lt;/li&gt;
&lt;li&gt;Vendor-agnostic&lt;/li&gt;
&lt;li&gt;High performance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install otel-collector open-telemetry/opentelemetry-collector
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/open-telemetry/opentelemetry-helm-charts/main/charts/opentelemetry-collector/templates/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;otel-collector-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; receivers:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; otlp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; protocols:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; grpc:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; endpoint: 0.0.0.0:4317
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; http:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; endpoint: 0.0.0.0:4318
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; processors:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; batch:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; timeout: 1s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; send_batch_size: 1024
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; exporters:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; prometheus:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; endpoint: &amp;#34;0.0.0.0:9464&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; otlp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; endpoint: &amp;#34;tempo:4317&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; tls:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; insecure: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; service:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; pipelines:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; traces:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; receivers: [otlp]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; processors: [batch]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; exporters: [otlp]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; metrics:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; receivers: [otlp]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; processors: [batch]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; exporters: [prometheus]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://opentelemetry.io/docs/collector/"
&gt;Learn about OpenTelemetry&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="7-kube-state-metrics---cluster-state-metrics"&gt;
7. kube-state-metrics - Cluster State Metrics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#7-kube-state-metrics---cluster-state-metrics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 7. kube-state-metrics - Cluster State Metrics" href="#7-kube-state-metrics---cluster-state-metrics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Exposes cluster state as metrics for Prometheus.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;kube-state-metrics translates Kubernetes objects into Prometheus metrics, providing insights into cluster state, resource usage, and object lifecycle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes object metrics&lt;/li&gt;
&lt;li&gt;Resource state tracking&lt;/li&gt;
&lt;li&gt;Custom resource support&lt;/li&gt;
&lt;li&gt;Prometheus integration&lt;/li&gt;
&lt;li&gt;Real-time updates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install kube-state-metrics prometheus-community/kube-state-metrics
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/main/examples/standard/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-state-metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-state-metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-state-metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-state-metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.8.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;livenessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;httpGet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/healthz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeoutSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readinessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;httpGet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeoutSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/kubernetes/kube-state-metrics"
&gt;Get kube-state-metrics on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="8-metrics-server---resource-usage-metrics"&gt;
8. Metrics Server - Resource Usage Metrics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#8-metrics-server---resource-usage-metrics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 8. Metrics Server - Resource Usage Metrics" href="#8-metrics-server---resource-usage-metrics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Lightweight aggregator of resource usage for HPA and dashboarding.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Metrics Server provides core resource usage metrics (CPU and memory) for Kubernetes objects, enabling Horizontal Pod Autoscaler (HPA) and resource monitoring dashboards.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resource usage metrics&lt;/li&gt;
&lt;li&gt;HPA support&lt;/li&gt;
&lt;li&gt;Lightweight design&lt;/li&gt;
&lt;li&gt;Real-time data&lt;/li&gt;
&lt;li&gt;Kubernetes-native&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install metrics-server metrics-server/metrics-server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ServiceAccount&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics-server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics-server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kube-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics-server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics-server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;serviceAccountName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics-server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;metrics-server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;registry.k8s.io/metrics-server/metrics-server:v0.6.4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;kubelet-insecure-tls&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- --&lt;span class="l"&gt;kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;main-port&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4443&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/kubernetes-sigs/metrics-server"
&gt;Get Metrics Server on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="9-kubewatch---real-time-notifications"&gt;
9. Kubewatch - Real-time Notifications
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#9-kubewatch---real-time-notifications" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 9. Kubewatch - Real-time Notifications" href="#9-kubewatch---real-time-notifications"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Real-time resource change notifications via Slack or webhooks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kubewatch monitors Kubernetes events and sends real-time notifications to various channels, helping teams stay informed about cluster changes and potential issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Real-time event monitoring&lt;/li&gt;
&lt;li&gt;Multiple notification channels&lt;/li&gt;
&lt;li&gt;Customizable filters&lt;/li&gt;
&lt;li&gt;Webhook support&lt;/li&gt;
&lt;li&gt;Slack integration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add kubewatch https://charts.bitnami.com/bitnami
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install kubewatch kubewatch/kubewatch
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://raw.githubusercontent.com/bitnami-labs/kubewatch/main/deploy/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubewatch-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;.kubewatch.yaml&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; handler:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; slack:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; token: &amp;#34;your-slack-token&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; channel: &amp;#34;#kubernetes&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; title: &amp;#34;Kubernetes Event&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; resources:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - deployment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - pod
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - service
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; events:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - create
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - update
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; - delete&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://github.com/bitnami-labs/kubewatch"
&gt;Get Kubewatch on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="10-weave-scope---visual-cluster-exploration"&gt;
10. Weave Scope - Visual Cluster Exploration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#10-weave-scope---visual-cluster-exploration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 10. Weave Scope - Visual Cluster Exploration" href="#10-weave-scope---visual-cluster-exploration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Visualizes processes, containers, and services in real-time.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Weave Scope provides a visual interface for exploring and monitoring Kubernetes clusters, making it easier to understand application topology and troubleshoot issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visual cluster exploration&lt;/li&gt;
&lt;li&gt;Real-time topology mapping&lt;/li&gt;
&lt;li&gt;Container and process monitoring&lt;/li&gt;
&lt;li&gt;Interactive debugging&lt;/li&gt;
&lt;li&gt;Performance insights&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using kubectl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f &lt;span class="s2"&gt;&amp;#34;https://cloud.weave.works/k8s/scope.yaml?k8s-version=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;kubectl version &lt;span class="p"&gt;|&lt;/span&gt; base64 &lt;span class="p"&gt;|&lt;/span&gt; tr -d &lt;span class="s1"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Helm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add weaveworks https://weaveworks.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install weave-scope weaveworks/weave-scope
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Configuration Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;weave-scope-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;weave&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;weave-scope-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;weave-scope-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;scope&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;weaveworks/scope:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4040&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;WEAVE_SCOPE_DISCOVERY_URL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;weave-scope-app.weave.svc.cluster.local:4040&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://www.weave.works/oss/scope/"
&gt;Explore Weave Scope&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="building-a-complete-monitoring-stack"&gt;
Building a Complete Monitoring Stack
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#building-a-complete-monitoring-stack" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Building a Complete Monitoring Stack" href="#building-a-complete-monitoring-stack"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="recommended-architecture"&gt;
Recommended Architecture
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#recommended-architecture" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Recommended Architecture" href="#recommended-architecture"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Metrics Collection&lt;/strong&gt;: Prometheus + kube-state-metrics + Metrics Server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logging&lt;/strong&gt;: Loki + Promtail&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing&lt;/strong&gt;: Jaeger or Zipkin with OpenTelemetry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visualization&lt;/strong&gt;: Grafana&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alerting&lt;/strong&gt;: Prometheus Alertmanager + Grafana Alerts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long-term Storage&lt;/strong&gt;: Thanos or VictoriaMetrics&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="implementation-steps"&gt;
Implementation Steps
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#implementation-steps" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Implementation Steps" href="#implementation-steps"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start with Core Metrics&lt;/strong&gt;: Deploy Prometheus and kube-state-metrics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add Visualization&lt;/strong&gt;: Install Grafana and create basic dashboards&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implement Logging&lt;/strong&gt;: Deploy Loki and configure log collection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set Up Alerting&lt;/strong&gt;: Configure Alertmanager with meaningful alerts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add Tracing&lt;/strong&gt;: Implement OpenTelemetry for distributed tracing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scale and Optimize&lt;/strong&gt;: Add long-term storage and optimize performance&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="best-practices"&gt;
Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Best Practices" href="#best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Resource Planning&lt;/strong&gt;: Allocate sufficient resources for monitoring components&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Implement proper RBAC and network policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retention Policies&lt;/strong&gt;: Configure appropriate data retention periods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alert Fatigue&lt;/strong&gt;: Design meaningful alerts to avoid notification overload&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Maintain clear documentation for dashboards and alerts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing&lt;/strong&gt;: Regularly test monitoring and alerting systems&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/top-10-kubernetes-monitoring-tools/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;A comprehensive monitoring and observability strategy is essential for running Kubernetes clusters in production. The tools outlined above provide the foundation for understanding cluster health, application performance, and user experience.&lt;/p&gt;
&lt;p&gt;Start with the core tools (Prometheus, Grafana, kube-state-metrics) and gradually expand your observability stack based on your specific needs. Remember that effective monitoring is not just about collecting data—it&amp;rsquo;s about providing actionable insights that help you maintain reliable, performant applications.&lt;/p&gt;
&lt;p&gt;For organizations running multiple clusters or requiring enterprise-grade features, consider managed solutions that build upon these open-source tools while providing additional features like global aggregation, advanced analytics, and professional support.&lt;/p&gt;
&lt;p&gt;For more information about Kubernetes monitoring and observability, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tasks/debug/debug-cluster/resource-usage-monitoring/"
&gt;official Kubernetes documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://landscape.cncf.io/card-mode?category=observability-and-analysis&amp;amp;grouping=category"
&gt;CNCF observability landscape&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/monitoring" term="monitoring" label="monitoring"/><category scheme="https://k8s-ops.net/tags/observability" term="observability" label="observability"/><category scheme="https://k8s-ops.net/tags/prometheus" term="prometheus" label="prometheus"/><category scheme="https://k8s-ops.net/tags/grafana" term="grafana" label="grafana"/><category scheme="https://k8s-ops.net/tags/logging" term="logging" label="logging"/><category scheme="https://k8s-ops.net/tags/metrics" term="metrics" label="metrics"/></entry><entry><title>Kubernetes v1.32 'Penelope' Official Release</title><link href="https://k8s-ops.net/posts/kubernetes-v1-32-release/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-v1-32-release/</id><published>2024-12-11T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;On December 11, 2024, the Kubernetes community released v1.32, codenamed &amp;ldquo;Penelope,&amp;rdquo; marking the final major release of the year. This release brings 44 enhancements with 12 moving to stable, 18 entering beta, and 14 remaining in alpha. The v1.32 release focuses on API cleanup, new field selectors, and continued improvements to the platform&amp;rsquo;s stability and performance.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="release-overview"&gt;
Release Overview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#release-overview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Overview" href="#release-overview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="key-statistics"&gt;
Key Statistics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#key-statistics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Statistics" href="#key-statistics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.32 release represents the collective effort of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1,300+ Contributors&lt;/strong&gt;: From around the world&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;70+ Organizations&lt;/strong&gt;: Contributing code and resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;30+ Special Interest Groups&lt;/strong&gt;: Coordinating development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 Months&lt;/strong&gt;: Of active development and testing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="release-name-penelope"&gt;
Release Name: Penelope
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#release-name-penelope" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Name: Penelope" href="#release-name-penelope"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The codename &amp;ldquo;Penelope&amp;rdquo; continues Kubernetes&amp;rsquo; tradition of naming releases after notable figures in computing history, honoring contributions to the field of computer science and technology.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="major-features-moving-to-stable"&gt;
Major Features Moving to Stable
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#major-features-moving-to-stable" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Major Features Moving to Stable" href="#major-features-moving-to-stable"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-field-based-crd-selectors"&gt;
1. Field-based CRD Selectors
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#1-field-based-crd-selectors" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Field-based CRD Selectors" href="#1-field-based-crd-selectors"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Custom Resource Definition (CRD) field selectors graduate to stable, providing enhanced querying capabilities:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="enhanced-querying"&gt;
Enhanced Querying
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#enhanced-querying" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Enhanced Querying" href="#enhanced-querying"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Field-based Filtering&lt;/strong&gt;: Query custom resources by specific field values&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complex Queries&lt;/strong&gt;: Support for multiple field conditions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Efficient filtering at the API level&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standardized Interface&lt;/strong&gt;: Consistent querying across all resource types&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="implementation-example"&gt;
Implementation Example
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#implementation-example" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Implementation Example" href="#implementation-example"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apiextensions.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;CustomResourceDefinition&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;applications.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;names&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Application&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;listKind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ApplicationList&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;plural&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;applications&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;singular&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;application&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Namespaced&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;versions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;served&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;openAPIV3Schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;object&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;object&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;string&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;development, staging, production]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;integer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;minimum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="querying-examples"&gt;
Querying Examples
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#querying-examples" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Querying Examples" href="#querying-examples"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Query by environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get applications --field-selector spec.environment&lt;span class="o"&gt;=&lt;/span&gt;production
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Query by priority range&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get applications --field-selector spec.priority&amp;gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Complex queries&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get applications --field-selector spec.environment&lt;span class="o"&gt;=&lt;/span&gt;production,spec.priority&amp;gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-enhanced-api-server-performance"&gt;
2. Enhanced API Server Performance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#2-enhanced-api-server-performance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Enhanced API Server Performance" href="#2-enhanced-api-server-performance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The API server receives significant performance improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="optimizations"&gt;
Optimizations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#optimizations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Optimizations" href="#optimizations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduced Latency&lt;/strong&gt;: Faster request processing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Memory Management&lt;/strong&gt;: More efficient memory utilization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Caching&lt;/strong&gt;: Enhanced caching mechanisms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection Optimization&lt;/strong&gt;: Better connection pooling and management&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="impact-on-users"&gt;
Impact on Users
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#impact-on-users" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Impact on Users" href="#impact-on-users"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Operations&lt;/strong&gt;: Reduced response times for all API operations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Scalability&lt;/strong&gt;: Improved performance at scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Efficiency&lt;/strong&gt;: Lower resource consumption&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Reliability&lt;/strong&gt;: More stable API server operation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-advanced-scheduling-features"&gt;
3. Advanced Scheduling Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#3-advanced-scheduling-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Advanced Scheduling Features" href="#3-advanced-scheduling-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The scheduler continues to evolve with new capabilities:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="resource-aware-scheduling"&gt;
Resource-aware Scheduling
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#resource-aware-scheduling" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Resource-aware Scheduling" href="#resource-aware-scheduling"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPU-aware Placement&lt;/strong&gt;: Better GPU resource management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage-aware Scheduling&lt;/strong&gt;: Optimized storage resource allocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network-aware Placement&lt;/strong&gt;: Consideration of network topology&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost-aware Scheduling&lt;/strong&gt;: Consideration of resource costs&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="performance-improvements"&gt;
Performance Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#performance-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Improvements" href="#performance-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Algorithms&lt;/strong&gt;: Improved scheduling algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallel Processing&lt;/strong&gt;: Better utilization of multiple cores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Efficiency&lt;/strong&gt;: Reduced memory footprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Better performance at scale&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="beta-features"&gt;
Beta Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#beta-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Beta Features" href="#beta-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enhanced-rbac-system"&gt;
1. Enhanced RBAC System
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#1-enhanced-rbac-system" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced RBAC System" href="#1-enhanced-rbac-system"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Role-Based Access Control system receives major updates:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="fine-grained-permissions"&gt;
Fine-grained Permissions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#fine-grained-permissions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Fine-grained Permissions" href="#fine-grained-permissions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource-level Permissions&lt;/strong&gt;: Granular control over specific resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditional Access&lt;/strong&gt;: Context-aware authorization decisions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Policy Evaluation&lt;/strong&gt;: Real-time policy enforcement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Trail Enhancement&lt;/strong&gt;: Comprehensive security event tracking&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="implementation-examples"&gt;
Implementation Examples
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#implementation-examples" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Implementation Examples" href="#implementation-examples"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterRole&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;conditional-pod-reader&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;- &lt;span class="nt"&gt;apiGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pods&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;verbs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;list&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;watch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;conditions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;object.metadata.namespace == &amp;#34;production&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-advanced-network-policies"&gt;
2. Advanced Network Policies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#2-advanced-network-policies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Advanced Network Policies" href="#2-advanced-network-policies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Network policy capabilities are significantly enhanced:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="protocol-level-filtering"&gt;
Protocol-level Filtering
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#protocol-level-filtering" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Protocol-level Filtering" href="#protocol-level-filtering"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Layer 7 Policies&lt;/strong&gt;: Application-layer traffic filtering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced Port Management&lt;/strong&gt;: Sophisticated port-based rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service Mesh Integration&lt;/strong&gt;: Better integration with service meshes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Faster policy enforcement&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-improved-storage-management"&gt;
3. Improved Storage Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#3-improved-storage-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Improved Storage Management" href="#3-improved-storage-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Storage features receive comprehensive updates:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="volume-management"&gt;
Volume Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#volume-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Volume Management" href="#volume-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Provisioning&lt;/strong&gt;: Enhanced storage class support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volume Snapshots&lt;/strong&gt;: Improved backup and recovery capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Capacity Tracking&lt;/strong&gt;: More accurate resource management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-attach Volumes&lt;/strong&gt;: Support for shared storage access&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="alpha-features"&gt;
Alpha Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#alpha-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Alpha Features" href="#alpha-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-webassembly-support"&gt;
1. WebAssembly Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#1-webassembly-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. WebAssembly Support" href="#1-webassembly-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Early support for WebAssembly workloads continues to evolve:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="cross-platform-compatibility"&gt;
Cross-platform Compatibility
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#cross-platform-compatibility" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Cross-platform Compatibility" href="#cross-platform-compatibility"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Architecture Independence&lt;/strong&gt;: Same code across different platforms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Sandboxing&lt;/strong&gt;: Isolated execution environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Near-native performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Case Expansion&lt;/strong&gt;: Serverless functions, edge computing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-enhanced-observability"&gt;
2. Enhanced Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#2-enhanced-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Enhanced Observability" href="#2-enhanced-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;New observability capabilities:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="distributed-tracing"&gt;
Distributed Tracing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#distributed-tracing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Distributed Tracing" href="#distributed-tracing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;End-to-end Tracing&lt;/strong&gt;: Complete request flow tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Analysis&lt;/strong&gt;: Detailed performance insights&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debugging Support&lt;/strong&gt;: Enhanced troubleshooting capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integration&lt;/strong&gt;: Better integration with existing tools&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-edge-computing-support"&gt;
3. Edge Computing Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#3-edge-computing-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Edge Computing Support" href="#3-edge-computing-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Edge computing features continue to evolve:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="lightweight-components"&gt;
Lightweight Components
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#lightweight-components" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Lightweight Components" href="#lightweight-components"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource Optimization&lt;/strong&gt;: Reduced resource requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline Operation&lt;/strong&gt;: Better support for intermittent connectivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local Processing&lt;/strong&gt;: Reduced dependency on centralized resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-cluster Management&lt;/strong&gt;: Coordinated edge deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="api-cleanup-and-deprecations"&gt;
API Cleanup and Deprecations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#api-cleanup-and-deprecations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor API Cleanup and Deprecations" href="#api-cleanup-and-deprecations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="major-api-cleanup"&gt;
Major API Cleanup
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#major-api-cleanup" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Major API Cleanup" href="#major-api-cleanup"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.32 release includes significant API cleanup efforts:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="deprecated-api-removal"&gt;
Deprecated API Removal
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#deprecated-api-removal" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deprecated API Removal" href="#deprecated-api-removal"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legacy APIs&lt;/strong&gt;: Removal of long-deprecated API versions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unused Endpoints&lt;/strong&gt;: Cleanup of unused API endpoints&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redundant Resources&lt;/strong&gt;: Removal of redundant resource types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplified Interfaces&lt;/strong&gt;: Streamlined API interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="impact-on-users-1"&gt;
Impact on Users
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#impact-on-users-1" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Impact on Users" href="#impact-on-users-1"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cleaner API&lt;/strong&gt;: More consistent and maintainable API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Performance&lt;/strong&gt;: Reduced API server overhead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Security&lt;/strong&gt;: Reduced attack surface&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Maintainability&lt;/strong&gt;: Easier to maintain and extend&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="migration-guide"&gt;
Migration Guide
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#migration-guide" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Migration Guide" href="#migration-guide"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;For users affected by API changes:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="pre-upgrade-preparation"&gt;
Pre-upgrade Preparation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#pre-upgrade-preparation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Pre-upgrade Preparation" href="#pre-upgrade-preparation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Review deprecation notices&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Update API client code&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Test with new API versions&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Update automation scripts&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Verify third-party tool compatibility&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="migration-tools"&gt;
Migration Tools
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#migration-tools" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Migration Tools" href="#migration-tools"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;kubectl convert&lt;/strong&gt;: Automatic API version conversion&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migration Scripts&lt;/strong&gt;: Community-provided migration tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Comprehensive migration guides&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support&lt;/strong&gt;: Community support for migration issues&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="security-enhancements"&gt;
Security Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#security-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Security Enhancements" href="#security-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enhanced-authentication"&gt;
1. Enhanced Authentication
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#1-enhanced-authentication" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced Authentication" href="#1-enhanced-authentication"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Authentication system improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="multi-factor-authentication"&gt;
Multi-factor Authentication
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#multi-factor-authentication" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Multi-factor Authentication" href="#multi-factor-authentication"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MFA Support&lt;/strong&gt;: Enhanced authentication security&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Certificate Management&lt;/strong&gt;: Improved certificate lifecycle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Token Security&lt;/strong&gt;: Enhanced service account token security&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity Federation&lt;/strong&gt;: Better integration with external identity providers&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-supply-chain-security"&gt;
2. Supply Chain Security
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#2-supply-chain-security" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Supply Chain Security" href="#2-supply-chain-security"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Software supply chain security features:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="artifact-verification"&gt;
Artifact Verification
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#artifact-verification" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Artifact Verification" href="#artifact-verification"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Digital Signatures&lt;/strong&gt;: Ensuring artifact integrity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Scanning&lt;/strong&gt;: Automated security scanning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy Enforcement&lt;/strong&gt;: Automated security policy compliance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Trail&lt;/strong&gt;: Comprehensive security event logging&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="performance-improvements-1"&gt;
Performance Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#performance-improvements-1" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Improvements" href="#performance-improvements-1"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-etcd-optimizations"&gt;
1. etcd Optimizations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#1-etcd-optimizations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. etcd Optimizations" href="#1-etcd-optimizations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;etcd, the backing store, receives optimizations:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="storage-efficiency"&gt;
Storage Efficiency
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#storage-efficiency" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Storage Efficiency" href="#storage-efficiency"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compression&lt;/strong&gt;: Enhanced data compression&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indexing&lt;/strong&gt;: Improved data indexing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Garbage Collection&lt;/strong&gt;: Better cleanup of old data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backup Optimization&lt;/strong&gt;: Faster and more reliable backups&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-controller-performance"&gt;
2. Controller Performance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#2-controller-performance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Controller Performance" href="#2-controller-performance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Controller performance improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="algorithm-optimization"&gt;
Algorithm Optimization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#algorithm-optimization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Algorithm Optimization" href="#algorithm-optimization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Reconciliation&lt;/strong&gt;: Improved reconciliation algorithms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallel Processing&lt;/strong&gt;: Better utilization of multiple cores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Efficiency&lt;/strong&gt;: Reduced memory footprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Better performance at scale&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="community-impact"&gt;
Community Impact
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#community-impact" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Impact" href="#community-impact"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="contributor-recognition"&gt;
Contributor Recognition
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#contributor-recognition" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Contributor Recognition" href="#contributor-recognition"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.32 release highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Global Collaboration&lt;/strong&gt;: Contributors from around the world&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organizational Diversity&lt;/strong&gt;: Companies of all sizes contributing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill Development&lt;/strong&gt;: Opportunities for learning and growth&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Building&lt;/strong&gt;: Strengthening the Kubernetes ecosystem&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="ecosystem-updates"&gt;
Ecosystem Updates
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#ecosystem-updates" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Ecosystem Updates" href="#ecosystem-updates"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The broader ecosystem responds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud Providers&lt;/strong&gt;: Update managed Kubernetes services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools and Platforms&lt;/strong&gt;: Update compatibility matrices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Comprehensive documentation updates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Training Materials&lt;/strong&gt;: Updated certification programs&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-forward"&gt;
Looking Forward
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#looking-forward" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Forward" href="#looking-forward"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="v133-preview"&gt;
v1.33 Preview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#v133-preview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor v1.33 Preview" href="#v133-preview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The community is already working on v1.33, which will include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Continued Performance Improvements&lt;/strong&gt;: Further optimizations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Alpha Features&lt;/strong&gt;: Experimental capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Additional security features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Usability&lt;/strong&gt;: Improved developer and operator experience&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="long-term-roadmap"&gt;
Long-term Roadmap
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#long-term-roadmap" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Long-term Roadmap" href="#long-term-roadmap"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Future releases will focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simplification&lt;/strong&gt;: Making Kubernetes easier to use&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Better support for edge environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI/ML Workloads&lt;/strong&gt;: Enhanced support for machine learning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability&lt;/strong&gt;: Reducing resource consumption&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-32-release/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The release of Kubernetes v1.32 &amp;ldquo;Penelope&amp;rdquo; represents another significant step forward in the platform&amp;rsquo;s evolution. With 44 enhancements, API cleanup, improved performance, and enhanced security, this release continues Kubernetes&amp;rsquo; tradition of innovation and stability.&lt;/p&gt;
&lt;p&gt;Key highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Cleanup&lt;/strong&gt;: Significant cleanup of deprecated and unused APIs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Field-based Selectors&lt;/strong&gt;: Enhanced querying capabilities for custom resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Improvements&lt;/strong&gt;: Better API server and scheduler performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Collaboration&lt;/strong&gt;: Global effort involving thousands of contributors&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The community&amp;rsquo;s commitment to backward compatibility, comprehensive testing, and user feedback ensures that upgrades are smooth and reliable. As organizations plan their upgrades to v1.32, they can be confident in the platform&amp;rsquo;s maturity and the community&amp;rsquo;s support.&lt;/p&gt;
&lt;p&gt;The success of this release demonstrates the power of open-source collaboration and the strength of the Kubernetes ecosystem. With continued innovation and community support, Kubernetes remains the foundation of modern cloud-native computing.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about Kubernetes v1.32, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/blog/2024/12/11/kubernetes-v1-32-release/"
&gt;official release blog post&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://www.perfectscale.io/blog/kubernetes-v1-32-penelope"
&gt;PerfectScale blog post&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/releases" term="releases" label="releases"/><category scheme="https://k8s-ops.net/tags/v1.32" term="v1.32" label="v1.32"/><category scheme="https://k8s-ops.net/tags/penelope" term="penelope" label="penelope"/><category scheme="https://k8s-ops.net/tags/features" term="features" label="features"/><category scheme="https://k8s-ops.net/tags/api-cleanup" term="api-cleanup" label="api-cleanup"/></entry><entry><title>Kubernetes v1.30 'Uwubernetes' Official Release</title><link href="https://k8s-ops.net/posts/kubernetes-v1-30-release/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-v1-30-release/</id><published>2024-04-17T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;On April 17, 2024, the Kubernetes community celebrated the official release of Kubernetes v1.30, codenamed &amp;ldquo;Uwubernetes.&amp;rdquo; This release represents a significant milestone in the platform&amp;rsquo;s evolution, bringing 45 enhancements with 11 moving to stable, 19 entering beta, and 15 remaining in alpha. The release demonstrates the community&amp;rsquo;s continued commitment to innovation, stability, and user experience improvements.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="release-highlights"&gt;
Release Highlights
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#release-highlights" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Release Highlights" href="#release-highlights"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="major-features-moving-to-stable"&gt;
Major Features Moving to Stable
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#major-features-moving-to-stable" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Major Features Moving to Stable" href="#major-features-moving-to-stable"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="1-structured-logging"&gt;
1. Structured Logging
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#1-structured-logging" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Structured Logging" href="#1-structured-logging"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;One of the most anticipated features graduating to stable is structured logging. This enhancement transforms Kubernetes logs from plain text to structured JSON format, making them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Machine-readable&lt;/strong&gt;: Easier to parse and analyze programmatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Searchable&lt;/strong&gt;: Better indexing capabilities for log aggregation systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistent&lt;/strong&gt;: Standardized format across all Kubernetes components&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensible&lt;/strong&gt;: Additional metadata can be easily added&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;level&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;info&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-04-17T10:30:00Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;component&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kube-scheduler&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Pod scheduled successfully&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;pod&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;nginx-deployment-abc123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;node&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;worker-node-1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="2-node-swap-support"&gt;
2. Node Swap Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#2-node-swap-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Node Swap Support" href="#2-node-swap-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Node swap support graduates to stable, allowing Kubernetes to work with systems that have swap memory enabled. This feature provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configurable Swap Behavior&lt;/strong&gt;: Admins can control swap usage per node&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Pressure Handling&lt;/strong&gt;: Better management of memory-constrained environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development Flexibility&lt;/strong&gt;: Easier local development setups&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Optimization&lt;/strong&gt;: More efficient use of available memory&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Node&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;worker-node-1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;swapBehavior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;NoSwap&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# or &amp;#34;LimitedSwap&amp;#34;, &amp;#34;UnlimitedSwap&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="3-dynamic-resource-allocation-dra"&gt;
3. Dynamic Resource Allocation (DRA)
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#3-dynamic-resource-allocation-dra" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Dynamic Resource Allocation (DRA)" href="#3-dynamic-resource-allocation-dra"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;DRA moves to stable, enabling sophisticated resource allocation beyond traditional CPU and memory:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Specialized Hardware&lt;/strong&gt;: GPUs, FPGAs, specialized accelerators&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Management&lt;/strong&gt;: Runtime allocation and deallocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Sharing&lt;/strong&gt;: Multiple pods can share expensive hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Resource Types&lt;/strong&gt;: Support for vendor-specific resources&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="beta-features"&gt;
Beta Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#beta-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Beta Features" href="#beta-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="1-enhanced-rbac"&gt;
1. Enhanced RBAC
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#1-enhanced-rbac" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enhanced RBAC" href="#1-enhanced-rbac"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;The enhanced RBAC system provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fine-grained Permissions&lt;/strong&gt;: More granular access control&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditional Access&lt;/strong&gt;: Context-aware authorization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Improvements&lt;/strong&gt;: Better security event tracking&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="2-advanced-network-policies"&gt;
2. Advanced Network Policies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#2-advanced-network-policies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Advanced Network Policies" href="#2-advanced-network-policies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Network policy enhancements include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Protocol Support&lt;/strong&gt;: Enhanced protocol-level filtering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimizations&lt;/strong&gt;: Faster policy enforcement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced Traffic Control&lt;/strong&gt;: More sophisticated network rules&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="3-improved-storage-management"&gt;
3. Improved Storage Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#3-improved-storage-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Improved Storage Management" href="#3-improved-storage-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Storage improvements feature:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Volume Snapshots&lt;/strong&gt;: Better backup and recovery capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Capacity Tracking&lt;/strong&gt;: More accurate resource management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Provisioning&lt;/strong&gt;: Enhanced storage class support&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="whats-new-in-alpha"&gt;
What&amp;rsquo;s New in Alpha
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#whats-new-in-alpha" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What&amp;rsquo;s New in Alpha" href="#whats-new-in-alpha"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-webassembly-support"&gt;
1. WebAssembly Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#1-webassembly-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. WebAssembly Support" href="#1-webassembly-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Early support for WebAssembly workloads:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cross-platform Compatibility&lt;/strong&gt;: Run the same code across different architectures&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Sandboxed execution environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Near-native performance for interpreted languages&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-enhanced-observability"&gt;
2. Enhanced Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#2-enhanced-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Enhanced Observability" href="#2-enhanced-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;New observability features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Distributed Tracing&lt;/strong&gt;: Better request flow tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metrics Collection&lt;/strong&gt;: Enhanced performance monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Log Aggregation&lt;/strong&gt;: Improved log management capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-edge-computing-support"&gt;
3. Edge Computing Support
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#3-edge-computing-support" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Edge Computing Support" href="#3-edge-computing-support"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Edge computing enhancements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lightweight Components&lt;/strong&gt;: Optimized for resource-constrained environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline Operation&lt;/strong&gt;: Better support for intermittent connectivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local Processing&lt;/strong&gt;: Reduced dependency on centralized resources&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="deprecations-and-removals"&gt;
Deprecations and Removals
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#deprecations-and-removals" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deprecations and Removals" href="#deprecations-and-removals"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="deprecated-features"&gt;
Deprecated Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#deprecated-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deprecated Features" href="#deprecated-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Several features have been deprecated in v1.30:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legacy API Versions&lt;/strong&gt;: Some older API versions are being phased out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated Flags&lt;/strong&gt;: Command-line flags that are no longer recommended&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obsolete Configurations&lt;/strong&gt;: Configuration options that have better alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="removed-features"&gt;
Removed Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#removed-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Removed Features" href="#removed-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Features removed in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unused Components&lt;/strong&gt;: Components that are no longer maintained&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated APIs&lt;/strong&gt;: APIs that have been deprecated for multiple releases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy Tools&lt;/strong&gt;: Tools that have been replaced by newer alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="performance-improvements"&gt;
Performance Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#performance-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Improvements" href="#performance-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="scheduler-enhancements"&gt;
Scheduler Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#scheduler-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Scheduler Enhancements" href="#scheduler-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The Kubernetes scheduler has received significant improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Scheduling&lt;/strong&gt;: Reduced scheduling latency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Resource Utilization&lt;/strong&gt;: More efficient resource allocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Affinity Rules&lt;/strong&gt;: Improved pod placement logic&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="api-server-optimizations"&gt;
API Server Optimizations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#api-server-optimizations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor API Server Optimizations" href="#api-server-optimizations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;API server performance improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduced Memory Usage&lt;/strong&gt;: More efficient memory management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster Request Processing&lt;/strong&gt;: Improved response times&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Caching&lt;/strong&gt;: Enhanced caching mechanisms&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="etcd-improvements"&gt;
etcd Improvements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#etcd-improvements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor etcd Improvements" href="#etcd-improvements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;etcd, the backing store for Kubernetes, has been optimized:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduced Storage Requirements&lt;/strong&gt;: More efficient data storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster Operations&lt;/strong&gt;: Improved read and write performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Compression&lt;/strong&gt;: Enhanced data compression algorithms&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="security-enhancements"&gt;
Security Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#security-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Security Enhancements" href="#security-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="enhanced-authentication"&gt;
Enhanced Authentication
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#enhanced-authentication" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Enhanced Authentication" href="#enhanced-authentication"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;New authentication features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-factor Authentication&lt;/strong&gt;: Support for MFA in authentication flows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Certificate Management&lt;/strong&gt;: Improved certificate lifecycle management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Token Security&lt;/strong&gt;: Enhanced security for service account tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="network-security"&gt;
Network Security
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#network-security" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Network Security" href="#network-security"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Network security improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Encrypted Communication&lt;/strong&gt;: Enhanced encryption for inter-component communication&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network Policies&lt;/strong&gt;: More sophisticated network policy enforcement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Context&lt;/strong&gt;: Improved security context handling&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="upgrade-considerations"&gt;
Upgrade Considerations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#upgrade-considerations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Upgrade Considerations" href="#upgrade-considerations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="pre-upgrade-checklist"&gt;
Pre-upgrade Checklist
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#pre-upgrade-checklist" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Pre-upgrade Checklist" href="#pre-upgrade-checklist"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Before upgrading to v1.30:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Review deprecation notices&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Test applications in staging environment&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Update client tools (kubectl, etc.)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Backup cluster configurations&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Verify third-party tool compatibility&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="upgrade-process"&gt;
Upgrade Process
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#upgrade-process" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Upgrade Process" href="#upgrade-process"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The recommended upgrade process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Backup&lt;/strong&gt;: Create backups of all cluster data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test&lt;/strong&gt;: Upgrade staging environment first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plan&lt;/strong&gt;: Schedule production upgrade during maintenance window&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execute&lt;/strong&gt;: Perform rolling upgrade of control plane and nodes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validate&lt;/strong&gt;: Verify all applications and services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor&lt;/strong&gt;: Watch for any issues post-upgrade&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="rollback-plan"&gt;
Rollback Plan
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#rollback-plan" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Rollback Plan" href="#rollback-plan"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;In case of issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Immediate Rollback&lt;/strong&gt;: Have previous version ready&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Recovery&lt;/strong&gt;: Ensure backup restoration procedures&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Communication Plan&lt;/strong&gt;: Notify stakeholders of any issues&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="community-impact"&gt;
Community Impact
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#community-impact" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Impact" href="#community-impact"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="contributor-statistics"&gt;
Contributor Statistics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#contributor-statistics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Contributor Statistics" href="#contributor-statistics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The v1.30 release involved:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1,000+ Contributors&lt;/strong&gt;: From around the world&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;50+ Organizations&lt;/strong&gt;: Contributing code and resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;20+ Special Interest Groups&lt;/strong&gt;: Coordinating development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 Months&lt;/strong&gt;: Of active development&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="ecosystem-updates"&gt;
Ecosystem Updates
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#ecosystem-updates" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Ecosystem Updates" href="#ecosystem-updates"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The broader ecosystem has been updated:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud Providers&lt;/strong&gt;: Updated their managed Kubernetes services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools and Platforms&lt;/strong&gt;: Updated compatibility matrices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Comprehensive updates to official docs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Training Materials&lt;/strong&gt;: Updated certification and training programs&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-forward"&gt;
Looking Forward
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#looking-forward" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Forward" href="#looking-forward"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="v131-preview"&gt;
v1.31 Preview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#v131-preview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor v1.31 Preview" href="#v131-preview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The community is already working on v1.31, which will include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Continued Performance Improvements&lt;/strong&gt;: Further optimizations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Alpha Features&lt;/strong&gt;: Experimental capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Additional security features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Usability&lt;/strong&gt;: Improved developer and operator experience&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="long-term-roadmap"&gt;
Long-term Roadmap
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#long-term-roadmap" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Long-term Roadmap" href="#long-term-roadmap"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Future releases will focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simplification&lt;/strong&gt;: Making Kubernetes easier to use&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Better support for edge environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI/ML Workloads&lt;/strong&gt;: Enhanced support for machine learning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability&lt;/strong&gt;: Reducing resource consumption&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The release of Kubernetes v1.30 &amp;ldquo;Uwubernetes&amp;rdquo; represents another significant step forward in the platform&amp;rsquo;s evolution. With 45 enhancements, improved performance, enhanced security, and better usability, this release continues Kubernetes&amp;rsquo; tradition of innovation and stability.&lt;/p&gt;
&lt;p&gt;The community&amp;rsquo;s commitment to backward compatibility, comprehensive testing, and user feedback ensures that upgrades are smooth and reliable. As organizations plan their upgrades to v1.30, they can be confident in the platform&amp;rsquo;s maturity and the community&amp;rsquo;s support.&lt;/p&gt;
&lt;p&gt;The success of this release demonstrates the power of open-source collaboration and the strength of the Kubernetes ecosystem. With thousands of contributors, hundreds of organizations, and millions of users worldwide, Kubernetes continues to be the foundation of modern cloud-native computing.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about Kubernetes v1.30, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/blog/2024/04/17/kubernetes-v1-30-release/"
&gt;official release blog post&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html"
&gt;AWS EKS documentation&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/releases" term="releases" label="releases"/><category scheme="https://k8s-ops.net/tags/v1.30" term="v1.30" label="v1.30"/><category scheme="https://k8s-ops.net/tags/uwubernetes" term="uwubernetes" label="uwubernetes"/><category scheme="https://k8s-ops.net/tags/features" term="features" label="features"/></entry><entry><title>KubeCon Europe 2024: Key Themes and Trends</title><link href="https://k8s-ops.net/posts/kubecon-europe-2024-themes/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubecon-europe-2024-themes/</id><published>2024-04-10T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;KubeCon + CloudNativeCon Europe 2024, held from March 19-22 in Paris, France, brought together thousands of cloud-native enthusiasts, developers, operators, and industry leaders. The event served as a showcase for the latest innovations in the Kubernetes ecosystem and provided insights into the direction of cloud-native computing. Here&amp;rsquo;s a comprehensive look at the key themes and trends that emerged from this landmark event.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="event-overview"&gt;
Event Overview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#event-overview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Event Overview" href="#event-overview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="attendance-and-participation"&gt;
Attendance and Participation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#attendance-and-participation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Attendance and Participation" href="#attendance-and-participation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The 2024 European edition of KubeCon attracted:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Over 8,000 Attendees&lt;/strong&gt;: From 80+ countries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;300+ Sessions&lt;/strong&gt;: Including keynotes, breakout sessions, and workshops&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;200+ Sponsors&lt;/strong&gt;: Representing the full spectrum of the cloud-native ecosystem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;50+ Special Interest Groups&lt;/strong&gt;: Hosting meetings and discussions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="venue-and-experience"&gt;
Venue and Experience
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#venue-and-experience" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Venue and Experience" href="#venue-and-experience"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Held at the Paris Expo Porte de Versailles, the event featured:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multiple Tracks&lt;/strong&gt;: Covering various aspects of cloud-native computing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive Workshops&lt;/strong&gt;: Hands-on learning opportunities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networking Events&lt;/strong&gt;: Community building and collaboration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exhibition Hall&lt;/strong&gt;: Showcasing the latest tools and technologies&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="key-themes"&gt;
Key Themes
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#key-themes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Themes" href="#key-themes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-platform-engineering-evolution"&gt;
1. Platform Engineering Evolution
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#1-platform-engineering-evolution" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Platform Engineering Evolution" href="#1-platform-engineering-evolution"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Platform engineering emerged as a dominant theme, reflecting the industry&amp;rsquo;s shift toward internal developer platforms (IDPs):&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="self-service-infrastructure"&gt;
Self-Service Infrastructure
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#self-service-infrastructure" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Self-Service Infrastructure" href="#self-service-infrastructure"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Organizations are increasingly adopting self-service approaches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Developer Portals&lt;/strong&gt;: Centralized interfaces for infrastructure access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automated Provisioning&lt;/strong&gt;: Streamlined resource allocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy as Code&lt;/strong&gt;: Automated compliance and governance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost Optimization&lt;/strong&gt;: Built-in cost management and monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="platform-teams"&gt;
Platform Teams
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#platform-teams" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Platform Teams" href="#platform-teams"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;The rise of dedicated platform teams:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cross-functional Collaboration&lt;/strong&gt;: Developers, operators, and security working together&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Experience Focus&lt;/strong&gt;: Prioritizing developer productivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standardization&lt;/strong&gt;: Consistent patterns and practices across organizations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool Integration&lt;/strong&gt;: Seamless integration of development tools&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-security-and-compliance"&gt;
2. Security and Compliance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#2-security-and-compliance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Security and Compliance" href="#2-security-and-compliance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Security remained a top priority, with several sessions focusing on:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="zero-trust-architecture"&gt;
Zero Trust Architecture
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#zero-trust-architecture" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Zero Trust Architecture" href="#zero-trust-architecture"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Implementing zero trust principles in Kubernetes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Identity-based Access&lt;/strong&gt;: Moving beyond network-based security&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Continuous Verification&lt;/strong&gt;: Ongoing authentication and authorization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Least Privilege Access&lt;/strong&gt;: Minimal required permissions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Micro-segmentation&lt;/strong&gt;: Granular network security policies&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="supply-chain-security"&gt;
Supply Chain Security
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#supply-chain-security" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Supply Chain Security" href="#supply-chain-security"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Addressing software supply chain vulnerabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SBOM Integration&lt;/strong&gt;: Software bill of materials for transparency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container Scanning&lt;/strong&gt;: Automated vulnerability detection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Signing and Verification&lt;/strong&gt;: Ensuring artifact integrity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy Enforcement&lt;/strong&gt;: Automated security policy compliance&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-observability-and-monitoring"&gt;
3. Observability and Monitoring
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#3-observability-and-monitoring" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Observability and Monitoring" href="#3-observability-and-monitoring"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Observability took center stage with discussions on:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="unified-observability"&gt;
Unified Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#unified-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Unified Observability" href="#unified-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Integrating monitoring, logging, and tracing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OpenTelemetry&lt;/strong&gt;: Standardizing observability data collection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distributed Tracing&lt;/strong&gt;: End-to-end request tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metrics Aggregation&lt;/strong&gt;: Centralized performance monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alert Management&lt;/strong&gt;: Intelligent alerting and incident response&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="aiml-observability"&gt;
AI/ML Observability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#aiml-observability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor AI/ML Observability" href="#aiml-observability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Specialized monitoring for machine learning workloads:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model Performance&lt;/strong&gt;: Tracking ML model metrics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Drift Detection&lt;/strong&gt;: Monitoring input data changes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Utilization&lt;/strong&gt;: Optimizing GPU and CPU usage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipeline Monitoring&lt;/strong&gt;: End-to-end ML pipeline visibility&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-edge-computing-and-iot"&gt;
4. Edge Computing and IoT
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#4-edge-computing-and-iot" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Edge Computing and IoT" href="#4-edge-computing-and-iot"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Edge computing gained significant attention:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="kubernetes-at-the-edge"&gt;
Kubernetes at the Edge
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#kubernetes-at-the-edge" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Kubernetes at the Edge" href="#kubernetes-at-the-edge"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Extending Kubernetes to edge environments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lightweight Distributions&lt;/strong&gt;: Optimized for resource-constrained devices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline Operation&lt;/strong&gt;: Functionality during connectivity issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local Processing&lt;/strong&gt;: Reduced dependency on centralized resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-cluster Management&lt;/strong&gt;: Coordinating distributed deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="iot-integration"&gt;
IoT Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#iot-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor IoT Integration" href="#iot-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Connecting IoT devices with Kubernetes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Device Management&lt;/strong&gt;: Automated device provisioning and updates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Processing&lt;/strong&gt;: Local and cloud-based data analytics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Secure communication and data handling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Managing thousands of connected devices&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="5-sustainability-and-green-computing"&gt;
5. Sustainability and Green Computing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#5-sustainability-and-green-computing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 5. Sustainability and Green Computing" href="#5-sustainability-and-green-computing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Environmental impact became a prominent discussion topic:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="resource-optimization"&gt;
Resource Optimization
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#resource-optimization" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Resource Optimization" href="#resource-optimization"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Reducing the environmental footprint:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Energy-efficient Scheduling&lt;/strong&gt;: Optimizing workload placement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Right-sizing&lt;/strong&gt;: Matching resources to actual needs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Idle Resource Management&lt;/strong&gt;: Automatically scaling down unused resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carbon-aware Computing&lt;/strong&gt;: Considering environmental impact in decisions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="sustainable-practices"&gt;
Sustainable Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#sustainable-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Sustainable Practices" href="#sustainable-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Implementing green computing practices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Renewable Energy&lt;/strong&gt;: Using green energy sources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficient Algorithms&lt;/strong&gt;: Optimizing computational efficiency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle Management&lt;/strong&gt;: Reducing electronic waste&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carbon Tracking&lt;/strong&gt;: Measuring and reporting environmental impact&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="technical-innovations"&gt;
Technical Innovations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#technical-innovations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Technical Innovations" href="#technical-innovations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-webassembly-wasm-integration"&gt;
1. WebAssembly (Wasm) Integration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#1-webassembly-wasm-integration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. WebAssembly (Wasm) Integration" href="#1-webassembly-wasm-integration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;WebAssembly emerged as a significant trend:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="wasm-in-kubernetes"&gt;
Wasm in Kubernetes
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#wasm-in-kubernetes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Wasm in Kubernetes" href="#wasm-in-kubernetes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Running WebAssembly workloads:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cross-platform Compatibility&lt;/strong&gt;: Same code across different architectures&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Sandboxed execution environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Near-native performance for interpreted languages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;: Serverless functions, edge computing, plugin systems&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-gitops-and-git-based-operations"&gt;
2. GitOps and Git-based Operations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#2-gitops-and-git-based-operations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. GitOps and Git-based Operations" href="#2-gitops-and-git-based-operations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;GitOps continued to gain momentum:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="advanced-gitops-patterns"&gt;
Advanced GitOps Patterns
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#advanced-gitops-patterns" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Advanced GitOps Patterns" href="#advanced-gitops-patterns"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Evolving GitOps practices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-environment Management&lt;/strong&gt;: Coordinating across environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy Enforcement&lt;/strong&gt;: Automated compliance checking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollback Strategies&lt;/strong&gt;: Quick and reliable rollback mechanisms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Integration&lt;/strong&gt;: Secure Git-based workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-service-mesh-evolution"&gt;
3. Service Mesh Evolution
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#3-service-mesh-evolution" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Service Mesh Evolution" href="#3-service-mesh-evolution"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Service mesh technology matured:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="next-generation-service-meshes"&gt;
Next-generation Service Meshes
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#next-generation-service-meshes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Next-generation Service Meshes" href="#next-generation-service-meshes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Advanced service mesh capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Reduced latency and overhead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Enhancements&lt;/strong&gt;: Advanced authentication and authorization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability Integration&lt;/strong&gt;: Built-in monitoring and tracing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-cluster Support&lt;/strong&gt;: Cross-cluster communication&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="community-and-ecosystem"&gt;
Community and Ecosystem
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#community-and-ecosystem" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community and Ecosystem" href="#community-and-ecosystem"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-diversity-and-inclusion"&gt;
1. Diversity and Inclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#1-diversity-and-inclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Diversity and Inclusion" href="#1-diversity-and-inclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The community emphasized diversity:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="inclusive-practices"&gt;
Inclusive Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#inclusive-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Inclusive Practices" href="#inclusive-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Building inclusive communities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Diverse Representation&lt;/strong&gt;: Ensuring diverse speaker lineups&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility&lt;/strong&gt;: Making events accessible to all&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mentorship Programs&lt;/strong&gt;: Supporting new contributors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code of Conduct&lt;/strong&gt;: Maintaining welcoming environments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-education-and-training"&gt;
2. Education and Training
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#2-education-and-training" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Education and Training" href="#2-education-and-training"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Education remained a priority:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="learning-resources"&gt;
Learning Resources
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#learning-resources" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Learning Resources" href="#learning-resources"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Comprehensive educational offerings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Certification Programs&lt;/strong&gt;: Kubernetes and cloud-native certifications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hands-on Workshops&lt;/strong&gt;: Practical learning experiences&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Comprehensive and accessible documentation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Support&lt;/strong&gt;: Peer learning and support networks&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-open-source-sustainability"&gt;
3. Open Source Sustainability
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#3-open-source-sustainability" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Open Source Sustainability" href="#3-open-source-sustainability"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Ensuring long-term sustainability:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="project-maintenance"&gt;
Project Maintenance
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#project-maintenance" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Project Maintenance" href="#project-maintenance"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Maintaining open source projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Funding Models&lt;/strong&gt;: Sustainable funding for open source&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contributor Recognition&lt;/strong&gt;: Acknowledging and rewarding contributors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Governance&lt;/strong&gt;: Transparent and inclusive governance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Succession Planning&lt;/strong&gt;: Ensuring project continuity&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="industry-impact"&gt;
Industry Impact
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#industry-impact" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Industry Impact" href="#industry-impact"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-enterprise-adoption"&gt;
1. Enterprise Adoption
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#1-enterprise-adoption" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Enterprise Adoption" href="#1-enterprise-adoption"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Enterprise Kubernetes adoption trends:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="production-deployments"&gt;
Production Deployments
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#production-deployments" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Production Deployments" href="#production-deployments"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Large-scale production use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-cluster Management&lt;/strong&gt;: Managing hundreds of clusters&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hybrid Cloud&lt;/strong&gt;: Seamless cloud and on-premises integration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy Modernization&lt;/strong&gt;: Migrating traditional applications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance&lt;/strong&gt;: Meeting regulatory requirements&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-startup-innovation"&gt;
2. Startup Innovation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#2-startup-innovation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Startup Innovation" href="#2-startup-innovation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Startup ecosystem growth:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="new-tools-and-platforms"&gt;
New Tools and Platforms
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#new-tools-and-platforms" class="gblog-post__anchor clip flex align-center" aria-label="Anchor New Tools and Platforms" href="#new-tools-and-platforms"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Innovative solutions emerging:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Developer Experience&lt;/strong&gt;: Tools improving developer productivity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operations Automation&lt;/strong&gt;: Reducing operational overhead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Solutions&lt;/strong&gt;: Addressing emerging security challenges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specialized Workloads&lt;/strong&gt;: Domain-specific optimizations&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-forward"&gt;
Looking Forward
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#looking-forward" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Forward" href="#looking-forward"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-emerging-technologies"&gt;
1. Emerging Technologies
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#1-emerging-technologies" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Emerging Technologies" href="#1-emerging-technologies"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Future technology trends:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="quantum-computing"&gt;
Quantum Computing
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#quantum-computing" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Quantum Computing" href="#quantum-computing"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Preparing for quantum computing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quantum-ready Applications&lt;/strong&gt;: Building quantum-compatible systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hybrid Classical-Quantum&lt;/strong&gt;: Integrating quantum and classical computing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Implications&lt;/strong&gt;: Addressing quantum security challenges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Management&lt;/strong&gt;: Managing quantum computing resources&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-autonomous-operations"&gt;
2. Autonomous Operations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#2-autonomous-operations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Autonomous Operations" href="#2-autonomous-operations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Moving toward autonomous systems:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h4 id="self-healing-systems"&gt;
Self-healing Systems
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#self-healing-systems" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Self-healing Systems" href="#self-healing-systems"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;Automated problem resolution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Predictive Maintenance&lt;/strong&gt;: Anticipating and preventing issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automated Remediation&lt;/strong&gt;: Self-correcting systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intelligent Scaling&lt;/strong&gt;: Automatic resource optimization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Continuous Optimization&lt;/strong&gt;: Ongoing performance improvement&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubecon-europe-2024-themes/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;KubeCon Europe 2024 demonstrated the continued evolution and maturity of the cloud-native ecosystem. The event highlighted the community&amp;rsquo;s commitment to innovation, security, sustainability, and inclusivity while showcasing the practical applications of Kubernetes and related technologies.&lt;/p&gt;
&lt;p&gt;Key takeaways include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Platform Engineering&lt;/strong&gt;: The rise of internal developer platforms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Focus&lt;/strong&gt;: Continued emphasis on security and compliance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability&lt;/strong&gt;: Unified approaches to monitoring and debugging&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Extending Kubernetes to edge environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability&lt;/strong&gt;: Environmental considerations in cloud-native computing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community&lt;/strong&gt;: Strong focus on diversity, inclusion, and education&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As the cloud-native ecosystem continues to evolve, events like KubeCon Europe provide valuable opportunities for learning, networking, and collaboration. The insights and trends from this event will shape the direction of cloud-native computing in the coming year and beyond.&lt;/p&gt;
&lt;p&gt;The success of KubeCon Europe 2024 reflects the strength and vitality of the cloud-native community, demonstrating that Kubernetes and related technologies continue to be at the forefront of modern application development and deployment.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about KubeCon Europe 2024, visit the &lt;a
class="gblog-markdown__link"
href="https://events.linuxfoundation.org/archive/2024/kubecon-cloudnativecon-europe/"
&gt;official event archive&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/kubecon" term="kubecon" label="kubecon"/><category scheme="https://k8s-ops.net/tags/europe" term="europe" label="europe"/><category scheme="https://k8s-ops.net/tags/cloud-native" term="cloud-native" label="cloud-native"/><category scheme="https://k8s-ops.net/tags/community" term="community" label="community"/></entry><entry><title>Ten Years of Kubernetes: Reflections from Jan 2024</title><link href="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-ten-years-reflections/</id><published>2024-01-30T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;As Kubernetes entered its 10th year in January 2024, the community took a moment to reflect on the incredible journey that transformed container orchestration from a Google internal project into the de facto standard for cloud-native applications. This milestone represents not just technological achievement, but a testament to the power of open-source collaboration and community-driven innovation.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="the-genesis-from-borg-to-kubernetes"&gt;
The Genesis: From Borg to Kubernetes
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#the-genesis-from-borg-to-kubernetes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor The Genesis: From Borg to Kubernetes" href="#the-genesis-from-borg-to-kubernetes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Kubernetes was born from Google&amp;rsquo;s internal container orchestration system, Borg, which had been managing Google&amp;rsquo;s massive infrastructure for over a decade. In 2014, Google open-sourced the technology, releasing it as Kubernetes 1.0 in July 2015. The name &amp;ldquo;Kubernetes&amp;rdquo; comes from the Greek word for &amp;ldquo;helmsman&amp;rdquo; or &amp;ldquo;pilot,&amp;rdquo; reflecting its role in steering containerized applications.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="early-days-and-challenges"&gt;
Early Days and Challenges
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#early-days-and-challenges" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Early Days and Challenges" href="#early-days-and-challenges"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The initial years were marked by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Complexity&lt;/strong&gt;: Early versions required deep expertise to operate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem Development&lt;/strong&gt;: Building the surrounding tools and practices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Building&lt;/strong&gt;: Establishing governance and contribution processes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adoption Challenges&lt;/strong&gt;: Convincing organizations to embrace containers&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="evolution-through-the-years"&gt;
Evolution Through the Years
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#evolution-through-the-years" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Evolution Through the Years" href="#evolution-through-the-years"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2015-2017-foundation-building"&gt;
2015-2017: Foundation Building
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#2015-2017-foundation-building" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2015-2017: Foundation Building" href="#2015-2017-foundation-building"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The first few years focused on establishing core functionality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basic Orchestration&lt;/strong&gt;: Pod scheduling, service discovery, load balancing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Stability&lt;/strong&gt;: Establishing the Kubernetes API as the foundation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Growth&lt;/strong&gt;: Building the initial contributor base&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Provider Integration&lt;/strong&gt;: Working with major cloud providers&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2018-2020-enterprise-adoption"&gt;
2018-2020: Enterprise Adoption
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#2018-2020-enterprise-adoption" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2018-2020: Enterprise Adoption" href="#2018-2020-enterprise-adoption"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;This period saw Kubernetes become mainstream:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise Features&lt;/strong&gt;: RBAC, network policies, storage classes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem Explosion&lt;/strong&gt;: Helm, Istio, Prometheus, and countless other tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud-Native Foundation&lt;/strong&gt;: Establishment of the CNCF&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Production Readiness&lt;/strong&gt;: Major enterprises adopting Kubernetes&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2021-2023-maturity-and-scale"&gt;
2021-2023: Maturity and Scale
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#2021-2023-maturity-and-scale" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2021-2023: Maturity and Scale" href="#2021-2023-maturity-and-scale"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Recent years have focused on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Optimizing for large-scale deployments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Enhanced security features and best practices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Usability&lt;/strong&gt;: Improving developer and operator experience&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Extending Kubernetes to edge environments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="key-milestones-and-achievements"&gt;
Key Milestones and Achievements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#key-milestones-and-achievements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Milestones and Achievements" href="#key-milestones-and-achievements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="community-growth"&gt;
Community Growth
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#community-growth" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Growth" href="#community-growth"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Contributors&lt;/strong&gt;: From a handful to thousands of active contributors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organizations&lt;/strong&gt;: From Google to hundreds of companies contributing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Geographic Diversity&lt;/strong&gt;: Global community with contributors from around the world&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Governance&lt;/strong&gt;: Mature governance structure with multiple SIGs and working groups&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="technical-achievements"&gt;
Technical Achievements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#technical-achievements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Technical Achievements" href="#technical-achievements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Stability&lt;/strong&gt;: Backward compatibility maintained across major versions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Handles millions of containers across thousands of nodes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Comprehensive security model with RBAC, network policies, and more&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensibility&lt;/strong&gt;: Rich ecosystem of operators, CRDs, and custom resources&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="industry-impact"&gt;
Industry Impact
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#industry-impact" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Industry Impact" href="#industry-impact"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standardization&lt;/strong&gt;: De facto standard for container orchestration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem&lt;/strong&gt;: Trillion-dollar ecosystem of tools and services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt;: New job roles and career paths in cloud-native technologies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Innovation&lt;/strong&gt;: Enabling new application architectures and deployment patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="lessons-learned"&gt;
Lessons Learned
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#lessons-learned" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Lessons Learned" href="#lessons-learned"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="community-driven-development"&gt;
Community-Driven Development
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#community-driven-development" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community-Driven Development" href="#community-driven-development"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The success of Kubernetes demonstrates the power of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Open Governance&lt;/strong&gt;: Transparent decision-making processes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inclusive Community&lt;/strong&gt;: Welcoming contributors from all backgrounds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meritocracy&lt;/strong&gt;: Contributions valued over organizational affiliation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long-term Vision&lt;/strong&gt;: Balancing immediate needs with long-term sustainability&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="technical-excellence"&gt;
Technical Excellence
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#technical-excellence" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Technical Excellence" href="#technical-excellence"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Key technical principles that guided development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API-First Design&lt;/strong&gt;: Everything exposed through consistent APIs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Declarative Configuration&lt;/strong&gt;: Desired state over imperative commands&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensibility&lt;/strong&gt;: Plugin architecture for custom functionality&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backward Compatibility&lt;/strong&gt;: Careful evolution without breaking changes&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="operational-excellence"&gt;
Operational Excellence
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#operational-excellence" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Operational Excellence" href="#operational-excellence"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Operational insights gained:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automation&lt;/strong&gt;: Automate everything possible&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability&lt;/strong&gt;: Comprehensive monitoring and logging&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Security by design, not as an afterthought&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Clear, comprehensive documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="current-state-and-challenges"&gt;
Current State and Challenges
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#current-state-and-challenges" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Current State and Challenges" href="#current-state-and-challenges"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="success-metrics"&gt;
Success Metrics
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#success-metrics" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Success Metrics" href="#success-metrics"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;As of January 2024, Kubernetes has achieved:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Widespread Adoption&lt;/strong&gt;: Used by 96% of organizations surveyed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Production Deployments&lt;/strong&gt;: Running critical workloads worldwide&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vendor Support&lt;/strong&gt;: Supported by all major cloud providers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem Maturity&lt;/strong&gt;: Rich tooling and best practices&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="ongoing-challenges"&gt;
Ongoing Challenges
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#ongoing-challenges" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Ongoing Challenges" href="#ongoing-challenges"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Despite success, challenges remain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Complexity&lt;/strong&gt;: Still complex for new users and small teams&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt;: Steep learning curve for operators and developers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Requirements&lt;/strong&gt;: Significant resources needed for production deployments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Ongoing security challenges in distributed systems&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-forward-the-next-decade"&gt;
Looking Forward: The Next Decade
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#looking-forward-the-next-decade" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Forward: The Next Decade" href="#looking-forward-the-next-decade"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="emerging-trends"&gt;
Emerging Trends
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#emerging-trends" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Emerging Trends" href="#emerging-trends"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The community is focused on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simplification&lt;/strong&gt;: Making Kubernetes easier to use and operate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Extending to edge and IoT environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI/ML Workloads&lt;/strong&gt;: Better support for machine learning workloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability&lt;/strong&gt;: Reducing resource consumption and environmental impact&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="technology-evolution"&gt;
Technology Evolution
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#technology-evolution" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Technology Evolution" href="#technology-evolution"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Future directions include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WebAssembly&lt;/strong&gt;: Integration with WebAssembly for new workload types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quantum Computing&lt;/strong&gt;: Preparing for quantum computing workloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autonomous Operations&lt;/strong&gt;: Self-healing and self-optimizing clusters&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-Platform&lt;/strong&gt;: Better support for diverse hardware architectures&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="community-evolution"&gt;
Community Evolution
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#community-evolution" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Evolution" href="#community-evolution"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The community continues to evolve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Diversity&lt;/strong&gt;: Increasing diversity in contributors and leadership&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Education&lt;/strong&gt;: Better educational resources and training programs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainability&lt;/strong&gt;: Ensuring long-term project sustainability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global Reach&lt;/strong&gt;: Expanding to new regions and markets&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="personal-reflections"&gt;
Personal Reflections
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#personal-reflections" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Personal Reflections" href="#personal-reflections"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="from-contributors"&gt;
From Contributors
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#from-contributors" class="gblog-post__anchor clip flex align-center" aria-label="Anchor From Contributors" href="#from-contributors"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Long-time contributors reflect on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Growth&lt;/strong&gt;: Personal and professional growth through contribution&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Friendships&lt;/strong&gt;: Lifelong friendships formed through collaboration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impact&lt;/strong&gt;: Satisfaction from building technology used by millions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning&lt;/strong&gt;: Continuous learning and skill development&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="from-users"&gt;
From Users
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#from-users" class="gblog-post__anchor clip flex align-center" aria-label="Anchor From Users" href="#from-users"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Organizations share:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transformation&lt;/strong&gt;: How Kubernetes transformed their operations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Innovation&lt;/strong&gt;: New capabilities and business opportunities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Challenges&lt;/strong&gt;: Lessons learned from adoption and migration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Success&lt;/strong&gt;: Measurable improvements in efficiency and reliability&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="the-kubernetes-effect"&gt;
The Kubernetes Effect
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#the-kubernetes-effect" class="gblog-post__anchor clip flex align-center" aria-label="Anchor The Kubernetes Effect" href="#the-kubernetes-effect"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Kubernetes has had a profound impact on:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="software-development"&gt;
Software Development
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#software-development" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Software Development" href="#software-development"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Microservices&lt;/strong&gt;: Enabled widespread adoption of microservices architecture&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DevOps&lt;/strong&gt;: Accelerated DevOps practices and culture&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud-Native&lt;/strong&gt;: Defined the cloud-native computing paradigm&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open Source&lt;/strong&gt;: Demonstrated the power of open-source collaboration&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="industry-transformation"&gt;
Industry Transformation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#industry-transformation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Industry Transformation" href="#industry-transformation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Digital Transformation&lt;/strong&gt;: Enabled organizations to modernize their infrastructure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Competitive Advantage&lt;/strong&gt;: Provided tools for faster innovation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost Optimization&lt;/strong&gt;: Reduced infrastructure costs through better resource utilization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Talent Development&lt;/strong&gt;: Created new career opportunities and skill requirements&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-ten-years-reflections/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;As Kubernetes enters its second decade, the project stands as a testament to what&amp;rsquo;s possible when talented people collaborate on solving real-world problems. The journey from a Google internal project to the foundation of modern cloud computing has been remarkable, but the best may still be ahead.&lt;/p&gt;
&lt;p&gt;The community&amp;rsquo;s commitment to innovation, inclusivity, and excellence ensures that Kubernetes will continue to evolve and adapt to meet the changing needs of the technology landscape. The next decade promises even more exciting developments as Kubernetes continues to shape the future of computing.&lt;/p&gt;
&lt;p&gt;The success of Kubernetes is not just about the technology—it&amp;rsquo;s about the people, the community, and the shared vision of making computing more accessible, efficient, and powerful for everyone.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more reflections on Kubernetes&amp;rsquo; 10-year journey, check out the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/blog/2024/06/06/10-years-of-kubernetes/"
&gt;official anniversary blog post&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/anniversary" term="anniversary" label="anniversary"/><category scheme="https://k8s-ops.net/tags/community" term="community" label="community"/><category scheme="https://k8s-ops.net/tags/history" term="history" label="history"/><category scheme="https://k8s-ops.net/tags/cloud-native" term="cloud-native" label="cloud-native"/></entry><entry><title>Kubernetes v1.30 Alpha Features Unveiled</title><link href="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/</id><published>2024-01-25T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;As the Kubernetes v1.30 release cycle gained momentum in January 2024, the community unveiled several exciting alpha features that would shape the future of container orchestration. These early-stage features represent the cutting edge of Kubernetes development, offering glimpses into the platform&amp;rsquo;s evolution and the community&amp;rsquo;s vision for improved container management.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="structured-logging-a-new-era-of-debugging"&gt;
Structured Logging: A New Era of Debugging
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#structured-logging-a-new-era-of-debugging" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Structured Logging: A New Era of Debugging" href="#structured-logging-a-new-era-of-debugging"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;One of the most anticipated alpha features in v1.30 is the enhanced structured logging capabilities. This feature addresses a long-standing challenge in Kubernetes: making logs more machine-readable and easier to parse for monitoring and debugging purposes.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="what-is-structured-logging"&gt;
What is Structured Logging?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#what-is-structured-logging" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What is Structured Logging?" href="#what-is-structured-logging"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Structured logging transforms traditional text-based logs into structured data formats (typically JSON), making them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Machine-readable&lt;/strong&gt;: Easier to parse and analyze programmatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Searchable&lt;/strong&gt;: Better indexing and querying capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistent&lt;/strong&gt;: Standardized format across all Kubernetes components&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensible&lt;/strong&gt;: Additional metadata can be easily added&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="benefits-for-operators"&gt;
Benefits for Operators
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#benefits-for-operators" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Benefits for Operators" href="#benefits-for-operators"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;level&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;info&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-01-25T10:30:00Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;component&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kube-scheduler&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Pod scheduled successfully&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;pod&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;nginx-deployment-abc123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;node&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;worker-node-1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This structured format enables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better Monitoring&lt;/strong&gt;: Integration with log aggregation systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster Debugging&lt;/strong&gt;: Quick identification of issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automated Analysis&lt;/strong&gt;: Machine learning-based anomaly detection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance&lt;/strong&gt;: Easier audit trail generation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="node-swap-support-memory-management-evolution"&gt;
Node Swap Support: Memory Management Evolution
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#node-swap-support-memory-management-evolution" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Node Swap Support: Memory Management Evolution" href="#node-swap-support-memory-management-evolution"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Another significant alpha feature is the introduction of swap support on Linux nodes. This feature allows Kubernetes to work with systems that have swap memory enabled, providing more flexible memory management options.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="understanding-node-swap"&gt;
Understanding Node Swap
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#understanding-node-swap" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Understanding Node Swap" href="#understanding-node-swap"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Traditionally, Kubernetes has discouraged swap usage due to performance and predictability concerns. However, the new swap support feature provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configurable Swap Behavior&lt;/strong&gt;: Admins can control swap usage per node&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Pressure Handling&lt;/strong&gt;: Better management of memory-constrained environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development Flexibility&lt;/strong&gt;: Easier local development setups&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Optimization&lt;/strong&gt;: More efficient use of available memory&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="implementation-considerations"&gt;
Implementation Considerations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#implementation-considerations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Implementation Considerations" href="#implementation-considerations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Node&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;worker-node-1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;swapBehavior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;NoSwap&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# or &amp;#34;LimitedSwap&amp;#34;, &amp;#34;UnlimitedSwap&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="use-cases"&gt;
Use Cases
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#use-cases" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Use Cases" href="#use-cases"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Development Environments&lt;/strong&gt;: Local clusters with limited RAM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;: Resource-constrained edge nodes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy Systems&lt;/strong&gt;: Integration with existing infrastructure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost Optimization&lt;/strong&gt;: Better resource utilization in cloud environments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="dynamic-resource-allocation-dra-advanced-resource-management"&gt;
Dynamic Resource Allocation (DRA): Advanced Resource Management
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#dynamic-resource-allocation-dra-advanced-resource-management" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Dynamic Resource Allocation (DRA): Advanced Resource Management" href="#dynamic-resource-allocation-dra-advanced-resource-management"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The Dynamic Resource Allocation feature represents a significant advancement in how Kubernetes handles specialized hardware resources. This alpha feature enables more sophisticated resource allocation beyond the traditional CPU and memory model.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="what-is-dra"&gt;
What is DRA?
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#what-is-dra" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What is DRA?" href="#what-is-dra"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;DRA allows Kubernetes to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Allocate Specialized Hardware&lt;/strong&gt;: GPUs, FPGAs, specialized accelerators&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Resource Management&lt;/strong&gt;: Runtime allocation and deallocation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Sharing&lt;/strong&gt;: Multiple pods can share expensive hardware&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Resource Types&lt;/strong&gt;: Support for vendor-specific resources&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="key-components"&gt;
Key Components
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#key-components" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Components" href="#key-components"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Resource Claims&lt;/strong&gt;: Pods request specific resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Drivers&lt;/strong&gt;: Plugins that manage specific resource types&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scheduling Integration&lt;/strong&gt;: Scheduler considers resource availability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime Management&lt;/strong&gt;: Dynamic allocation during pod lifecycle&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="example-implementation"&gt;
Example Implementation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#example-implementation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Example Implementation" href="#example-implementation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;resource.k8s.io/v1alpha2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ResourceClaim&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-claim&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resourceClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nvidia.com/gpu&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parametersRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nvidia.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GPUParameters&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resourceClaims&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-claim&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resourceClaimName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-claim&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gpu-container&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nvidia/cuda:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="security-enhancements"&gt;
Security Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#security-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Security Enhancements" href="#security-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The v1.30 alpha release also includes several security-focused improvements:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="enhanced-rbac"&gt;
Enhanced RBAC
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#enhanced-rbac" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Enhanced RBAC" href="#enhanced-rbac"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fine-grained Permissions&lt;/strong&gt;: More granular access control&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditional Access&lt;/strong&gt;: Context-aware authorization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Improvements&lt;/strong&gt;: Better security event tracking&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="network-policy-enhancements"&gt;
Network Policy Enhancements
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#network-policy-enhancements" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Network Policy Enhancements" href="#network-policy-enhancements"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advanced Traffic Control&lt;/strong&gt;: More sophisticated network rules&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protocol Support&lt;/strong&gt;: Enhanced protocol-level filtering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Optimizations&lt;/strong&gt;: Faster policy enforcement&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="testing-alpha-features"&gt;
Testing Alpha Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#testing-alpha-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Testing Alpha Features" href="#testing-alpha-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="enabling-alpha-features"&gt;
Enabling Alpha Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#enabling-alpha-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Enabling Alpha Features" href="#enabling-alpha-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;To test these alpha features, you&amp;rsquo;ll need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Enable Feature Gates&lt;/strong&gt;: Configure the appropriate feature flags&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Alpha APIs&lt;/strong&gt;: Access the alpha API versions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor Stability&lt;/strong&gt;: Alpha features may change or be removed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide Feedback&lt;/strong&gt;: Report issues and suggestions to the community&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="example-configuration"&gt;
Example Configuration
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#example-configuration" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Example Configuration" href="#example-configuration"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubeadm.k8s.io/v1beta3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterConfiguration&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;apiServer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extraArgs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature-gates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;StructuredLogging=true,NodeSwap=true,DynamicResourceAllocation=true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="community-impact"&gt;
Community Impact
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#community-impact" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Impact" href="#community-impact"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;These alpha features demonstrate the Kubernetes community&amp;rsquo;s commitment to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Innovation&lt;/strong&gt;: Pushing the boundaries of container orchestration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Needs&lt;/strong&gt;: Addressing real-world operational challenges&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Improving system efficiency and resource utilization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: Supporting diverse deployment scenarios&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-forward"&gt;
Looking Forward
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#looking-forward" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Forward" href="#looking-forward"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;As these features progress through the alpha, beta, and stable phases, they will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Mature&lt;/strong&gt;: Become more stable and production-ready&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evolve&lt;/strong&gt;: Incorporate community feedback and improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrate&lt;/strong&gt;: Work seamlessly with existing Kubernetes features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standardize&lt;/strong&gt;: Become part of the core Kubernetes experience&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="getting-involved"&gt;
Getting Involved
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#getting-involved" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Getting Involved" href="#getting-involved"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The alpha phase is the perfect time to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Test Features&lt;/strong&gt;: Try them in non-production environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide Feedback&lt;/strong&gt;: Report bugs and suggest improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contribute&lt;/strong&gt;: Help develop and refine these features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document&lt;/strong&gt;: Share experiences and best practices&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-alpha-features-unveiled/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The alpha features unveiled in Kubernetes v1.30 represent an exciting glimpse into the future of container orchestration. From improved logging and memory management to advanced resource allocation, these features address real-world challenges faced by Kubernetes operators and developers.&lt;/p&gt;
&lt;p&gt;While these features are still in alpha and not recommended for production use, they provide valuable insights into the direction of Kubernetes development and offer opportunities for early adopters to shape the future of the platform.&lt;/p&gt;
&lt;p&gt;The community&amp;rsquo;s continued focus on innovation, performance, and usability ensures that Kubernetes remains at the forefront of container orchestration technology, meeting the evolving needs of modern application deployment.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more details about upcoming changes in Kubernetes v1.30, check out the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/blog/2024/03/12/kubernetes-1-30-upcoming-changes/"
&gt;official preview blog post&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/alpha" term="alpha" label="alpha"/><category scheme="https://k8s-ops.net/tags/features" term="features" label="features"/><category scheme="https://k8s-ops.net/tags/structured-logging" term="structured-logging" label="structured-logging"/><category scheme="https://k8s-ops.net/tags/node-swap" term="node-swap" label="node-swap"/><category scheme="https://k8s-ops.net/tags/dra" term="dra" label="dra"/></entry><entry><title>Kubernetes 1.29 EOL Prep</title><link href="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/</id><published>2024-01-20T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;With Kubernetes v1.29 reaching End of Life (EOL) on February 24, 2024, organizations running this version need to plan their upgrade strategy carefully. This milestone represents a critical transition point that requires thoughtful preparation to ensure continued support and security for your Kubernetes clusters.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="understanding-eol-implications"&gt;
Understanding EOL Implications
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#understanding-eol-implications" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Understanding EOL Implications" href="#understanding-eol-implications"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;When a Kubernetes version reaches EOL, it means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No More Security Patches&lt;/strong&gt;: Critical security vulnerabilities won&amp;rsquo;t be patched&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No Bug Fixes&lt;/strong&gt;: Known issues will remain unresolved&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No Feature Updates&lt;/strong&gt;: New features and improvements won&amp;rsquo;t be backported&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduced Support&lt;/strong&gt;: Community support becomes limited&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance Risks&lt;/strong&gt;: Running EOL software may violate security policies&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="planning-your-upgrade-strategy"&gt;
Planning Your Upgrade Strategy
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#planning-your-upgrade-strategy" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Planning Your Upgrade Strategy" href="#planning-your-upgrade-strategy"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-assess-your-current-state"&gt;
1. Assess Your Current State
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#1-assess-your-current-state" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Assess Your Current State" href="#1-assess-your-current-state"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Before planning your upgrade, take inventory of your current setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cluster Versions&lt;/strong&gt;: Identify all clusters running v1.29&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application Dependencies&lt;/strong&gt;: Check if any applications have version-specific requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Resources&lt;/strong&gt;: Review any custom resource definitions (CRDs) that might be affected&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Third-party Tools&lt;/strong&gt;: Verify compatibility of monitoring, logging, and other tools&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-choose-your-target-version"&gt;
2. Choose Your Target Version
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#2-choose-your-target-version" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Choose Your Target Version" href="#2-choose-your-target-version"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;For v1.29 clusters, the recommended upgrade path is to v1.30 or v1.31, depending on your timeline:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;v1.30&lt;/strong&gt;: Released in April 2024, offers immediate upgrade path&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;v1.31&lt;/strong&gt;: Released in August 2024, provides longer support window&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-create-a-migration-timeline"&gt;
3. Create a Migration Timeline
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#3-create-a-migration-timeline" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Create a Migration Timeline" href="#3-create-a-migration-timeline"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;A typical upgrade timeline should include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Week 1-2&lt;/strong&gt;: Environment preparation and testing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Week 3-4&lt;/strong&gt;: Staging environment upgrades&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Week 5-6&lt;/strong&gt;: Production upgrades (during maintenance windows)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Week 7&lt;/strong&gt;: Post-upgrade validation and monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="pre-upgrade-checklist"&gt;
Pre-Upgrade Checklist
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#pre-upgrade-checklist" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Pre-Upgrade Checklist" href="#pre-upgrade-checklist"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="infrastructure-preparation"&gt;
Infrastructure Preparation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#infrastructure-preparation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Infrastructure Preparation" href="#infrastructure-preparation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Backup all cluster configurations and data&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Verify sufficient resources for upgrade process&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Update kubectl and other client tools&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Review and update any custom admission controllers&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Check storage class compatibility&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="application-preparation"&gt;
Application Preparation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#application-preparation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Application Preparation" href="#application-preparation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Review application manifests for deprecated APIs&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Test applications in staging environment&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Update any version-specific configurations&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Verify monitoring and alerting still work&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Check logging and tracing functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="team-preparation"&gt;
Team Preparation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#team-preparation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Team Preparation" href="#team-preparation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Schedule maintenance windows with stakeholders&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Prepare rollback procedures&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Train team on new features and changes&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Update runbooks and documentation&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Set up additional monitoring during upgrade&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="upgrade-best-practices"&gt;
Upgrade Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#upgrade-best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Upgrade Best Practices" href="#upgrade-best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-follow-the-upgrade-path"&gt;
1. Follow the Upgrade Path
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#1-follow-the-upgrade-path" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Follow the Upgrade Path" href="#1-follow-the-upgrade-path"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Kubernetes requires sequential upgrades. Don&amp;rsquo;t skip versions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;v1.29 → v1.30 → v1.31 (if needed)
&lt;/code&gt;&lt;/pre&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-test-thoroughly"&gt;
2. Test Thoroughly
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#2-test-thoroughly" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Test Thoroughly" href="#2-test-thoroughly"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unit Testing&lt;/strong&gt;: Test individual components&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integration Testing&lt;/strong&gt;: Test component interactions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;End-to-End Testing&lt;/strong&gt;: Test complete workflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Testing&lt;/strong&gt;: Verify no performance regressions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-use-rolling-updates"&gt;
3. Use Rolling Updates
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#3-use-rolling-updates" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Use Rolling Updates" href="#3-use-rolling-updates"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;For production clusters, use rolling updates to minimize downtime:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Example rolling update command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl rolling-update deployment-name --image&lt;span class="o"&gt;=&lt;/span&gt;new-image:tag
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="4-monitor-during-upgrade"&gt;
4. Monitor During Upgrade
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#4-monitor-during-upgrade" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 4. Monitor During Upgrade" href="#4-monitor-during-upgrade"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Set up additional monitoring during the upgrade process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cluster Health&lt;/strong&gt;: Monitor API server, etcd, and control plane&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application Health&lt;/strong&gt;: Watch application metrics and logs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Usage&lt;/strong&gt;: Monitor CPU, memory, and storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network Connectivity&lt;/strong&gt;: Verify service mesh and networking&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="post-upgrade-validation"&gt;
Post-Upgrade Validation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#post-upgrade-validation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Post-Upgrade Validation" href="#post-upgrade-validation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;After completing the upgrade:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-verify-cluster-health"&gt;
1. Verify Cluster Health
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#1-verify-cluster-health" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Verify Cluster Health" href="#1-verify-cluster-health"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check node status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Verify all pods are running&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check API server health&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl cluster-info
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-test-critical-workloads"&gt;
2. Test Critical Workloads
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#2-test-critical-workloads" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Test Critical Workloads" href="#2-test-critical-workloads"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Run smoke tests for all applications&lt;/li&gt;
&lt;li&gt;Verify data integrity&lt;/li&gt;
&lt;li&gt;Test backup and restore procedures&lt;/li&gt;
&lt;li&gt;Validate monitoring and alerting&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-update-documentation"&gt;
3. Update Documentation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#3-update-documentation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Update Documentation" href="#3-update-documentation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Update runbooks and procedures&lt;/li&gt;
&lt;li&gt;Document any configuration changes&lt;/li&gt;
&lt;li&gt;Update team training materials&lt;/li&gt;
&lt;li&gt;Record lessons learned&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="common-challenges-and-solutions"&gt;
Common Challenges and Solutions
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#common-challenges-and-solutions" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Common Challenges and Solutions" href="#common-challenges-and-solutions"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="api-deprecations"&gt;
API Deprecations
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#api-deprecations" class="gblog-post__anchor clip flex align-center" aria-label="Anchor API Deprecations" href="#api-deprecations"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Some APIs may be deprecated in newer versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Use &lt;code&gt;kubectl convert&lt;/code&gt; to update manifests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prevention&lt;/strong&gt;: Regularly review deprecation notices&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="third-party-tool-compatibility"&gt;
Third-party Tool Compatibility
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#third-party-tool-compatibility" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Third-party Tool Compatibility" href="#third-party-tool-compatibility"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Some tools may not immediately support new versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Check compatibility matrices before upgrading&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alternative&lt;/strong&gt;: Use supported versions or find alternatives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="performance-issues"&gt;
Performance Issues
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#performance-issues" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Performance Issues" href="#performance-issues"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;New versions may have different performance characteristics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Monitor performance metrics closely&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigation&lt;/strong&gt;: Adjust resource allocations if needed&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="long-term-planning"&gt;
Long-term Planning
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#long-term-planning" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Long-term Planning" href="#long-term-planning"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;To avoid future EOL crises:&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="1-establish-upgrade-cadence"&gt;
1. Establish Upgrade Cadence
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#1-establish-upgrade-cadence" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 1. Establish Upgrade Cadence" href="#1-establish-upgrade-cadence"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Plan upgrades 2-3 months before EOL&lt;/li&gt;
&lt;li&gt;Schedule regular maintenance windows&lt;/li&gt;
&lt;li&gt;Automate testing where possible&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="2-use-multiple-environments"&gt;
2. Use Multiple Environments
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#2-use-multiple-environments" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 2. Use Multiple Environments" href="#2-use-multiple-environments"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Maintain staging environments for testing&lt;/li&gt;
&lt;li&gt;Use canary deployments for production&lt;/li&gt;
&lt;li&gt;Implement blue-green deployment strategies&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="3-stay-informed"&gt;
3. Stay Informed
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#3-stay-informed" class="gblog-post__anchor clip flex align-center" aria-label="Anchor 3. Stay Informed" href="#3-stay-informed"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Subscribe to Kubernetes release announcements&lt;/li&gt;
&lt;li&gt;Monitor deprecation notices&lt;/li&gt;
&lt;li&gt;Participate in community discussions&lt;/li&gt;
&lt;li&gt;Follow security advisories&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-1-29-eol-prep/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The EOL of Kubernetes v1.29 serves as a reminder of the importance of proactive upgrade planning. By following these guidelines and best practices, organizations can ensure smooth transitions to supported versions while maintaining the stability and security of their Kubernetes environments.&lt;/p&gt;
&lt;p&gt;Remember, the key to successful upgrades is preparation, testing, and having a solid rollback plan. Start your upgrade planning early, and don&amp;rsquo;t wait until the last minute to address EOL concerns.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about Kubernetes version support and EOL dates, visit the &lt;a
class="gblog-markdown__link"
href="https://en.wikipedia.org/wiki/Kubernetes#Release_timeline"
&gt;Kubernetes release timeline&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/upgrades" term="upgrades" label="upgrades"/><category scheme="https://k8s-ops.net/tags/eol" term="eol" label="eol"/><category scheme="https://k8s-ops.net/tags/maintenance" term="maintenance" label="maintenance"/></entry><entry><title>Kubernetes v1.30 Release Cycle Kicks Off</title><link href="https://k8s-ops.net/posts/kubernetes-v1-30-release-cycle-kicks-off/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-v1-30-release-cycle-kicks-off/</id><published>2024-01-15T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;The Kubernetes community kicked off the v1.30 release cycle in January 2024, marking the beginning of another exciting development phase for the container orchestration platform. This release cycle represents a significant milestone as Kubernetes approaches its 10th anniversary, bringing with it new features, improvements, and community-driven enhancements.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="setting-the-foundation"&gt;
Setting the Foundation
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release-cycle-kicks-off/#setting-the-foundation" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Setting the Foundation" href="#setting-the-foundation"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The v1.30 release cycle began with the establishment of key milestones and timelines that would guide the development process over the coming months. The release team, consisting of volunteers from across the Kubernetes ecosystem, worked diligently to set realistic goals while maintaining the high quality standards that users have come to expect.&lt;/p&gt;
&lt;p&gt;Key milestones for the v1.30 cycle included:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code Freeze&lt;/strong&gt;: A critical period where new features are locked down to ensure stability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature Freeze&lt;/strong&gt;: The point at which no new features can be added to the release&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release Candidate Phase&lt;/strong&gt;: Multiple release candidates for testing and validation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Final Release&lt;/strong&gt;: The official release of Kubernetes v1.30&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="community-planning-and-coordination"&gt;
Community Planning and Coordination
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release-cycle-kicks-off/#community-planning-and-coordination" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Planning and Coordination" href="#community-planning-and-coordination"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;One of the most impressive aspects of the Kubernetes release process is the level of community involvement and coordination. The release cycle planning involves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SIG (Special Interest Group) Coordination&lt;/strong&gt;: Various SIGs work together to prioritize features and improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhancement Proposals&lt;/strong&gt;: Community members submit and review enhancement proposals&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing and Validation&lt;/strong&gt;: Extensive testing across different environments and use cases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation Updates&lt;/strong&gt;: Ensuring all changes are properly documented for users&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="what-to-expect-from-v130"&gt;
What to Expect from v1.30
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release-cycle-kicks-off/#what-to-expect-from-v130" class="gblog-post__anchor clip flex align-center" aria-label="Anchor What to Expect from v1.30" href="#what-to-expect-from-v130"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;While the full feature set was still being finalized in January, early indicators suggested that v1.30 would include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Structured Logging Improvements&lt;/strong&gt;: Enhanced logging capabilities for better debugging and monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node Swap Support&lt;/strong&gt;: Better support for swap memory on Linux nodes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Resource Allocation (DRA)&lt;/strong&gt;: Advanced resource management capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Enhancements&lt;/strong&gt;: Continued focus on security improvements and best practices&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="the-release-process"&gt;
The Release Process
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release-cycle-kicks-off/#the-release-process" class="gblog-post__anchor clip flex align-center" aria-label="Anchor The Release Process" href="#the-release-process"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The Kubernetes release process follows a well-established cadence that ensures quality and stability:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Planning Phase&lt;/strong&gt;: Setting goals, milestones, and timelines&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development Phase&lt;/strong&gt;: Implementing features and improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing Phase&lt;/strong&gt;: Comprehensive testing across multiple environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release Candidate Phase&lt;/strong&gt;: Public testing and feedback collection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Final Release&lt;/strong&gt;: Official release with full documentation&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="community-impact"&gt;
Community Impact
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release-cycle-kicks-off/#community-impact" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Community Impact" href="#community-impact"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The v1.30 release cycle kickoff demonstrated the strength and maturity of the Kubernetes community. With thousands of contributors from around the world, the project continues to evolve and improve based on real-world usage and feedback.&lt;/p&gt;
&lt;p&gt;The release process also serves as a model for other open-source projects, showing how large-scale collaboration can result in high-quality software that powers critical infrastructure worldwide.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="looking-ahead"&gt;
Looking Ahead
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-v1-30-release-cycle-kicks-off/#looking-ahead" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Looking Ahead" href="#looking-ahead"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;As the v1.30 release cycle progressed, the community remained focused on maintaining backward compatibility while introducing new capabilities that would benefit users across different industries and use cases. The careful balance between innovation and stability continues to be a hallmark of Kubernetes development.&lt;/p&gt;
&lt;p&gt;The successful kickoff of the v1.30 release cycle in January 2024 set the stage for another year of innovation and improvement in the Kubernetes ecosystem, reinforcing its position as the leading container orchestration platform.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;For more information about the Kubernetes v1.30 release cycle, visit the &lt;a
class="gblog-markdown__link"
href="https://github.com/kubernetes/sig-release/blob/master/releases/release-1.30/README.md"
&gt;official release documentation&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/releases" term="releases" label="releases"/><category scheme="https://k8s-ops.net/tags/community" term="community" label="community"/></entry><entry><title>Error: The request you have made requires authentication</title><link href="https://k8s-ops.net/posts/errors/the-request-you-made-requires-authentication/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/the-request-you-made-requires-authentication/</id><published>2023-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when you try to access a resource that requires authentication, but you haven&amp;rsquo;t provided a valid API token. The resolution is to provide a valid API token when making API requests, either through an API client library or by including an API token in the Authorization header.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>AWS Container Deployment Options</title><link href="https://k8s-ops.net/posts/aws-container-deployment-options/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/aws-container-deployment-options/</id><published>2023-01-29T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Amazon Web Services (AWS) offers two managed container orchestration services, Amazon Elastic Container Service (ECS) and Amazon Elastic Kubernetes Service (EKS). Both services provide a way to run containers in the AWS cloud, but there are some important differences between them.&lt;/p&gt;
&lt;p&gt;ECS is a fully managed service that provides a simple way to run Docker containers. It takes care of the management and scaling of the underlying infrastructure, so you can focus on deploying and managing your applications. ECS supports two deployment methods: EC2 and Fargate. EC2 is a traditional deployment method that runs containers on EC2 instances, while Fargate is a serverless deployment method that eliminates the need to manage the underlying instances.&lt;/p&gt;
&lt;p&gt;EKS, on the other hand, is a managed Kubernetes service that makes it easy to run and manage containerized applications using Kubernetes. With EKS, you can run applications on a managed Kubernetes cluster, allowing you to focus on your applications instead of the underlying infrastructure. EKS supports deployment on EC2 instances only.&lt;/p&gt;
&lt;p&gt;When deciding between ECS and EKS, consider factors such as your level of experience with Kubernetes and the need for Kubernetes-specific features, such as custom resource definitions (CRDs) and network plugins. ECS may be a better choice for organizations that are just getting started with container orchestration and are looking for a simple, easy-to-use service. On the other hand, EKS may be a better choice for organizations that have already invested in Kubernetes or have more complex requirements for their container orchestration solution.&lt;/p&gt;
&lt;p&gt;In terms of deployment methods, EC2 provides more control and customization options, but requires more manual management of the underlying instances. Fargate, on the other hand, eliminates the need to manage the underlying instances, but provides less control and customization. The best deployment method for a particular organization will depend on their specific needs and requirements.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/aws" term="aws" label="aws"/><category scheme="https://k8s-ops.net/tags/ecs" term="ecs" label="ecs"/><category scheme="https://k8s-ops.net/tags/fargate" term="fargate" label="fargate"/></entry><entry><title>Container Orchestration Options</title><link href="https://k8s-ops.net/posts/container-orchestration-options/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/container-orchestration-options/</id><published>2023-01-29T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Docker Swarm, Kubernetes, and Rancher are popular options for managing and orchestrating Docker containers.&lt;/p&gt;
&lt;p&gt;Docker Swarm is a native orchestration solution for Docker containers. It provides a simple way to manage a large number of containers and ensures high availability of services by automatically distributing containers across nodes in a swarm. Docker Swarm is easy to use and has a small learning curve, making it a good choice for organizations just getting started with container orchestration.&lt;/p&gt;
&lt;p&gt;Kubernetes, on the other hand, is a more powerful and feature-rich orchestration platform that is widely adopted in the industry. It provides a wide range of features for managing containers, including automatic scaling, rollouts and rollbacks, and self-healing. Kubernetes is also highly extensible, with a large and growing ecosystem of extensions and tools available.&lt;/p&gt;
&lt;p&gt;Rancher is an open-source platform that provides a simple and easy-to-use interface for managing containers and services, both on-premises and in the cloud. It supports a wide range of orchestration engines, including Kubernetes and Docker Swarm, and provides features for managing the entire container lifecycle, from deployment to scaling and monitoring.&lt;/p&gt;
&lt;p&gt;Other options for container orchestration include Apache Mesos, Docker Compose, and &lt;a
class="gblog-markdown__link"
href="/posts/aws-container-deployment-options"
&gt;Amazon ECS&lt;/a&gt;. Each of these platforms has its own strengths and weaknesses, and the best option for a particular organization will depend on their specific needs and requirements.&lt;/p&gt;
&lt;p&gt;When considering which container orchestration solution to use, organizations should consider factors such as the size and complexity of their environment, the level of control and customization required, and the need for support for hybrid and multi-cloud deployments.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/docker" term="docker" label="docker"/><category scheme="https://k8s-ops.net/tags/containers" term="containers" label="containers"/></entry><entry><title>Docker Compose for Container Orchestration</title><link href="https://k8s-ops.net/posts/docker-compose-for-container-orchestration/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/docker-compose-for-container-orchestration/</id><published>2023-01-15T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Docker Compose is a tool for defining and running multi-container Docker applications. It allows you to define the services, networks, and volumes that make up your application in a single file called a docker-compose.yml file. The services defined in this file can be started with a single command, making it easy to manage the entire application stack.&lt;/p&gt;
&lt;p&gt;Here is a basic example of a docker-compose.yml file for an application consisting of an Nginx web server, a PHP application, and a Redis database:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;version: &amp;#39;3&amp;#39;
services:
web:
image: nginx
ports:
- &amp;#34;80:80&amp;#34;
app:
image: php:7.3-fpm
redis:
image: redis
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this example, there are three services defined: web, app, and redis. Each service is based on a Docker image, with the version specified in the image key. The web service maps port 80 on the host to port 80 in the container, while the other two services do not need to expose any ports to the host.&lt;/p&gt;
&lt;p&gt;With this docker-compose.yml file, you can start the entire application stack with &lt;code&gt;docker-compose up&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This will create a new network for the application, start containers for each service, and connect the containers to the network. You can view the logs for each container with the docker-compose logs command, and stop the application with the docker-compose down command.&lt;/p&gt;
&lt;p&gt;Docker Compose is a simple and powerful way to define and manage multi-container Docker applications, making it an ideal choice for development and testing.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/docker" term="docker" label="docker"/><category scheme="https://k8s-ops.net/tags/docker-compose" term="docker-compose" label="docker-compose"/></entry><entry><title>Using Helm for deployment</title><link href="https://k8s-ops.net/posts/using-helm-for-deployment/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/using-helm-for-deployment/</id><published>2023-01-15T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Helm is a package manager for Kubernetes, which simplifies the deployment, scaling and management of applications in the Kubernetes cluster. It allows developers to define, install and upgrade complex application configurations as a single unit, known as a chart. A chart is a collection of files that describe the resources to be deployed, including pods, services, configmaps, and others.&lt;/p&gt;
&lt;p&gt;To install the Helm binary, you can follow the instructions for your platform on the Helm GitHub repository. Once installed, you can use the Helm CLI to manage charts and install packages.&lt;/p&gt;
&lt;p&gt;Here is an example of how to deploy an Nginx chart using Helm:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Initialize Helm: helm init&lt;/li&gt;
&lt;li&gt;Create a new chart directory: helm create mychart&lt;/li&gt;
&lt;li&gt;Navigate to the chart directory: cd mychart&lt;/li&gt;
&lt;li&gt;Edit the values.yaml file to customize the chart as needed&lt;/li&gt;
&lt;li&gt;Install the chart: helm install &amp;ndash;name myrelease .&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With these steps, you can deploy an Nginx chart using Helm, and it will automatically manage the resources required for the deployment and keep them up-to-date. You can also use the helm upgrade command to upgrade the chart to a new version, and the helm delete command to delete the chart.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="helm-repositories"&gt;
Helm Repositories
&lt;a data-clipboard-text="https://k8s-ops.net/posts/using-helm-for-deployment/#helm-repositories" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Helm Repositories" href="#helm-repositories"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Helm repositories are centralized collections of packaged applications that are used to manage the deployment of Kubernetes applications. The packaged applications are referred to as Charts, which contain all of the necessary configuration files, dependencies, and templates required to deploy an application. A chart can include anything from a simple web server to complex microservice applications.&lt;/p&gt;
&lt;p&gt;To add a Helm repository, you can use the helm repo add command followed by the name and URL of the repository you would like to add. For example, to add the stable repository, you could run:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Nginx Ingress Controller: A popular Ingress controller for Kubernetes that provides load balancing and SSL termination features for external traffic to your cluster.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MySQL: A production-ready Helm chart for deploying the popular MySQL database server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jenkins: A highly-configurable Helm chart that helps you deploy and manage a Jenkins continuous integration and continuous delivery (CI/CD) pipeline.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Redis: A highly-available Helm chart that deploys Redis with Sentinel to provide automatic failover and high-availability.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Traefik: A modern, edge-routing load balancer that makes it easy to deploy and manage applications in a microservices architecture.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These charts help to simplify the deployment process, reduce the time and effort required to get started with common applications, and provide a consistent and reliable deployment experience. Additionally, Helm charts are typically customizable and configurable, so you can tailor the deployment to meet your specific needs.&lt;/p&gt;
&lt;p&gt;Once the repository is added, you can use the helm search command to search for charts within the repository. To install a chart, you can use the helm install command followed by the name of the chart you would like to install.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also possible to create your own custom repositories and share them with others. This allows you to share custom charts or even enterprise applications within your organization. To create a repository, you need to set up a web server and create an index file that describes the charts within your repository. The index file is used by Helm to search for charts, and the web server is used to host the charts and the index file.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/helm" term="helm" label="helm"/></entry><entry><title>Kubernetes Cluster Monitoring</title><link href="https://k8s-ops.net/posts/cluster-monitoring/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/cluster-monitoring/</id><published>2023-01-09T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Monitoring is a critical aspect of operating a Kubernetes cluster, as it helps you ensure the health and performance of your applications and services. Monitoring involves collecting and analyzing data from various components of the cluster, including the API server, control plane, and individual apps and services.&lt;/p&gt;
&lt;p&gt;To monitor the API server and control plane, it is important to keep track of key metrics such as CPU utilization, memory usage, network traffic, and the number of API requests. This information can be obtained through tools like Prometheus, which can scrape metrics from the Kubernetes API server and other components of the control plane. Additionally, monitoring solutions such as Grafana can help you visualize the collected metrics, making it easier to identify trends and anomalies.&lt;/p&gt;
&lt;p&gt;To monitor individual apps and services, it&amp;rsquo;s important to have visibility into the health and performance of each pod and its containers. This information can be obtained through tools like liveness and readiness probes, which can monitor the status of pods and containers and take appropriate action when failures are detected. Additionally, tools like Nagios and Zabbix can help you monitor the overall health and performance of your applications and services, and alert you when issues arise.&lt;/p&gt;
&lt;p&gt;In addition to monitoring individual components, it&amp;rsquo;s also important to have visibility into the overall state of your cluster. This can be achieved by using tools like Kubernetes Dashboard, which provides a graphical interface for monitoring the cluster and its components. Additionally, tools like Heapster can help you monitor the cluster&amp;rsquo;s resource utilization, including CPU, memory, and network usage.&lt;/p&gt;
&lt;p&gt;Overall, monitoring is a critical aspect of operating a Kubernetes cluster and can help you ensure the health and performance of your applications and services. By having visibility into the API server, control plane, and individual apps and services, you can quickly identify and address any issues that may arise.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/monitoring" term="monitoring" label="monitoring"/></entry><entry><title>Kubernetes Operators</title><link href="https://k8s-ops.net/posts/kubernetes-operator/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-operator/</id><published>2023-01-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;A Kubernetes Operator is a software extension to Kubernetes that makes it easier to manage complex, stateful applications on top of Kubernetes. An Operator encapsulates the knowledge and logic required to manage a specific application, making it easier for administrators and developers to manage the application on a Kubernetes cluster. Operators automate tasks such as deployment, scaling, and updates, freeing up resources and reducing the risk of human error.&lt;/p&gt;
&lt;p&gt;One of the primary benefits of using a Kubernetes Operator is increased efficiency. With an Operator, administrators can automate tasks that would otherwise require manual intervention, freeing up time and resources to focus on other tasks. Operators also provide a consistent, repeatable process for deploying and managing applications, reducing the risk of errors and improving reliability.&lt;/p&gt;
&lt;p&gt;Another benefit of using a Kubernetes Operator is improved collaboration between teams. Operators provide a standardized way of deploying and managing applications, making it easier for teams to work together and share knowledge. This can lead to faster, more efficient application development and deployment, as well as reduced downtime and improved application performance.&lt;/p&gt;
&lt;p&gt;In addition, Kubernetes Operators can be customized to meet the specific needs of an organization. This can include adding custom logic or integrating with existing systems and tools. With the ability to customize Operators, organizations can tailor their deployment and management processes to meet their specific needs, resulting in a more efficient and effective application management process.&lt;/p&gt;
&lt;p&gt;Overall, Kubernetes Operators provide a powerful way to manage complex, stateful applications on top of Kubernetes. By automating tasks, improving efficiency, and providing a standardized process for deployment and management, Operators can help organizations to improve their application performance, reduce downtime, and improve collaboration between teams.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/k8s-operator" term="k8s-operator" label="k8s-operator"/><category scheme="https://k8s-ops.net/tags/deployment" term="deployment" label="deployment"/></entry><entry><title>Kubernetes Volumes: A Complete Guide</title><link href="https://k8s-ops.net/posts/kubernetes-volumes/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-volumes/</id><published>2022-12-31T00:00:00+00:00</published><updated>2025-07-04T14:53:10-04:00</updated><content type="html">
&lt;p&gt;Kubernetes Volumes are a way to persist data in a containerized environment. They allow data to persist even if the container is deleted or recreated, making it easier to manage stateful applications. There are several types of Volumes that can be used in Kubernetes, each serving different use cases and requirements.&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/storage/volumes/"
&gt;Learn more about Kubernetes Volumes&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="emptydir"&gt;
EmptyDir
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#emptydir" class="gblog-post__anchor clip flex align-center" aria-label="Anchor EmptyDir" href="#emptydir"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;An EmptyDir Volume is created when a Pod is created and exists as long as the Pod is running. When the Pod is deleted, the data in the EmptyDir is deleted. This type of volume is useful for temporary storage, caching, or sharing data between containers in the same Pod.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Temporary storage for applications&lt;/li&gt;
&lt;li&gt;Sharing data between containers in a Pod&lt;/li&gt;
&lt;li&gt;Caching data that doesn&amp;rsquo;t need to persist&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mypod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mycontainer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;busybox&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sh&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;echo Hello Kubernetes! &amp;amp;&amp;amp; sleep 3600&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myvol&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/data/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myvol&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;emptyDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/storage/volumes/#emptydir"
&gt;Learn more about EmptyDir volumes&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="configmaps"&gt;
ConfigMaps
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#configmaps" class="gblog-post__anchor clip flex align-center" aria-label="Anchor ConfigMaps" href="#configmaps"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;A ConfigMap Volume allows you to mount configuration data as a file in a Pod. The data can be updated dynamically, and changes will be reflected in the file in the Pod. ConfigMaps are perfect for storing non-sensitive configuration data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application configuration files&lt;/li&gt;
&lt;li&gt;Environment-specific settings&lt;/li&gt;
&lt;li&gt;Feature flags and application parameters&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mypod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mycontainer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;busybox&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sh&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;echo Hello Kubernetes! &amp;amp;&amp;amp; sleep 3600&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myconfig&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/config/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myconfig&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configMap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myconfigmap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/configuration/configmap/"
&gt;Learn more about ConfigMaps&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="secrets"&gt;
Secrets
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#secrets" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Secrets" href="#secrets"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Secrets are similar to ConfigMaps but are designed to store sensitive data like passwords, API keys, and certificates. They are base64 encoded and should be used for any data that requires security.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Database passwords&lt;/li&gt;
&lt;li&gt;API keys and tokens&lt;/li&gt;
&lt;li&gt;SSL certificates&lt;/li&gt;
&lt;li&gt;SSH keys&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mypod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mycontainer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;busybox&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sh&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;echo Hello Kubernetes! &amp;amp;&amp;amp; sleep 3600&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mysecret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/secrets/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mysecret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secretName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mysecret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/configuration/secret/"
&gt;Learn more about Secrets&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="persistentvolumeclaim"&gt;
PersistentVolumeClaim
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#persistentvolumeclaim" class="gblog-post__anchor clip flex align-center" aria-label="Anchor PersistentVolumeClaim" href="#persistentvolumeclaim"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;A PersistentVolumeClaim (PVC) is a request for storage by a user. The PVC specifies the desired size and access modes, and the system matches the PVC to a PersistentVolume (PV) that satisfies the claim. This provides persistent storage that survives Pod restarts and deletions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Database storage&lt;/li&gt;
&lt;li&gt;Application data that needs to persist&lt;/li&gt;
&lt;li&gt;Shared storage between Pods&lt;/li&gt;
&lt;li&gt;Backup and recovery data&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;PersistentVolumeClaim&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mypvc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;accessModes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ReadWriteOnce&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1Gi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;storageClassName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fast-ssd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Using PVC in a Pod:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Pod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mypod&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mycontainer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;busybox&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sh&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;echo Hello Kubernetes! &amp;amp;&amp;amp; sleep 3600&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mypvc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/data/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mypvc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;persistentVolumeClaim&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;claimName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mypvc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/storage/persistent-volumes/"
&gt;Learn more about Persistent Volumes&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="storage-classes"&gt;
Storage Classes
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#storage-classes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Storage Classes" href="#storage-classes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Storage Classes define the type of storage to provision. They allow you to specify different storage types (SSD, HDD, etc.) and provision storage dynamically.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;storage.k8s.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;StorageClass&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fast-ssd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;provisioner&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubernetes.io/aws-ebs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gp3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;iops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3000&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;throughput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;125&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;reclaimPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Delete&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;volumeBindingMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;WaitForFirstConsumer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/storage/storage-classes/"
&gt;Learn more about Storage Classes&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="volume-access-modes"&gt;
Volume Access Modes
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#volume-access-modes" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Volume Access Modes" href="#volume-access-modes"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Kubernetes supports three access modes for volumes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ReadWriteOnce (RWO)&lt;/strong&gt;: The volume can be mounted as read-write by a single node&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReadOnlyMany (ROX)&lt;/strong&gt;: The volume can be mounted as read-only by many nodes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReadWriteMany (RWM)&lt;/strong&gt;: The volume can be mounted as read-write by many nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="best-practices"&gt;
Best Practices
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#best-practices" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Best Practices" href="#best-practices"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Use appropriate volume types&lt;/strong&gt; for your use case&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implement proper security&lt;/strong&gt; for sensitive data using Secrets&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plan for storage capacity&lt;/strong&gt; and implement monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Storage Classes&lt;/strong&gt; for dynamic provisioning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implement backup strategies&lt;/strong&gt; for persistent data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor storage usage&lt;/strong&gt; and implement quotas&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="troubleshooting"&gt;
Troubleshooting
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#troubleshooting" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Troubleshooting" href="#troubleshooting"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Common issues with Kubernetes volumes include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Permission errors&lt;/strong&gt;: Check volume mount permissions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage capacity&lt;/strong&gt;: Monitor available storage space&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access mode conflicts&lt;/strong&gt;: Ensure PVC access modes match requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage class issues&lt;/strong&gt;: Verify storage class configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tasks/debug/"
&gt;Learn more about troubleshooting storage issues&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a data-clipboard-text="https://k8s-ops.net/posts/kubernetes-volumes/#conclusion" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Conclusion" href="#conclusion"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Kubernetes Volumes provide a flexible and powerful way to manage and persist data in a containerized environment. By using different types of Volumes, you can customize your data storage and management to meet the specific needs of your applications.&lt;/p&gt;
&lt;p&gt;Key takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EmptyDir&lt;/strong&gt; for temporary storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ConfigMaps&lt;/strong&gt; for non-sensitive configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secrets&lt;/strong&gt; for sensitive data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PersistentVolumeClaims&lt;/strong&gt; for persistent storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Classes&lt;/strong&gt; for dynamic provisioning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information about Kubernetes storage and volumes, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/storage/"
&gt;official Kubernetes documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tutorials/"
&gt;storage tutorials&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/basics" term="basics" label="basics"/><category scheme="https://k8s-ops.net/tags/volumes" term="volumes" label="volumes"/><category scheme="https://k8s-ops.net/tags/configmaps" term="configmaps" label="configmaps"/><category scheme="https://k8s-ops.net/tags/storage" term="storage" label="storage"/><category scheme="https://k8s-ops.net/tags/persistent-volumes" term="persistent-volumes" label="persistent-volumes"/></entry><entry><title>Prometheus</title><link href="https://k8s-ops.net/posts/prometheus-overview/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/prometheus-overview/</id><published>2022-12-21T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Prometheus is an open-source monitoring solution that is widely used in the Kubernetes community. It provides a flexible and scalable way to collect, store, and query time-series metrics, making it an ideal choice for monitoring the health and performance of your cluster and applications.&lt;/p&gt;
&lt;p&gt;Prometheus works by scraping metrics from various sources, including the Kubernetes API server, individual pods, and other components of the control plane. These metrics are stored in a time-series database, and can be queried using a powerful query language, PromQL. This allows you to easily visualize and analyze the collected metrics, and create alerts based on specific conditions.&lt;/p&gt;
&lt;p&gt;To deploy Prometheus in a Kubernetes cluster, you can use a YAML file to create a deployment. The deployment should include a number of resources, including a service, a configMap, and a StatefulSet. The service is used to expose the Prometheus API and allow it to be accessed from outside the cluster, while the configMap is used to store configuration information, such as the scrape interval and target configurations. The StatefulSet is used to manage the pods that run the Prometheus server and ensure that they are rescheduled if they fail.&lt;/p&gt;
&lt;p&gt;Prometheus is widely-used and can be deployed easily:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: apps/v1
kind: StatefulSet
metadata:
name: prometheus
spec:
selector:
matchLabels:
app: prometheus
serviceName: prometheus
replicas: 1
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:v2.24.0
ports:
- containerPort: 9090
volumeMounts:
- name: config
mountPath: /etc/prometheus/
- name: data
mountPath: /prometheus/
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ &amp;#34;ReadWriteOnce&amp;#34; ]
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
name: prometheus
labels:
app: prometheus
spec:
selector:
app: prometheus
ports:
- name: http
port: 9090
targetPort: 9090
clusterIP: None
---
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
data:
prometheus.yml: |-
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: [&amp;#39;localhost:9090&amp;#39;]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This YAML file creates a StatefulSet with a single replica, a service to expose the Prometheus API, and a configMap to store configuration information. The Prometheus server runs in a container, and the data and configuration are stored in persistent volumes that are managed by the StatefulSet.&lt;/p&gt;
&lt;p&gt;In conclusion, Prometheus is a powerful and flexible monitoring solution that is widely used in the Kubernetes community. By using a YAML file to deploy Prometheus, you can easily monitor the health and performance of your cluster and applications, and quickly identify and address any issues that may arise.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/monitoring" term="monitoring" label="monitoring"/><category scheme="https://k8s-ops.net/tags/prometheus" term="prometheus" label="prometheus"/></entry><entry><title>Redis StatefulSet Example</title><link href="https://k8s-ops.net/posts/redis-statefulset-example/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/redis-statefulset-example/</id><published>2022-12-19T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;In this example, a ConfigMap redis-config is created with a custom Redis configuration file. A Secrets redis-secret is created with the Redis password. The StatefulSet redis-statefulset is then created, which uses the Redis image, sets the password as an environment variable, and mounts the ConfigMap as a volume at /usr/local/etc/redis/redis.conf. This means that the Redis container will use the custom configuration and password when it starts up.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: v1
kind: ConfigMap
metadata:
name: redis-config
data:
redis.conf: |
bind 0.0.0.0
protected-mode no
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: v1
kind: Secret
metadata:
name: redis-secret
data:
REDIS_PASSWORD: cGFzc3dvcmQ=
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally, create and apply the StatefulSet:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-statefulset
spec:
serviceName: redis
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis
ports:
- containerPort: 6379
env:
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis-secret
key: REDIS_PASSWORD
volumeMounts:
- name: config-volume
mountPath: /usr/local/etc/redis/redis.conf
subPath: redis.conf
volumes:
- name: config-volume
configMap:
name: redis-config
&lt;/code&gt;&lt;/pre&gt;</content><category scheme="https://k8s-ops.net/tags/redis" term="redis" label="redis"/><category scheme="https://k8s-ops.net/tags/statefulsets" term="statefulsets" label="statefulsets"/><category scheme="https://k8s-ops.net/tags/configmaps" term="configmaps" label="configmaps"/><category scheme="https://k8s-ops.net/tags/secrets" term="secrets" label="secrets"/></entry><entry><title>Deployments, Pods, and StatefulSets</title><link href="https://k8s-ops.net/posts/deployments-pods-statefulsets/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/deployments-pods-statefulsets/</id><published>2022-12-13T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;In Kubernetes, a Pod is the smallest and simplest unit in the Kubernetes object model. A Pod represents a single instance of a running process in your cluster. Pods are used to host containers and provide an isolated environment for each container. Each Pod can contain one or multiple containers, and all containers within a Pod share the same network namespace, IP address, and storage volumes.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="deployment"&gt;
Deployment
&lt;a data-clipboard-text="https://k8s-ops.net/posts/deployments-pods-statefulsets/#deployment" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Deployment" href="#deployment"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;A Deployment is a higher-level Kubernetes object that provides a declarative approach to managing the desired state of Pods. A Deployment ensures that a specified number of replicas of a Pod are running at any given time. If a Pod crashes or is deleted, the Deployment will automatically replace it. Deployments also provide a way to perform rolling updates to the Pods, allowing you to update your application without any downtime.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
name: mydeployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: mycontainer
image: busybox
command: [&amp;#39;sh&amp;#39;, &amp;#39;-c&amp;#39;, &amp;#39;echo Hello Kubernetes! &amp;amp;&amp;amp; sleep 3600&amp;#39;]
&lt;/code&gt;&lt;/pre&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="statefulset"&gt;
StatefulSet
&lt;a data-clipboard-text="https://k8s-ops.net/posts/deployments-pods-statefulsets/#statefulset" class="gblog-post__anchor clip flex align-center" aria-label="Anchor StatefulSet" href="#statefulset"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;A StatefulSet is a higher-level Kubernetes object that provides a unique identity and stable storage to each instance of a Pod. StatefulSets are used to manage stateful applications that require stable network identities and persistent storage. Unlike Deployments, StatefulSets guarantee that the Pods they manage will have a unique hostname, preserving the network identity of each Pod even if it is deleted and recreated.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mystatefulset
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: mycontainer
image: busybox
command: [&amp;#39;sh&amp;#39;, &amp;#39;-c&amp;#39;, &amp;#39;echo Hello Kubernetes! &amp;amp;&amp;amp; sleep 3600&amp;#39;]
volumeMounts:
- name: datadir
mountPath: /data/
volumeClaimTemplates:
- metadata:
name: datadir
spec:
accessModes: [ &amp;#34;ReadWriteOnce&amp;#34; ]
resources:
requests:
storage: 1Gi
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In conclusion, Pods, Deployments, and StatefulSets provide different levels of abstractions for managing applications in Kubernetes. Pods are the basic unit of deployment and provide isolation for containers. Deployments provide a way to manage the desired state of Pods and perform rolling updates. StatefulSets provide a way to manage stateful applications, providing a unique identity and stable storage to each instance of a Pod. By using these objects together, you can create a scalable and reliable application architecture in Kubernetes.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/basics" term="basics" label="basics"/><category scheme="https://k8s-ops.net/tags/deployments" term="deployments" label="deployments"/><category scheme="https://k8s-ops.net/tags/pods" term="pods" label="pods"/><category scheme="https://k8s-ops.net/tags/statefulsets" term="statefulsets" label="statefulsets"/></entry><entry><title>ConfigMaps and Secrets</title><link href="https://k8s-ops.net/posts/configmaps-secrets/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/configmaps-secrets/</id><published>2022-12-10T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;ConfigMaps and Secrets are two Kubernetes objects used to store configuration data and secrets, respectively.&lt;/p&gt;
&lt;p&gt;ConfigMaps are used to store configuration data in the form of key-value pairs. The data stored in a ConfigMap can be used to configure applications, build and compile applications, or as environment variables.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: v1
kind: ConfigMap
metadata:
name: myconfigmap
data:
KEY1: VALUE1
KEY2: VALUE2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To create a &lt;code&gt;ConfigMap&lt;/code&gt; with &lt;code&gt;kubectl&lt;/code&gt;, run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl create configmap my-configmap --from-literal=key1=value1 --from-literal=key2=value2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To edit the &lt;code&gt;ConfigMap&lt;/code&gt;: &lt;code&gt;kubectl edit configmap my-configmap&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This can be mounted in a Pod, either via Deployments or StatefulSets:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;spec:
containers:
- name: mycontainer
image: busybox
env:
- name: KEY1
valueFrom:
configMapKeyRef:
name: myconfigmap
key: KEY1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, they can be mounted as a file&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;spec:
containers:
- name: mycontainer
image: busybox
volumeMounts:
- name: configmap-volume
mountPath: /etc/config/
volumes:
- name: configmap-volume
configMap:
name: myconfigmap
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Secrets are used to store sensitive information such as passwords, tokens, and certificates. The data stored in a Secret is encrypted and can only be accessed by Pods that have the appropriate permissions.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
KEY1: VALUE1
KEY2: VALUE2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Like ConfigMaps, Secrets can be mounted inside a Pod:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;spec:
containers:
- name: mycontainer
image: busybox
env:
- name: KEY1
valueFrom:
secretKeyRef:
name: mysecret
key: KEY1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Or as a file:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;spec:
containers:
- name: mycontainer
image: busybox
volumeMounts:
- name: secret-volume
mountPath: /etc/secret/
volumes:
- name: secret-volume
secret:
secretName: mysecret
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In conclusion, ConfigMaps and Secrets provide a way to store configuration data and secrets in a secure and organized manner in Kubernetes. They can be mounted as environment variables or as files to be used by containers in a Pod.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/basics" term="basics" label="basics"/><category scheme="https://k8s-ops.net/tags/configmaps" term="configmaps" label="configmaps"/><category scheme="https://k8s-ops.net/tags/secrets" term="secrets" label="secrets"/></entry><entry><title>NGINX Deployment Example in Kubernetes</title><link href="https://k8s-ops.net/posts/nginx-deployment-example/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/nginx-deployment-example/</id><published>2022-12-10T00:00:00+00:00</published><updated>2025-07-04T14:53:10-04:00</updated><content type="html">
&lt;p&gt;In this example, we&amp;rsquo;ll create a simple NGINX deployment in Kubernetes using a ConfigMap to serve custom HTML content. This demonstrates how to use ConfigMaps to inject configuration and static content into your containers.&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/"
&gt;Learn more about Deployments&lt;/a&gt;
&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/configuration/configmap/"
&gt;Learn more about ConfigMaps&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="overview"&gt;
Overview
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#overview" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Overview" href="#overview"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The ConfigMap &lt;code&gt;nginx-config&lt;/code&gt; is created with the HTML contents of the index page. The Deployment &lt;code&gt;nginx-deployment&lt;/code&gt; is then created, which uses the stock nginx image and mounts the ConfigMap as a volume at &lt;code&gt;/usr/share/nginx/html&lt;/code&gt;. This means that the contents of the ConfigMap will be available to the nginx container and serve as the index page for the website.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="step-1-create-a-configmap"&gt;
Step 1: Create a ConfigMap
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#step-1-create-a-configmap" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Step 1: Create a ConfigMap" href="#step-1-create-a-configmap"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;First, create a ConfigMap with an &lt;code&gt;index.html&lt;/code&gt; file. This will be mounted into the nginx static directory.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;index.html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;head&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;title&amp;gt;My NGINX Page&amp;lt;/title&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;/head&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;body&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;h1&amp;gt;Welcome to my NGINX Page&amp;lt;/h1&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;p&amp;gt;This page is served from a Kubernetes ConfigMap!&amp;lt;/p&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;/body&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;lt;/html&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Apply the ConfigMap with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f configmap.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://nginx.org/en/"
&gt;Learn more about NGINX&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="step-2-create-the-deployment"&gt;
Step 2: Create the Deployment
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#step-2-create-the-deployment" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Step 2: Create the Deployment" href="#step-2-create-the-deployment"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Then, create a &lt;code&gt;Deployment&lt;/code&gt; file like so, and apply it with &lt;code&gt;kubectl&lt;/code&gt; as above.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;config-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/usr/share/nginx/html&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;config-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configMap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Apply the deployment with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f deployment.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="step-3-create-a-service"&gt;
Step 3: Create a Service
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#step-3-create-a-service" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Step 3: Create a Service" href="#step-3-create-a-service"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;To make the NGINX deployment accessible, create a Service:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterIP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Apply the service with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f service.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="step-4-verify-the-deployment"&gt;
Step 4: Verify the Deployment
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#step-4-verify-the-deployment" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Step 4: Verify the Deployment" href="#step-4-verify-the-deployment"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Check that everything is running correctly:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check the deployment status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get deployments
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check the pods&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check the service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get services
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test the deployment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl port-forward service/nginx-service 8080:80
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then visit &lt;code&gt;http://localhost:8080&lt;/code&gt; in your browser to see your custom NGINX page.&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="additional-configuration-options"&gt;
Additional Configuration Options
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#additional-configuration-options" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Additional Configuration Options" href="#additional-configuration-options"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="using-loadbalancer-service-type"&gt;
Using LoadBalancer Service Type
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#using-loadbalancer-service-type" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Using LoadBalancer Service Type" href="#using-loadbalancer-service-type"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;For external access, you can change the service type to LoadBalancer:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;LoadBalancer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="adding-resource-limits"&gt;
Adding Resource Limits
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#adding-resource-limits" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Adding Resource Limits" href="#adding-resource-limits"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;You can add resource requests and limits to your deployment:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;64Mi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;250m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;128Mi&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;500m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;config-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mountPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/usr/share/nginx/html&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;config-volume&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configMap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nginx-config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="troubleshooting"&gt;
Troubleshooting
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#troubleshooting" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Troubleshooting" href="#troubleshooting"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;If you encounter issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Check pod status&lt;/strong&gt;: &lt;code&gt;kubectl describe pod &amp;lt;pod-name&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check pod logs&lt;/strong&gt;: &lt;code&gt;kubectl logs &amp;lt;pod-name&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify ConfigMap&lt;/strong&gt;: &lt;code&gt;kubectl get configmap nginx-config -o yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check service endpoints&lt;/strong&gt;: &lt;code&gt;kubectl get endpoints nginx-service&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tasks/debug/"
&gt;Learn more about troubleshooting&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="next-steps"&gt;
Next Steps
&lt;a data-clipboard-text="https://k8s-ops.net/posts/nginx-deployment-example/#next-steps" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Next Steps" href="#next-steps"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This example demonstrates basic Kubernetes concepts. You can extend it by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adding an Ingress for external access&lt;/li&gt;
&lt;li&gt;Implementing health checks with liveness and readiness probes&lt;/li&gt;
&lt;li&gt;Setting up horizontal pod autoscaling&lt;/li&gt;
&lt;li&gt;Adding persistent storage for logs&lt;/li&gt;
&lt;li&gt;Implementing rolling updates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more examples and tutorials, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tutorials/"
&gt;official Kubernetes documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://nginx.org/en/docs/"
&gt;NGINX documentation&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/example" term="example" label="example"/><category scheme="https://k8s-ops.net/tags/nginx" term="nginx" label="nginx"/><category scheme="https://k8s-ops.net/tags/configmaps" term="configmaps" label="configmaps"/><category scheme="https://k8s-ops.net/tags/deployment" term="deployment" label="deployment"/><category scheme="https://k8s-ops.net/tags/tutorial" term="tutorial" label="tutorial"/></entry><entry><title>Exposing services to the web</title><link href="https://k8s-ops.net/posts/exposing-services/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/exposing-services/</id><published>2022-12-05T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Exposing containers to the internet is a common task in Kubernetes, and there are several ways to accomplish this. The main methods are by using Services and Endpoints.&lt;/p&gt;
&lt;p&gt;A Service in Kubernetes provides a single IP address and DNS name for a group of pods. It acts as an intermediary between pods and the outside world, forwarding traffic to the correct pod. There are several types of Services in Kubernetes, including ClusterIP, NodePort, LoadBalancer, and ExternalName.&lt;/p&gt;
&lt;p&gt;The ClusterIP Service is the default Service type and is only accessible within the cluster. The NodePort Service opens a specific port on each node in the cluster and maps it to a port on the Service. The LoadBalancer Service creates a load balancer in the cloud provider, providing an external IP address for accessing the Service. The ExternalName Service maps a Service to an external DNS name.&lt;/p&gt;
&lt;p&gt;Endpoints are a list of IP addresses and ports for pods that belong to a Service. When a Service receives a request, it uses the Endpoints to determine which pod to forward the request to.&lt;/p&gt;
&lt;p&gt;In summary, Services and Endpoints are essential components in exposing containers to the internet in Kubernetes. They provide a way to access containers from outside the cluster and ensure that traffic is routed to the correct pods. The choice of Service type will depend on the specific requirements of the application, including accessibility, load balancing, and security.&lt;/p&gt;
&lt;p&gt;Considering the following basic &lt;code&gt;nginx&lt;/code&gt; example, here are examples of various Service types that can be used to expose the nginx deployment to the internet.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
&lt;/code&gt;&lt;/pre&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="nodeport"&gt;
NodePort
&lt;a data-clipboard-text="https://k8s-ops.net/posts/exposing-services/#nodeport" class="gblog-post__anchor clip flex align-center" aria-label="Anchor NodePort" href="#nodeport"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: v1
kind: Service
metadata:
name: nginx-node-port
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30080
type: NodePort
&lt;/code&gt;&lt;/pre&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="clusterip"&gt;
ClusterIP
&lt;a data-clipboard-text="https://k8s-ops.net/posts/exposing-services/#clusterip" class="gblog-post__anchor clip flex align-center" aria-label="Anchor ClusterIP" href="#clusterip"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: v1
kind: Service
metadata:
name: nginx-cluster-ip
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
type: ClusterIP
&lt;/code&gt;&lt;/pre&gt;&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h3 id="loadbalancer"&gt;
LoadBalancer
&lt;a data-clipboard-text="https://k8s-ops.net/posts/exposing-services/#loadbalancer" class="gblog-post__anchor clip flex align-center" aria-label="Anchor LoadBalancer" href="#loadbalancer"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apiVersion: v1
kind: Service
metadata:
name: nginx-load-balancer
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this example, the nginx deployment creates three replicas of the nginx container. The Service type determines how the deployment can be accessed from outside the cluster. With the NodePort Service, the deployment can be accessed by the node&amp;rsquo;s IP address and the specified node port (30080). With the ClusterIP Service, the deployment can be accessed within the cluster by the Service&amp;rsquo;s IP address. With the LoadBalancer Service, the deployment can be accessed by the external IP address provided by the cloud provider.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/basics" term="basics" label="basics"/><category scheme="https://k8s-ops.net/tags/services" term="services" label="services"/></entry><entry><title>Kubernetes Challenges</title><link href="https://k8s-ops.net/posts/kubernetes-challenges/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-challenges/</id><published>2022-11-05T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Kubernetes has become one of the most popular platforms for container orchestration, and its adoption is rapidly growing among organizations of all sizes. This popularity can be attributed to the benefits that Kubernetes provides, such as improved application uptime, increased deployment velocity, and reduced operational complexity. Despite its many benefits, however, Kubernetes can also come with a significant cost overhead. The platform requires a significant investment in terms of time, resources, and expertise to implement and maintain, and can also be resource-intensive, requiring significant computing power, storage, and memory. Additionally, the cost of training and support can be a major factor, as organizations may need to invest in training existing staff or hiring new personnel with experience in Kubernetes. Despite these challenges, many organizations find that the benefits of Kubernetes far outweigh the costs, making it a valuable investment for their operations.&lt;/p&gt;
&lt;p&gt;Some of the challenges organizations may face when implementing Kubernetes include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Complexity: Kubernetes can be complex to set up and manage, requiring significant investment in terms of time, resources, and expertise.&lt;/li&gt;
&lt;li&gt;Integration with existing systems: Integrating Kubernetes with existing systems, such as legacy applications and databases, can be challenging.&lt;/li&gt;
&lt;li&gt;Security concerns: Kubernetes involves running containers and microservices, which can increase the attack surface and create security risks.&lt;/li&gt;
&lt;li&gt;Resource constraints: Kubernetes requires significant computing resources, including storage, memory, and CPU, which can be a challenge for organizations with limited infrastructure.&lt;/li&gt;
&lt;li&gt;Compatibility issues: Kubernetes is constantly evolving, and compatibility issues may arise with different versions of the platform, or with other systems and tools.&lt;/li&gt;
&lt;li&gt;Staffing and training: Organizations may face challenges in finding skilled staff with experience in Kubernetes, and in providing training to existing staff.&lt;/li&gt;
&lt;li&gt;Cost: Implementing Kubernetes can be expensive, both in terms of infrastructure costs and the cost of training and support.&lt;/li&gt;
&lt;li&gt;Overall, organizations should carefully consider their needs and resources when implementing Kubernetes, and should plan accordingly to ensure a successful deployment.&lt;/li&gt;
&lt;/ul&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/challenges" term="challenges" label="challenges"/></entry><entry><title>Kubernetes Errors</title><link href="https://k8s-ops.net/posts/kubernetes-errors/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-errors/</id><published>2022-10-31T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Yes, here are some common errors that can occur when using Kubernetes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Container crashes: If a container in a Pod crashes, Kubernetes will restart the container automatically. However, if the container continues to crash, it may indicate a problem with the application or environment.&lt;/li&gt;
&lt;li&gt;Image pull errors: If Kubernetes is unable to pull the image specified in a Pod definition, this could indicate a problem with the image repository, network connectivity, or image name.&lt;/li&gt;
&lt;li&gt;Resource constraints: If a Pod requires more resources than are available on a node, the Pod will not be scheduled and will remain in a pending state.&lt;/li&gt;
&lt;li&gt;Network connectivity: If Pods are unable to communicate with each other or with the outside world, it may indicate a problem with the network configuration or connectivity.&lt;/li&gt;
&lt;li&gt;DNS resolution: If Pods are unable to resolve domain names, it may indicate a problem with the DNS configuration or network connectivity.&lt;/li&gt;
&lt;li&gt;Configuration errors: If a Pod or deployment configuration is incorrect, Kubernetes may not be able to create or manage the resources as expected.&lt;/li&gt;
&lt;li&gt;Scheduling errors: If a Pod is unable to be scheduled on a node, it may indicate a problem with the node, such as resource constraints or taints.&lt;/li&gt;
&lt;li&gt;Permission errors: If a user is unable to perform certain operations in Kubernetes, it may indicate a problem with the user&amp;rsquo;s permissions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are just a few examples of the common errors that can occur when using Kubernetes. It&amp;rsquo;s important to monitor the logs and events in the cluster to quickly detect and resolve any issues that arise.&lt;/p&gt;</content></entry><entry><title>Inspecting Cluster Resources</title><link href="https://k8s-ops.net/posts/inspecting-resources/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/inspecting-resources/</id><published>2022-10-14T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Here are some kubectl commands that can help ensure that a Kubernetes cluster is properly configured. Remember that they must be run with &lt;code&gt;-n &amp;lt;namespace&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kubectl get nodes&lt;/code&gt;: This command lists all the nodes in the cluster and their status, including their readiness and availability. This can help you identify any nodes that may be offline or not working properly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;: This command lists all the pods in the cluster and their status, including their IP addresses, hostnames, and container status. This can help you identify any pods that may be in a crash loop or have failed to start.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kubectl describe pod &amp;lt;pod_name&amp;gt;&lt;/code&gt;: This command provides detailed information about a specific pod, including its resource utilization, events, and conditions. This can help you diagnose any issues that may be affecting the pod&amp;rsquo;s operation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kubectl get services&lt;/code&gt;: This command lists all the services in the cluster and their status, including their IP addresses, ports, and selector labels. This can help you verify that the services are properly exposed and that the right pods are being targeted.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kubectl logs &amp;lt;pod_name&amp;gt;&lt;/code&gt;: This command displays the logs for a specific pod, which can help you diagnose any issues that may be affecting the pod&amp;rsquo;s operation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These commands can give you a good overview of the state of your cluster and help you identify any issues that may need to be addressed. Additionally, it&amp;rsquo;s important to regularly monitor your cluster&amp;rsquo;s logs, events, and resource utilization to ensure that it&amp;rsquo;s functioning as expected.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubectl" term="kubectl" label="kubectl"/></entry><entry><title>Kubernetes Security</title><link href="https://k8s-ops.net/posts/kubernetes-security/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-security/</id><published>2022-10-02T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Yes, here is a discussion of the most common Kubernetes security issues and how to mitigate them:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Cluster security: A misconfigured Kubernetes cluster can leave it vulnerable to attacks. To mitigate this risk, it&amp;rsquo;s important to follow best practices for securing the control plane, API server, and etcd. This includes using secure authentication and authorization methods, such as Role-Based Access Control (RBAC), and encrypting etcd data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Container security: Containers running in a Kubernetes cluster can pose a security risk if they contain vulnerabilities or malicious code. To mitigate this risk, it&amp;rsquo;s important to use trusted images from a secure repository and to regularly update and patch containers. You can also use security tools, such as runtime security tools and network segmentation, to monitor and control network traffic between containers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Network security: A poorly configured network in a Kubernetes cluster can leave it vulnerable to attacks. To mitigate this risk, it&amp;rsquo;s important to use secure networking solutions, such as network segmentation, and to follow best practices for securing the cluster&amp;rsquo;s network.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resource management: In Kubernetes, it&amp;rsquo;s possible for a container to consume all the resources of a node, leading to a Denial of Service (DoS) attack. To mitigate this risk, it&amp;rsquo;s important to limit the resources that a container can consume, using resource constraints and quotas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Secrets management: Storing secrets, such as passwords and API keys, in a Kubernetes cluster can pose a security risk if they are not managed properly. To mitigate this risk, it&amp;rsquo;s important to use secure methods for storing and accessing secrets, such as Kubernetes Secrets and HashiCorp Vault.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These are just a few of the most common Kubernetes security issues, and it&amp;rsquo;s important to regularly assess and update your cluster&amp;rsquo;s security posture to ensure that it&amp;rsquo;s protected from potential threats.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/security" term="security" label="security"/></entry><entry><title>Kubernetes Logging</title><link href="https://k8s-ops.net/posts/kubernetes-logs/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/kubernetes-logs/</id><published>2022-08-08T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;Getting logs from a Kubernetes cluster is an important aspect of monitoring and troubleshooting applications running in the cluster. There are several ways to get logs from a Kubernetes cluster:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kubectl logs&lt;/code&gt;: You can use the kubectl logs command to retrieve the logs from a specific pod in the cluster. For example, &lt;code&gt;kubectl logs &amp;lt;pod_name&amp;gt;&lt;/code&gt; will display the logs for the pod with the name &amp;lt;pod_name&amp;gt;.&lt;/li&gt;
&lt;li&gt;Kubernetes API: You can also retrieve logs by accessing the logs API endpoint, which is exposed by the Kubernetes API server. To do this, you can use tools like curl to make API requests and retrieve logs.&lt;/li&gt;
&lt;li&gt;Log Aggregation: Another way to collect logs from a Kubernetes cluster is to use a log aggregation tool such as Fluentd, Logstash, or ELK Stack. These tools can collect logs from pods, parse them, and store them in a central location for analysis.&lt;/li&gt;
&lt;li&gt;Sidecar Containers: Another way to collect logs from a pod is to use a sidecar container. A sidecar container is a separate container in the pod that is used to perform specific tasks, such as log collection. For example, you can use a Fluentd container as a sidecar to collect logs from the main application container and send them to a central logging server.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Regardless of the method you choose, it&amp;rsquo;s important to have a centralized log collection solution in place to make it easier to search, analyze, and visualize logs from your Kubernetes cluster.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/logging" term="logging" label="logging"/><category scheme="https://k8s-ops.net/tags/logs" term="logs" label="logs"/><category scheme="https://k8s-ops.net/tags/monitoring" term="monitoring" label="monitoring"/></entry><entry><title>Error from server (Forbidden): error when retrieving current configuration of: Resource is not found</title><link href="https://k8s-ops.net/posts/errors/error-from-server-forbidden-error-when-retrieving-current-configuration-of-resource-is-not-found/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/error-from-server-forbidden-error-when-retrieving-current-configuration-of-resource-is-not-found/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when kubectl does not have sufficient permissions to access a resource in the cluster. Ensure that the user running kubectl has the necessary permissions to access the resource, or use kubectl with a different user that has the necessary permissions.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/><category scheme="https://k8s-ops.net/tags/kubectl" term="kubectl" label="kubectl"/></entry><entry><title>Error: could not find the requested version</title><link href="https://k8s-ops.net/posts/errors/could-not-find-the-requested-version/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/could-not-find-the-requested-version/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when you try to access a resource with an unsupported API version. The resolution is to check the API version of the resource and make sure it is supported by the API server. You can use kubectl api-versions to list the supported API versions.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>Error: Error from server (NotFound): pods 'example-pod' not found</title><link href="https://k8s-ops.net/posts/errors/error-from-server-notfound-pods-not-found/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/error-from-server-notfound-pods-not-found/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when the specified pod does not exist in the cluster. Check the name of the pod and ensure that it has been created and is running.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubectl" term="kubectl" label="kubectl"/><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>Error: invalid value for field … error: … is invalid</title><link href="https://k8s-ops.net/posts/errors/invalid-value-for-field/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/invalid-value-for-field/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when you provide an invalid value for a field in a resource specification. The resolution is to check the field specification and make sure the value you provide is valid. You can use the Kubernetes API documentation or kubectl explain to find the field specification.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>Error: the connection to the server localhost:8080 was refused - did you specify the right host or port?</title><link href="https://k8s-ops.net/posts/errors/the-connection-to-the-server-was-refused/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/the-connection-to-the-server-was-refused/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when kubectl is not able to connect to a Kubernetes cluster. Check that the cluster is up and running and that the kubectl configuration is pointing to the correct cluster.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubectl" term="kubectl" label="kubectl"/><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>Error: the requested resource already exists</title><link href="https://k8s-ops.net/posts/errors/the-requested-resource-already-exists/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/the-requested-resource-already-exists/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when you try to create a resource that already exists. The resolution is to either update the existing resource or delete it and create a new one. You can use kubectl to check if the resource exists and to delete or update it.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>Error: The requested resource was not found on the server</title><link href="https://k8s-ops.net/posts/errors/the-requested-resource-was-not-found-on-the-server/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/the-requested-resource-was-not-found-on-the-server/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when the API server cannot find the requested resource. The resolution is to check the name and namespace of the resource and make sure they are correct. You can also check if the resource was deleted or if there was a network error.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>Error: the resource you requested was not found</title><link href="https://k8s-ops.net/posts/errors/the-resource-you-requested-was-not-found/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/the-resource-you-requested-was-not-found/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when you try to access a resource that does not exist in the API server. The resolution is to check the name, namespace, and API version of the resource to make sure it exists.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>Error: Too many requests, rate limit reached</title><link href="https://k8s-ops.net/posts/errors/too-many-requests-rate-limit-reached/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/too-many-requests-rate-limit-reached/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when you make too many API requests in a short period of time and hit a rate limit. The resolution is to reduce the frequency of API requests or wait until the rate limit resets.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>Error: You do not have enough permissions to perform the requested operation</title><link href="https://k8s-ops.net/posts/errors/you-do-not-have-permissions-to-perform-the-requested-operation/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/errors/you-do-not-have-permissions-to-perform-the-requested-operation/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:01:11-04:00</updated><content type="html">
&lt;p&gt;This error occurs when you try to perform an operation that requires elevated permissions, but you don&amp;rsquo;t have the necessary role-based access control (RBAC) permissions. The resolution is to check the RBAC permissions of the user or service account making the API request and ensure they have the necessary permissions. You can also use kubectl to check the RBAC permissions for a particular resource.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/errors" term="errors" label="errors"/></entry><entry><title>What is Kubernetes?</title><link href="https://k8s-ops.net/posts/what-is-kubernetes/" rel="alternate" type="text/html" hreflang="en"/><id>https://k8s-ops.net/posts/what-is-kubernetes/</id><published>2022-08-01T00:00:00+00:00</published><updated>2025-07-04T14:53:10-04:00</updated><content type="html">
&lt;p&gt;Kubernetes is an open-source platform for automating deployment, scaling, and management of containerized applications. It provides a way to orchestrate containers on multiple hosts, and provides features such as self-healing, horizontal scaling, and service discovery. Kubernetes acts as an operating system for containers and helps to manage the entire life cycle of containerized applications.&lt;/p&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/overview/"
&gt;Learn more about Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Kubernetes can help businesses in various ways, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Improved application uptime&lt;/strong&gt;: Kubernetes provides features such as self-healing, automatic rollbacks, and horizontal scaling, which can help ensure high availability of applications.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Increased deployment velocity&lt;/strong&gt;: With Kubernetes, developers can rapidly deploy and scale applications, leading to faster time-to-market for new products and features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Improved resource utilization&lt;/strong&gt;: Kubernetes allows for efficient utilization of computing resources, reducing costs and increasing efficiency.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Easy scaling&lt;/strong&gt;: Kubernetes allows you to easily scale your application horizontally, adding more resources as needed, without having to worry about the underlying infrastructure.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reduced operational complexity&lt;/strong&gt;: By using Kubernetes, businesses can simplify the management and orchestration of complex, multi-tiered applications, reducing the overall operational complexity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Improved collaboration&lt;/strong&gt;: Kubernetes provides a standard platform for teams to work together, making it easier for teams to collaborate and develop applications together.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="key-features"&gt;
Key Features
&lt;a data-clipboard-text="https://k8s-ops.net/posts/what-is-kubernetes/#key-features" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Key Features" href="#key-features"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Kubernetes offers several key features that make it essential for modern application deployment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container Orchestration&lt;/strong&gt;: Automatically manages container placement, scaling, and health monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;: Enables applications to find and communicate with each other&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load Balancing&lt;/strong&gt;: Distributes traffic across multiple instances of your application&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-healing&lt;/strong&gt;: Automatically replaces failed containers and reschedules them&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Horizontal Scaling&lt;/strong&gt;: Scale applications up or down based on demand&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rolling Updates&lt;/strong&gt;: Update applications without downtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Management&lt;/strong&gt;: Efficiently allocate CPU, memory, and storage resources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/concepts/"
&gt;Explore Kubernetes features&lt;/a&gt;&lt;/p&gt;
&lt;div class="gblog-post__anchorwrap"&gt;
&lt;h2 id="getting-started"&gt;
Getting Started
&lt;a data-clipboard-text="https://k8s-ops.net/posts/what-is-kubernetes/#getting-started" class="gblog-post__anchor clip flex align-center" aria-label="Anchor Getting Started" href="#getting-started"&gt;
&lt;svg class="gblog-icon gblog_link"&gt;&lt;use xlink:href="#gblog_link"&gt;&lt;/use&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;To get started with Kubernetes, you can:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Set up a local cluster&lt;/strong&gt; using tools like &lt;a
class="gblog-markdown__link"
href="https://minikube.sigs.k8s.io/"
&gt;Minikube&lt;/a&gt; or &lt;a
class="gblog-markdown__link"
href="https://www.docker.com/products/docker-desktop/"
&gt;Docker Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use a managed service&lt;/strong&gt; like &lt;a
class="gblog-markdown__link"
href="https://cloud.google.com/kubernetes-engine"
&gt;Google Kubernetes Engine (GKE)&lt;/a&gt;, &lt;a
class="gblog-markdown__link"
href="https://aws.amazon.com/eks/"
&gt;Amazon EKS&lt;/a&gt;, or &lt;a
class="gblog-markdown__link"
href="https://azure.microsoft.com/services/kubernetes-service/"
&gt;Azure AKS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Follow the official tutorials&lt;/strong&gt; at &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tutorials/"
&gt;kubernetes.io/tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For more information about Kubernetes and its capabilities, visit the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/"
&gt;official Kubernetes documentation&lt;/a&gt; and the &lt;a
class="gblog-markdown__link"
href="https://kubernetes.io/docs/tutorials/"
&gt;Kubernetes.io tutorials&lt;/a&gt;.&lt;/p&gt;</content><category scheme="https://k8s-ops.net/tags/kubernetes" term="kubernetes" label="kubernetes"/><category scheme="https://k8s-ops.net/tags/containers" term="containers" label="containers"/><category scheme="https://k8s-ops.net/tags/orchestration" term="orchestration" label="orchestration"/><category scheme="https://k8s-ops.net/tags/devops" term="devops" label="devops"/><category scheme="https://k8s-ops.net/tags/cloud-native" term="cloud-native" label="cloud-native"/></entry></feed>