关于在AWS EKS集群中使用独立创建的Network Load Balancer(NLB)的可行性及配置方法咨询
当然可以!你完全可以在EKS集群中使用自行创建的NLB,不用依赖AWS EKS注解自动生成的负载均衡器。我先给你讲清楚具体配置步骤,再针对你遇到的TargetGroupBinding健康检查失败问题,梳理排查思路。
肯定支持。AWS允许将手动创建的NLB与EKS集群中的Pod或Service关联,而你提到的TargetGroupBinding正是AWS官方推荐的开源CRD(自定义资源类型),用来实现Kubernetes与AWS NLB目标组的联动,让集群自动管理Pod在目标组中的注册和注销。
1. 部署TargetGroupBinding CRD
首先得把这个自定义资源类型安装到集群里,你可以通过AWS Load Balancer Controller的官方CRD定义来部署,执行类似命令:
kubectl apply -f <path-to-targetgroupbinding-crd.yaml>
注意要选用和你集群中AWS Load Balancer Controller版本匹配的CRD,避免版本不兼容。
2. 确认AWS Load Balancer Controller已正常运行
TargetGroupBinding需要依赖这个控制器来完成和AWS服务的交互,所以先检查控制器状态:
kubectl get deployment -n kube-system aws-load-balancer-controller
如果还没部署控制器,得先完成安装和IAM权限配置。
3. 创建TargetGroupBinding资源
编写一个YAML配置文件,关联你的自定义NLB目标组和集群内的Service,示例如下:
apiVersion: elbv2.k8s.aws/v1beta1 kind: TargetGroupBinding metadata: name: my-custom-nlb-tgb namespace: default # 要和你的Service所在namespace一致 spec: targetGroupARN: arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-manual-tg/abcdef123456 targetType: ip # 推荐用ip类型,直接绑定Pod IP,绕开NodePort限制 serviceRef: name: my-app-service # 你的应用Service名称 port: 80 # Service暴露的端口,要和目标组监听端口一致
把这个文件应用到集群:
kubectl apply -f tgb.yaml
4. 配置你的自定义NLB
确保你手动创建的NLB已经完成以下配置:
- NLB所在VPC和EKS集群VPC一致
- NLB的监听规则指向了上面配置的目标组
- 监听端口和目标组、Service的端口保持一致
- 安全组配置允许NLB与Pod之间的流量(比如允许目标组端口的入站流量到Pod所在安全组)
你提到配置了TargetGroupBinding但健康检查失败,我整理了几个常见排查方向:
目标组健康检查配置是否匹配应用
- 检查健康检查的路径、端口、协议是否和你的应用一致。比如你的应用在80端口的
/healthz路径返回200状态码,那目标组健康检查就得对应配置这个路径和端口,协议选HTTP。 - 确认健康检查的超时、间隔时间设置是否合理,避免因应用启动慢导致误判。
- 检查健康检查的路径、端口、协议是否和你的应用一致。比如你的应用在80端口的
网络可达性验证
- 在EKS集群所在VPC内找一台测试EC2实例,尝试访问Pod的IP和应用端口,看是否能正常返回健康检查响应。
- 检查Pod所在的安全组是否允许来自NLB目标组的健康检查流量(通常是NLB的节点IP段或者VPC CIDR范围)。
TargetGroupBinding配置检查
- 确认
targetType是否正确:如果用instance类型,你的Service必须是NodePort类型,且节点安全组允许NLB流量;如果用ip类型,要确保AWS Load Balancer Controller有权限将Pod IP注册到目标组。 - 核对
serviceRef的name和port是否正确,对应的Service是否正常运行,执行kubectl get endpoints <service-name>查看是否有正常的Pod IP列表。
- 确认
检查AWS Load Balancer Controller日志
控制器日志能帮你定位注册Pod到目标组时的错误,执行命令查看:kubectl logs -n kube-system deployment/aws-load-balancer-controller常见错误包括IAM权限不足、目标组ARN错误、Pod网络异常等。
IAM权限验证
确保AWS Load Balancer Controller的IAM角色拥有足够的权限操作目标组,至少需要以下权限:elasticloadbalancing:RegisterTargetselasticloadbalancing:DeregisterTargetselasticloadbalancing:DescribeTargetGroupselasticloadbalancing:DescribeTargetHealth
内容的提问来源于stack exchange,提问作者Unity

