AWS Load Balancer Controller 外部管理负载均衡器实践指南

AWS Load Balancer Controller 外部管理负载均衡器实践指南

aws-load-balancer-controller A Kubernetes controller for Elastic Load Balancers aws-load-balancer-controller 项目地址: https://gitcode.com/gh_mirrors/aw/aws-load-balancer-controller

前言

在 Kubernetes 集群中,AWS Load Balancer Controller(LBC)通常负责自动创建和管理 AWS 负载均衡器资源。然而,在某些特定场景下,运维团队可能需要手动管理这些负载均衡器。本文将详细介绍如何使用 AWS Load Balancer Controller 实现对外部管理负载均衡器的集成。

适用场景

手动管理 AWS 负载均衡器的典型场景包括:

  1. IP 地址保留需求:防止关键 IP 地址被意外释放
  2. 混合架构支持:当 Kubernetes 集群只是负载均衡器的多个后端目标之一时
  3. 合规性要求:组织出于安全或成本考虑,需要对负载均衡器创建进行特定管理

技术原理

AWS Load Balancer Controller 通过 TargetGroupBinding 自定义资源定义(CRD)实现 Kubernetes 服务与手动创建的 AWS 负载均衡器的集成。其核心机制是:

  1. 运维人员先在 AWS 控制台或通过 CLI 手动创建负载均衡器(支持 NLB 和 ALB)
  2. 为负载均衡器配置监听器和目标组
  3. 在 Kubernetes 集群中创建 TargetGroupBinding 资源,将目标组 ARN 与 Kubernetes 服务关联
  4. LBC 控制器会监控关联的服务,自动将对应的 Pod IP 地址注册到目标组中

准备工作

环境要求

  1. 已安装 AWS Load Balancer Controller 的 Kubernetes 集群
  2. 配置好 AWS CLI 工具
  3. 安装 kubectl 命令行工具

必要信息

需要提前准备以下 AWS 资源信息:

  • 集群 VPC 信息:
    • EKS 集群 ID
    • 子网 ID 列表
    • 这些信息可在 EKS 控制台的"网络"部分找到
  • 目标 Kubernetes 服务的端口和协议信息

负载均衡器配置步骤

1. 创建网络负载均衡器(NLB)

使用 AWS CLI 创建 NLB,注意每个可用区只能指定一个子网:

aws elbv2 create-load-balancer \
  --name my-nlb \
  --type network \
  --subnets subnet-0e3f5cac72EXAMPLE subnet-1a2b3c4d5eEXAMPLE

关键输出:命令返回的负载均衡器 ARN,格式如下:

arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/my-nlb/id

2. 创建目标组

创建与 Kubernetes 服务匹配的目标组,必须指定集群所在的 VPC:

aws elbv2 create-target-group \
  --name my-targets \
  --protocol TCP \
  --port 80 \
  --vpc-id vpc-0598c7d356EXAMPLE

关键输出:目标组 ARN,格式如下:

arn:aws:elasticloadbalancing:region:account-id:targetgroup/my-targets/id

3. 创建监听器

创建监听器将流量转发到目标组,端口和协议需与 Kubernetes 服务匹配:

aws elbv2 create-listener \
  --load-balancer-arn arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/my-nlb/id \
  --protocol TCP \
  --port 80 \
  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:account-id:targetgroup/my-targets/id

Kubernetes 资源配置

创建 TargetGroupBinding

定义 YAML 文件将目标组与 Kubernetes 服务关联:

apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
  name: nlb-tgb
spec:
  serviceRef:
    name: web-service  # 目标服务名称
    port: 80          # 服务端口
  targetGroupARN: arn:aws:elasticloadbalancing:region:account-id:targetgroup/my-targets/id

应用配置到集群:

kubectl apply -f nlb-tgb.yaml

验证配置

等待约 30 秒后,可通过以下方式验证:

  1. 在 AWS 控制台查看目标组的注册目标
  2. 确认 Kubernetes 集群中对应服务的 Pod IP 已正确注册
  3. 通过负载均衡器 DNS 名称测试服务可达性

高级配置建议

  1. 健康检查配置:确保目标组的健康检查设置与应用程序特性匹配
  2. 跨区域负载均衡:根据业务需求考虑启用跨区域负载均衡
  3. 安全组配置:确保负载均衡器和 Pod 所在节点的安全组规则允许流量通过
  4. 标签管理:为手动创建的 AWS 资源添加适当标签,便于成本管理和资源跟踪

排错指南

常见问题及解决方法:

  1. 目标未注册

    • 检查 TargetGroupBinding 中的服务名称和端口是否正确
    • 确认服务对应的 Pod 处于 Running 状态
    • 检查 LBC 控制器日志是否有错误信息
  2. 流量不通

    • 验证安全组规则
    • 检查网络 ACL 是否阻止流量
    • 确认目标组健康检查配置是否正确
  3. 控制器不响应

    • 检查 LBC Pod 是否正常运行
    • 验证 IAM 权限是否足够

总结

通过 AWS Load Balancer Controller 的 TargetGroupBinding 功能,我们可以在保留对负载均衡器手动控制权的同时,仍然享受 Kubernetes 服务自动发现和 Pod IP 动态注册的便利。这种混合管理模式为企业在 Kubernetes 上运行关键业务提供了更大的灵活性和控制力。

aws-load-balancer-controller A Kubernetes controller for Elastic Load Balancers aws-load-balancer-controller 项目地址: https://gitcode.com/gh_mirrors/aw/aws-load-balancer-controller

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范芬蓓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值