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

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

2025-07-01 19:52:50作者:仰钰奇

概述

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)的理念在混合云环境中得以更好地实践。

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

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
179
263
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
869
514
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
130
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
295
331
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
333
1.09 K
harmony-utilsharmony-utils
harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志,异常捕获、字符、字符串、数字、集合、日期、随机、base64、加密、解密、JSON等一系列的功能和操作,能够满足各种不同的开发需求。
ArkTS
18
0
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
kernelkernel
deepin linux kernel
C
22
5
WxJavaWxJava
微信开发 Java SDK,支持微信支付、开放平台、公众号、视频号、企业微信、小程序等的后端开发,记得关注公众号及时接受版本更新信息,以及加入微信群进行深入讨论
Java
829
22
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
601
58