{"id":49966,"date":"2025-07-07T00:41:37","date_gmt":"2025-07-07T00:41:37","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49966"},"modified":"2025-07-07T00:41:37","modified_gmt":"2025-07-07T00:41:37","slug":"difference-between-aws-load-balancer-controller-vs-kubernetes-gateway-api-controller-for-aws-vpc-lattice","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/difference-between-aws-load-balancer-controller-vs-kubernetes-gateway-api-controller-for-aws-vpc-lattice\/","title":{"rendered":"Difference between AWS Load Balancer Controller Vs Kubernetes Gateway API Controller for AWS VPC Lattice"},"content":{"rendered":"\n<h6 class=\"wp-block-heading\">AWS Load Balancer Controller vs Kubernetes Gateway API Controller for AWS VPC Lattice<\/h6>\n\n\n\n<h2 class=\"wp-block-heading\">Overview Table<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>AWS Load Balancer Controller<\/th><th>Kubernetes Gateway API Controller for VPC Lattice<\/th><\/tr><\/thead><tbody><tr><td><strong>Primary Purpose<\/strong><\/td><td>Integrate AWS ALB\/NLB with Kubernetes Ingress\/Service<\/td><td>Integrate Kubernetes Gateway API with AWS VPC Lattice<\/td><\/tr><tr><td><strong>Resource Types<\/strong><\/td><td>Ingress, Service<\/td><td>GatewayClass, Gateway, HTTPRoute, etc.<\/td><\/tr><tr><td><strong>Supported Protocols<\/strong><\/td><td>L4 (NLB), L7 (ALB)<\/td><td>HTTP, HTTPS, (gRPC planned), multi-protocol extensible<\/td><\/tr><tr><td><strong>Scope<\/strong><\/td><td>North-South (Ingress) traffic<\/td><td>East-West (Service mesh, cross-cluster, multi-account)<\/td><\/tr><tr><td><strong>AWS Integration<\/strong><\/td><td>AWS Elastic Load Balancers<\/td><td>AWS VPC Lattice (service mesh abstraction)<\/td><\/tr><tr><td><strong>Portability<\/strong><\/td><td>AWS-specific<\/td><td>Kubernetes-native, multi-cluster, multi-account<\/td><\/tr><tr><td><strong>Extensibility<\/strong><\/td><td>AWS-specific annotations<\/td><td>Role-oriented, extensible via Gateway API<\/td><\/tr><tr><td><strong>Management<\/strong><\/td><td>AWS-managed resources<\/td><td>Kubernetes-native resources mapped to VPC Lattice objects<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">AWS Load Balancer Controller<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong><br>Provisions and manages AWS Application Load Balancers (ALB) and Network Load Balancers (NLB) for Kubernetes clusters by watching Ingress and Service resources.<\/li>\n\n\n\n<li><strong>Use Case:<\/strong><br>Best for exposing Kubernetes services to the internet (north-south traffic) or internal AWS networks using native AWS load balancers.<\/li>\n\n\n\n<li><strong>How it works:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Monitors Kubernetes Ingress and Service resources.<\/li>\n\n\n\n<li>Creates and configures ALB\/NLB in AWS.<\/li>\n\n\n\n<li>Uses annotations for AWS-specific features (e.g., security groups, target types).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Limitations:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Focused on ingress (north-south) traffic.<\/li>\n\n\n\n<li>AWS-only; not portable across cloud providers.<\/li>\n\n\n\n<li>Does not natively support VPC Lattice or service-mesh (east-west) scenarios.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Kubernetes Gateway API Controller for AWS VPC Lattice<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong><br>Implements the Kubernetes Gateway API to provision and manage AWS VPC Lattice resources, enabling advanced service networking (east-west traffic) across VPCs, accounts, and clusters.<\/li>\n\n\n\n<li><strong>Use Case:<\/strong><br>Ideal for service-to-service (east-west) connectivity, multi-cluster, and multi-account service mesh scenarios. Supports advanced routing, security, and observability features.<\/li>\n\n\n\n<li><strong>How it works:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Watches for Gateway API resources (<code>GatewayClass<\/code>, <code>Gateway<\/code>, <code>HTTPRoute<\/code>, etc.).<\/li>\n\n\n\n<li>Maps these resources to VPC Lattice objects (Service Networks, Services, Target Groups).<\/li>\n\n\n\n<li>Enables Kubernetes-native management of VPC Lattice networking, including cross-cluster and hybrid (EC2, Lambda, EKS) scenarios.<\/li>\n\n\n\n<li>No need for sidecar proxies; integrates directly with AWS networking.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Strengths:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Portable, extensible, and vendor-neutral.<\/li>\n\n\n\n<li>Enables consistent application networking across AWS compute types and accounts.<\/li>\n\n\n\n<li>Supports advanced traffic management, security policies, and observability.<\/li>\n\n\n\n<li>Designed for large-scale, complex, or hybrid environments.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Key Differences<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Traffic Focus:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>AWS Load Balancer Controller:<\/strong> Primarily for north-south (external ingress) traffic using traditional AWS load balancers.<\/li>\n\n\n\n<li><strong>Gateway API Controller for VPC Lattice:<\/strong> Focused on east-west (service-to-service) traffic, multi-cluster, and multi-account connectivity with service mesh-like features.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Resource Model:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Load Balancer Controller:<\/strong> Uses Ingress and Service resources with AWS-specific annotations.<\/li>\n\n\n\n<li><strong>Gateway API Controller:<\/strong> Uses Kubernetes-native Gateway API resources, mapped to VPC Lattice objects.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Extensibility and Portability:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Load Balancer Controller:<\/strong> AWS-specific, less portable.<\/li>\n\n\n\n<li><strong>Gateway API Controller:<\/strong> Kubernetes-standard, multi-vendor support, portable across clusters and accounts.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Integration with AWS VPC Lattice:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Load Balancer Controller:<\/strong> Does not natively provision or manage VPC Lattice resources.<\/li>\n\n\n\n<li><strong>Gateway API Controller:<\/strong> Directly provisions and manages VPC Lattice resources, enabling advanced service networking.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">When to Use Each<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Use AWS Load Balancer Controller if:<\/strong>\n<ul class=\"wp-block-list\">\n<li>You need to expose Kubernetes services to the internet or internal AWS networks via ALB\/NLB.<\/li>\n\n\n\n<li>Your focus is on traditional ingress (north-south) traffic within AWS.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Use Kubernetes Gateway API Controller for VPC Lattice if:<\/strong>\n<ul class=\"wp-block-list\">\n<li>You require advanced service-to-service (east-west) connectivity, multi-cluster, or multi-account networking.<\/li>\n\n\n\n<li>You want to leverage VPC Lattice\u2019s service mesh features (security, observability, hybrid targets).<\/li>\n\n\n\n<li>You prefer Kubernetes-native, portable, and extensible networking management.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 <strong>AWS Load Balancer Controller<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Purpose:<\/strong><br>Provisions and manages <strong>AWS Elastic Load Balancers<\/strong> (ALB\/NLB) for your Kubernetes services and ingresses.<\/li>\n\n\n\n<li><strong>Kubernetes Resources Supported:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code>Ingress<\/code><\/li>\n\n\n\n<li><code>Service<\/code> of type <code>LoadBalancer<\/code><\/li>\n\n\n\n<li>Now also supports <strong>Gateway API (for ALB)<\/strong> (but NOT VPC Lattice!)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>How it works:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Deploys an ALB or NLB for each relevant K8s resource.<\/li>\n\n\n\n<li>Integrates tightly with native AWS networking (Security Groups, IAM, WAF, etc.).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Traffic Path:<\/strong><br><strong>Client \u2192 AWS ALB\/NLB \u2192 Kubernetes Pods\/Services<\/strong><\/li>\n\n\n\n<li><strong>Supported AWS Networking:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Classic Load Balancer<\/li>\n\n\n\n<li>ALB (Application LB)<\/li>\n\n\n\n<li>NLB (Network LB)<\/li>\n\n\n\n<li><strong>NOT VPC Lattice<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 <strong>Kubernetes Gateway API Controller for AWS VPC Lattice<\/strong><\/h2>\n\n\n\n<p><em>(sometimes called &#8220;AWS VPC Lattice Controller for K8s&#8221;)<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Purpose:<\/strong><br>Manages <strong>AWS VPC Lattice Service Networks<\/strong> using Kubernetes-native Gateway API CRDs.<\/li>\n\n\n\n<li><strong>Kubernetes Resources Supported:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code>GatewayClass<\/code>, <code>Gateway<\/code>, <code>HTTPRoute<\/code>, <code>GRPCRoute<\/code>, <code>ServiceExport<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>How it works:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Translates Gateway API resources to AWS VPC Lattice configuration.<\/li>\n\n\n\n<li>Provisions and manages Lattice <strong>Service Networks<\/strong>, <strong>Services<\/strong>, and <strong>auth\/networking policies<\/strong>.<\/li>\n\n\n\n<li>Uses AWS\u2019s new Lattice managed service mesh\/data plane.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Traffic Path:<\/strong><br><strong>Client (in VPC or via Lattice integration) \u2192 AWS VPC Lattice \u2192 Kubernetes Pods\/Services<\/strong><\/li>\n\n\n\n<li><strong>Supported AWS Networking:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>VPC Lattice only<\/strong><\/li>\n\n\n\n<li><em>NOT<\/em> Classic ELB, ALB, or NLB<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd11 <strong>Key Differences Table<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Aspect<\/th><th>AWS Load Balancer Controller<\/th><th>Gateway API Controller for AWS VPC Lattice<\/th><\/tr><\/thead><tbody><tr><td><strong>AWS Service Used<\/strong><\/td><td>ALB\/NLB (Elastic Load Balancer)<\/td><td>VPC Lattice<\/td><\/tr><tr><td><strong>K8s API Support<\/strong><\/td><td>Ingress, Service (LoadBalancer), Gateway (ALB only)<\/td><td>Gateway API (<code>GatewayClass<\/code>, <code>Gateway<\/code>, <code>Route<\/code>)<\/td><\/tr><tr><td><strong>Cross-VPC Service Mesh<\/strong><\/td><td>\u274c Not supported<\/td><td>\u2705 Native with Lattice<\/td><\/tr><tr><td><strong>Traffic Management<\/strong><\/td><td>L7 (ALB), L4 (NLB), AWS features (OIDC, WAF)<\/td><td>L7\/L4, fine-grained policies, service mesh-like<\/td><\/tr><tr><td><strong>AuthZ\/AuthN<\/strong><\/td><td>ALB\/NLB features (OIDC, WAF, etc.)<\/td><td>Lattice AuthN\/AuthZ, service-to-service policy<\/td><\/tr><tr><td><strong>Multi-cluster\/Multi-VPC<\/strong><\/td><td>Only with complex setup<\/td><td><strong>Native<\/strong> in Lattice<\/td><\/tr><tr><td><strong>Supported Controllers<\/strong><\/td><td>Only AWS LB Controller<\/td><td>AWS VPC Lattice K8s Controller<\/td><\/tr><tr><td><strong>Portability<\/strong><\/td><td>AWS-only, ALB\/NLB<\/td><td>AWS-only, Lattice<\/td><\/tr><tr><td><strong>Advanced Routing<\/strong><\/td><td>Limited to what ALB\/NLB can do<\/td><td>Modern routing, policies, multi-VPC\/service-mesh<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udea6 <strong>When to Use Which?<\/strong><\/h2>\n\n\n\n<p><strong>Use AWS Load Balancer Controller if:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You need classic AWS ALB\/NLB integration.<\/li>\n\n\n\n<li>Your traffic comes primarily from the internet or traditional AWS endpoints.<\/li>\n\n\n\n<li>You want features like WAF, OIDC on ALB, AWS SSL\/TLS termination.<\/li>\n\n\n\n<li>You\u2019re using K8s Ingress or Service of type LoadBalancer.<\/li>\n<\/ul>\n\n\n\n<p><strong>Use K8s Gateway API Controller for AWS VPC Lattice if:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want to leverage AWS\u2019s <strong>next-gen Lattice<\/strong> mesh for <strong>service-to-service, multi-VPC, or multi-account connectivity<\/strong>.<\/li>\n\n\n\n<li>You want modern traffic policy, AuthN\/AuthZ, or advanced cross-VPC routing.<\/li>\n\n\n\n<li>You want a <strong>future-proof, service-mesh-like<\/strong> architecture but fully managed by AWS.<\/li>\n\n\n\n<li>You want full Kubernetes Gateway API experience on AWS.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Architecture Diagrams<\/strong><\/h2>\n\n\n\n<p><strong>AWS Load Balancer Controller:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Internet\/Client\n      |\n   &#91;ALB\/NLB]\n      |\n  &#91;K8s Service\/Pod]\n<\/code><\/span><\/pre>\n\n\n<p><strong>Gateway API Controller for AWS VPC Lattice:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Client in any VPC \/ Account \/ On-prem\n      |\n &#91;VPC Lattice Service Network]\n      |\n   &#91;K8s Gateway API (Gateway, HTTPRoute)]\n      |\n  &#91;K8s Service\/Pod]\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Summary Table<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>ALB\/NLB Controller<\/th><th>VPC Lattice Gateway API Controller<\/th><\/tr><\/thead><tbody><tr><td><strong>AWS Service<\/strong><\/td><td>ALB, NLB<\/td><td>VPC Lattice<\/td><\/tr><tr><td><strong>Supports Gateway API<\/strong><\/td><td>Only for ALB (partial)<\/td><td>Yes, full Gateway API<\/td><\/tr><tr><td><strong>Mesh\/Multi-VPC<\/strong><\/td><td>No<\/td><td>Yes (via Lattice)<\/td><\/tr><tr><td><strong>Traffic Policy<\/strong><\/td><td>Basic, ALB\/NLB rules<\/td><td>Advanced (Gateway API + Lattice)<\/td><\/tr><tr><td><strong>Security<\/strong><\/td><td>ALB\/NLB OIDC, WAF<\/td><td>Lattice AuthN\/AuthZ, fine-grained<\/td><\/tr><tr><td><strong>Best for<\/strong><\/td><td>Internet \u2192 K8s Service<\/td><td>Cross-VPC\/Account, internal\/external<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>AWS Load Balancer Controller vs Kubernetes Gateway API Controller for AWS VPC Lattice Overview Table Feature AWS Load Balancer Controller Kubernetes Gateway API Controller for VPC Lattice Primary Purpose Integrate&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49966","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49966"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49966\/revisions"}],"predecessor-version":[{"id":49967,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49966\/revisions\/49967"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}