认识
官网:https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/
文档:https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html
项目:https://github.com/kubernetes-sigs/aws-load-balancer-controller
A Kubernetes controller for Elastic Load Balancers. This project was formerly known as “AWS ALB Ingress Controller“, we rebranded it to be “AWS Load Balancer Controller“. 简而言之,其为 EKS 集群的组件,负责处理 Ingress、Service 资源。
组成
WIP
构建
通过 Helm 安装:https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html
性质
可以直接把 Ingress 发布为 ALB,可以一个 ALB 关联多个 Ingress,跨 namespace 都行
里面有两种分配模式,一种是静态的,就是先创建 ALB,然后 SREVICE 去映射这个 ALB; 另一种是动态的,就是每个 SERVICE 创建的时候自动拉起一个 ALB;具体哪种模式看您们的业务需求,通常建议静态的。
https://github.com/kubernetes-sigs/aws-load-balancer-controller
配置了 aws-load-balancer-controller,然后 LoadBalancer 类型是直接使用 AWS 的 NLB,如果是 Ingress 就是 ALB,都要配置很多的 annotation
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.8/how-it-works/
https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html
Ingress Annotations
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.9/guide/ingress/annotations/
需要说明的是,这些注解仅适用于 AWS Load Balancer Controller 组件。
配置 SSL 证书 | https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/ingress/annotations/#ssl
- alb.ingress.kubernetes.io/certificate-arn: 需要填写 Certificate Manager 中创建的证书的 ARN 值;
apiVersion: extensions/v1beta1 kind: Ingress metadata: namespace: default name: ingress annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxx:certificate/xxxxxx alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' spec: rules: - http: paths: - path: /* backend: serviceName: ssl-redirect servicePort: use-annotation - path: /users/* backend: serviceName: user-service servicePort: 80 - path: /* backend: serviceName: default-service servicePort: 80
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v1.1/guide/tasks/ssl_redirect/
应用
多个 Ingress 共享 LB 实例
Configuring a Shared ALB in Amazon EKS Across Multiple Namespaces:
参考 IngressGroup 文档
alb.ingress.kubernetes.io/group.name
alb.ingress.kubernetes.io/group.order
注意,通过上述注解,能够在多个 Ingress 间共享 LB 实例。
多个 Service 共享 LB 实例
service.beta.kubernetes.io/aws-load-balancer-name: “my-existing-elb” // 无效 05/19/2025 EKS 1.31 Classic
针对 Service 间共享 LB 实例:
- How to use single Network Load Balancer with multiple services running in different namespaces #2175
- TargetGroupBinding | https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.13/guide/targetgroupbinding/targetgroupbinding/
虽然能够实现,但是需要一些额外的配置工作。