首页
/ AWS Controllers for Kubernetes (ACK) 中ELBv2资源支持详解

AWS Controllers for Kubernetes (ACK) 中ELBv2资源支持详解

2025-07-01 08:26:14作者:仰钰奇

概述

AWS Controllers for Kubernetes (ACK) 项目为Kubernetes用户提供了通过原生Kubernetes API管理AWS服务的能力。其中,ELBv2控制器是ACK项目中负责管理AWS弹性负载均衡器(Application Load Balancer和Network Load Balancer)的关键组件。

ELBv2资源支持演进

最初,ACK的ELBv2控制器仅支持基础的LoadBalancer资源创建,用户可以通过YAML定义NLB或ALB的基本配置,如名称、类型、子网和安全组等。然而,完整的负载均衡解决方案还需要监听器(Listener)、目标组(TargetGroup)和规则(Rule)等配套资源。

随着社区需求的增长,ACK团队逐步完善了ELBv2控制器的功能。现在,ELBv2控制器已经完整支持以下资源类型:

  1. LoadBalancer:基础负载均衡器资源
  2. Listener:监听器资源,定义负载均衡器监听的端口和协议
  3. TargetGroup:目标组资源,定义后端服务的目标
  4. Rule:规则资源,定义请求路由规则

资源定义示例

LoadBalancer基础定义

用户可以通过以下YAML定义一个网络负载均衡器(NLB):

apiVersion: elbv2.services.k8s.aws/v1alpha1
kind: LoadBalancer
metadata:
  name: my-nlb
spec:
  name: "my-nlb"
  type: "network"
  scheme: "internet-facing"
  subnets:
    - subnet-123456
    - subnet-789012
    - subnet-345678
  securityGroups: 
    - sg-123456
  tags:
    - key: "environment"
      value: "production"

关联资源定义

创建负载均衡器后,用户可以进一步定义监听器和目标组:

apiVersion: elbv2.services.k8s.aws/v1alpha1
kind: Listener
metadata:
  name: my-listener
spec:
  loadBalancerARN: "arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/my-nlb/1234567890abcdef"
  port: 80
  protocol: "TCP"
  defaultActions:
    - type: "forward"
      targetGroupARN: "arn:aws:elasticloadbalancing:region:account-id:targetgroup/my-target-group/1234567890abcdef"

目标组则可以定义为:

apiVersion: elbv2.services.k8s.aws/v1alpha1
kind: TargetGroup
metadata:
  name: my-target-group
spec:
  name: "my-target-group"
  port: 80
  protocol: "TCP"
  targetType: "ip"
  vpcID: "vpc-123456"
  healthCheckProtocol: "TCP"
  healthCheckPort: "80"

设计考虑

在实现过程中,ACK团队对目标(Targets)的管理方式进行了深入讨论。最初考虑将目标作为TargetGroup CRD的一个spec字段实现,这样设计可以保持资源定义的简洁性。状态字段则用于跟踪各个目标的注册状态和健康状态,当所有目标都注册并健康后,状态会更新为syncComplete。

这种设计模式符合Kubernetes的声明式API设计原则,允许用户通过简单的YAML定义复杂的基础设施配置,同时通过状态字段提供详细的运行时信息。

实际应用场景

在实际应用中,用户可以根据业务需求灵活组合这些资源。例如:

  1. 创建面向互联网的ALB,配置HTTPS监听器
  2. 定义基于路径的路由规则,将不同URL路径转发到不同的目标组
  3. 将Kubernetes服务Pod作为目标组后端,实现自动服务发现

对于更复杂的场景,一些用户选择将负载均衡器的基础设施通过Terraform等工具管理,然后使用ACK的TargetGroupBinding资源将Kubernetes工作负载与现有的ALB目标组关联。这种混合模式可以充分利用不同工具的优势。

总结

ACK项目的ELBv2控制器通过Kubernetes原生API提供了完整的AWS负载均衡服务管理能力。从最初的仅支持基础负载均衡器创建,到现在全面支持监听器、目标组和规则等资源,ACK项目持续演进,为Kubernetes用户提供了更强大的云资源管理能力。这种基于Kubernetes声明式API的设计模式,使得基础设施即代码(IaC)的理念在混合云环境中得以更好地实践。

登录后查看全文
热门项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
165
2.05 K
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
954
563
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
60
16
apintoapinto
基于golang开发的网关。具有各种插件,可以自行扩展,即插即用。此外,它可以快速帮助企业管理API服务,提高API服务的稳定性和安全性。
Go
22
0
giteagitea
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
17
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
408
387
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Python
77
71
rainbondrainbond
无需学习 Kubernetes 的容器平台,在 Kubernetes 上构建、部署、组装和管理应用,无需 K8s 专业知识,全流程图形化管理
Go
14
1