<p>As multi-tenant Kubernetes platforms grow, most teams watch CPU, memory, storage, and cloud spend. Far fewer watch the number of routing rules accumulating in front of the platform. That blind spot can become a real deployment blocker.</p>
<p>In a recent customer environment, Shakudo traced an urgent upgrade risk to a deceptively simple pattern: each new project was adding roughly six domains, and each subdomain was creating two load balancer rules. Nothing was failing because traffic volume was too high. The bottleneck was control-plane sprawl.</p>
<p>That matters well beyond one customer. AWS documents a default quota of <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html">100 rules per Application Load Balancer excluding the default rule</a>. Quotas can be adjusted, but the bigger lesson is architectural: if your platform automatically creates hosts, environments, and routes, rule growth can silently become a scaling constraint.</p>
<figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:1024px" data-rt-type="image" data-rt-align="fullwidth" data-rt-max-width="1024px"><div><img alt="" src="/images/blog/rich-text/load-balancer-rule-limits-kubernetes-post-body-rich-0.webp" width="auto" height="auto" loading="auto"></div></figure>
<h2>The bottleneck was rule growth not traffic</h2>
<p>The useful lesson from this case is that the failure mode was not obvious from normal platform dashboards. There was no single dramatic CPU spike, no sudden storage event, and no classic “the cluster is down” signal. Instead, the team noticed that routing complexity was growing linearly with every new project.</p>
<p>In this environment, the growth math looked something like this:</p>
<ul><li>each new project introduced multiple domains</li>
<li>each subdomain introduced multiple load balancer rules</li>
<li>non-production and production environments multiplied the rule count further</li>
<li>ingress and mesh behavior added more operational complexity on top</li></ul>
<p>That combination turned a normal production upgrade into a blocker.</p>
<p>This is exactly the kind of issue that platform teams building an <a href="/blog/enterprise-ai-agent-infrastructure-stack">enterprise AI agent infrastructure stack</a> or trying to <a href="/blog/deploy-ai-agents-on-kubernetes">deploy AI agents on Kubernetes</a> should pay attention to early. Rule growth often hides inside “just one more hostname” decisions until the platform reaches enough tenant and environment density for those decisions to compound.</p>
<h2>Why teams miss this until late</h2>
<p>There are a few reasons this problem shows up late:</p>
<h3>Routing rules feel cheap</h3>
<p>Adding one more hostname or path looks harmless in isolation. The problem is that self-service platforms rarely add just one. They add many, and they keep adding them.</p>
<h3>The platform looks healthy right up until it does not</h3>
<p>Teams usually monitor traffic, latency, cost, and pod health. Fewer teams actively monitor listener rule growth, ingress object sprawl, or the number of host-based routes generated per tenant.</p>
<h3>Quota increases feel like a fix</h3>
<p>They can buy time, but they do not simplify the architecture. If the routing pattern itself is inefficient, raising the ceiling just delays the next incident.</p>
<h2>Why multi tenant Kubernetes platforms hit this wall</h2>
<h3>Subdomain multiplication is normal</h3>
<p>Many platform teams create separate subdomains for:</p>
<ul><li>each customer or tenant</li>
<li>each project or workspace</li>
<li>each environment such as dev, staging, and prod</li>
<li>APIs, apps, dashboards, notebooks, and internal services</li></ul>
<p>That is a reasonable pattern. The problem is not the naming convention itself. The problem is what happens when each of those names turns into separate routing entries.</p>
<h3>Environment multiplication changes the math fast</h3>
<p>A platform may feel manageable at 10 projects. It becomes very different at 50 or 100 projects when every service pattern is repeated across multiple environments.</p>
<p>This is especially true in self-service environments with provisioning flows, ephemeral deployments, or automated pipelines on the <a href="/platform">Shakudo Platform</a> that create routes as part of standard operations.</p>
<h3>Mesh and ingress layers can add complexity</h3>
<p>Many enterprise platforms do not stop at raw ingress. They also add a service mesh or gateway layer for policy, security, and traffic management.</p>
<p>That is often the right call. But it means your routing model now spans:</p>
<ul><li>cloud load balancer behavior</li>
<li>Kubernetes ingress behavior</li>
<li>controller-specific behavior</li>
<li>service mesh gateway and routing behavior</li></ul>
<p>In this case, the team also had Istio-related behavior to consider. That matters because wildcard design has to be correct across layers, not just in one place.</p>
<h2>The fix was to change the routing pattern</h2>
<p>The breakthrough in this case was not “optimize the cluster harder.” It was much simpler:</p>
<p><strong>collapse many explicit host rules into wildcard host patterns wherever the domain model allows it.</strong></p>
<p>Instead of creating one routing rule per subdomain, the team used wildcard-style routing to consolidate many hosts under fewer load balancer entries.</p>
<h3>Why wildcard rules help</h3>
<p>Wildcard host rules reduce the rate at which rule count grows.</p>
<p>Instead of handling routes like this:</p>
<ul><li>tenant-a.dev.platform.example.com</li>
<li>tenant-b.dev.platform.example.com</li>
<li>tenant-c.dev.platform.example.com</li></ul>
<p>you can often handle a whole family of related subdomains with a pattern like:</p>
<ul><li>*.dev.platform.example.com</li></ul>
<p>That does not solve every routing problem, but it dramatically improves the scaling characteristics of the ingress layer.</p>
<h3>AWS ALB supports host-based wildcard matching</h3>
<p>AWS documents host-based routing and wildcard matching in <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/rule-condition-types.html">listener rule conditions for Application Load Balancers</a>. In practical terms, ALB can match wildcard host-header patterns such as *.example.com, which makes it possible to consolidate many related subdomains behind fewer rules.</p>
<p>That is the key architectural move here: reduce per-host explicit routing where the naming scheme is predictable.</p>
<h3>Kubernetes ingress supports wildcard hosts too</h3>
<p>Kubernetes also supports wildcard hostnames in Ingress. The <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/">official Ingress documentation</a> shows that wildcard hosts work for a <strong>single DNS label</strong>.</p>
<p>That nuance matters:</p>
<ul><li>*.example.com matches app.example.com</li>
<li>*.example.com does <strong>not</strong> match api.app.example.com</li></ul>
<p>So if your platform naming hierarchy goes deeper than one label, you need to design the wildcard pattern carefully instead of assuming one wildcard catches everything.</p>
<p>Kubernetes also introduced and documented this more clearly in its <a href="https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/">Ingress API improvements around wildcard hostnames</a>.</p>
<h3>Istio supports wildcard matching at the gateway layer</h3>
<p>If you are using Istio, its <a href="https://istio.io/latest/docs/reference/config/networking/gateway/">Gateway documentation</a> also supports wildcard hosts in the left-most component. Istio further documents that matching can work via exact or suffix-based relationships between the gateway host and the VirtualService host.</p>
<p>That makes wildcard consolidation viable even in more policy-heavy environments, as long as the gateway and service naming model are designed together.</p>
<p>‍</p>
<figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:1024px" data-rt-type="image" data-rt-align="fullwidth" data-rt-max-width="1024px"><div><img alt="" src="/images/blog/rich-text/load-balancer-rule-limits-kubernetes-post-body-rich-1.webp" width="auto" height="auto" loading="auto"></div></figure>
<h2>What wildcard routing solves and what it does not</h2>
<p>Wildcard routing is powerful, but it is not magic.</p>
<h3>What it solves</h3>
<ul><li>slower rule-count growth</li>
<li>less repetitive routing configuration</li>
<li>fewer deployment blockers caused by ingress sprawl</li>
<li>a cleaner model for predictable subdomain families</li></ul>
<h3>What it does not solve</h3>
<ul><li>poor tenant or namespace design</li>
<li>weak security boundaries</li>
<li>certificate management complexity</li>
<li>bad observability</li>
<li>uncontrolled naming conventions</li></ul>
<p>This is why wildcard routing should be treated as an architectural simplification, not just a quota workaround.</p>
<p>For example, if you widen host patterns without keeping clear auth, namespace, and policy boundaries, you can make the platform harder to govern. Teams building <a href="/blog/how-to-build-secure-scalable-ai-agents">secure scalable AI agents</a> or enterprise-grade internal platforms should treat wildcard adoption as a design review item, not just an ops tweak.</p>
<h2>A practical rollout checklist before you adopt wildcard rules</h2>
<p>If your team sees similar rule growth, this is the checklist worth following.</p>
<h3>1. Map the full hostname taxonomy</h3>
<p>Document every hostname family by:</p>
<ul><li>tenant</li>
<li>environment</li>
<li>service type</li>
<li>internal vs external exposure</li>
<li>certificate boundary</li></ul>
<p>Do this before changing any routing.</p>
<h3>2. Find the natural wildcard boundaries</h3>
<p>Look for hostname families where a single wildcard is actually correct. Do not force wildcards where the domain structure is inconsistent.</p>
<h3>3. Validate single-label behavior</h3>
<p>This is where many teams get tripped up. Kubernetes wildcard hosts only cover one DNS label. If your pattern is deeper than that, you may need multiple wildcard levels or a different naming model.</p>
<h3>4. Review mesh and ingress interactions together</h3>
<p>If you use ALB, Kubernetes Ingress, and Istio, review all three layers at once. A wildcard plan that works at the cloud load balancer layer but not at the gateway layer will not reduce operational pain.</p>
<h3>5. Review TLS and certificate strategy</h3>
<p>Wildcard routing usually implies wildcard certificate planning too. Make sure certificate issuance, renewal, and boundary ownership are explicit.</p>
<h3>6. Improve observability before rollout</h3>
<p>You should be able to answer:</p>
<ul><li>which hosts are matched by which rule</li>
<li>which backends receive wildcard traffic</li>
<li>which environments are adding routes fastest</li>
<li>which changes increase routing complexity over time</li></ul>
<p>If you are standardizing platform observability, Shakudo’s broader <a href="/integrations">integrations</a> ecosystem and support for tools like <a href="/integrations/prometheus">Prometheus</a> and <a href="/integrations/grafana">Grafana</a> are highly relevant here.</p>
<h3>7. Roll out in stages</h3>
<p>Start with non-critical environments. Confirm that host matching, certificates, redirects, and service ownership all behave as expected before production cutover.</p>
<figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:1024px" data-rt-type="image" data-rt-align="fullwidth" data-rt-max-width="1024px"><div><img alt="" src="/images/blog/rich-text/load-balancer-rule-limits-kubernetes-post-body-rich-2.webp" width="auto" height="auto" loading="auto"></div></figure>
<h2>The broader lesson for platform teams</h2>
<p>The real takeaway from this case is not just “wildcards are useful.”</p>
<p>It is this:</p>
<p><strong>Ingress design is part of platform scalability.</strong></p>
<p>Teams often treat routing as a thin layer in front of the real system. But in multi-tenant platforms, routing rules are part of the system. They shape how fast environments can be provisioned, how safely services can be exposed, and how easily production upgrades can happen.</p>
<p>In this customer case, the team moved from identifying the rule-growth pattern to removing the blocker within days. That is a good outcome. But the more useful lesson is that platform teams should design for this class of problem before it appears.</p>
<p>If your architecture assumes the platform will keep adding tenants, services, and environments, your ingress model should scale at the same rate.</p>
<h2>FAQ</h2>
<h3>How many rules can an AWS Application Load Balancer have</h3>
<p>AWS documents a default quota of 100 rules per Application Load Balancer excluding the default rule, and that quota can be adjusted. The exact number in your environment may vary if quotas have already been increased, but the key point is that ALB rule growth is finite and worth tracking.</p>
<h3>Can I solve this by just requesting a quota increase</h3>
<p>Sometimes, yes in the short term. But if each new tenant or subdomain keeps adding more explicit rules, the underlying architecture will still create operational drag later.</p>
<h3>Do wildcard hosts work for every hostname structure</h3>
<p>No. In Kubernetes Ingress, wildcard matching covers a single DNS label. That means *.example.com matches app.example.com but not api.app.example.com.</p>
<h3>Does this pattern work with Istio</h3>
<p>Yes, if the gateway and VirtualService host model are designed correctly. Istio documents wildcard support at the gateway layer, but teams should still validate the exact host patterns they use.</p>
<h3>When should I start worrying about this</h3>
<p>As soon as your platform automatically provisions routes for tenants, projects, or environments. If hostname creation is part of your product or platform workflow, you should review routing growth before it becomes urgent.</p>
<h3>What is the strongest early warning signal</h3>
<p>A simple one is this: if every new project, workspace, or environment creates several more domains and each of those creates more routing rules, you already have the ingredients for rule sprawl.</p>
<h2>Talk to Shakudo</h2>
<p>If your team is building a multi-tenant data or AI platform on Kubernetes, this is exactly the kind of scaling issue that is easier to fix early than under production pressure.</p>
<p>The <a href="/platform">Shakudo Platform</a> helps teams simplify the infrastructure behind modern data and AI systems, including the layers around orchestration, deployment, governance, and operational scale.</p>
<p>If you want help reviewing your ingress model, wildcard strategy, or broader platform design, <a href="/contact-us">contact Shakudo</a>.</p>