ALB (Another Load Balancer)是一款由灵雀云倾力打造的云原生 Kubernetes 网关,近日,正式宣布将其在Github上开源。ALB 的诞生,旨在满足日益增长的云原生应用需求,为开发者提供更为强大和灵活的网关解决方案。
ALB 支持在一个集群内创建多个隔离的网关实例供不同租户使用,支持 Ingress、Gateway API、四层服务暴露和自定义流量规则 DSL,能够轻松应对各种复杂场景的流量调度需求。
ALB 是灵雀云在用户侧多年实践和经验积累的结晶。作为一家始终致力于云原生技术研究和应用的领先企业,灵雀云在网关领域积累了丰富的实践经验。ALB 的开源,不仅是对灵雀云多年研发成果的分享,更是对云原生社区的一份献礼。
目前,ALB项目代码已经在Github上开源,项目地址为:https://github.com/alauda/alb。欢迎更多的技术开发者和爱好者前去试用。
为什么又做一个网关?
面对社区中众多优秀的云原生开源网关项目,灵雀云为何决定再开发一个网关呢?这源于灵雀云对用户需求深入的理解和技术前瞻性的洞察。早在 2015 年,当 Kubernetes 社区主要对外暴露方式还是 NodePort,Ingress API 尚未成熟之际,灵雀云便基于 OpenResty 开始了自研网关的探索之路。历经多年的迭代和发展,ALB 已在数百个用户的生产环境中成功落地,并承载了大规模的业务流量。
为了满足更多社区用户对云原生网关的需求,并汲取社区用户的反馈与协助,灵雀云决定将 ALB 开源。我们坚信,开源的力量能够推动 ALB 不断进化,为云原生领域带来更多可能性。
ALB 有哪些独特的能力?
ALB 相比其他开源网关项目提供了以下独特的能力:
隔离和多租户
通过使用 ALB Operator,用户可以在一个集群内创建和管理多个 ALB 网关实例,每个租户和应用都可以使用一组独占的 ALB 网关实例,避免了流量的冲突和资源争抢。
Ingress 和 GatewayAPI 协议支持
ALB 同时支持了主流的 Ingress 标准,以及日趋流行的 Gateway API 标准,用户可以根据自己的需求进行选择,无需担心标准变化带来的影响。
强大的自定义规则
对于标准 Ingress 和 Gateway 不支持的复杂流量调度规则,ALB 提供了一组自定义的流量匹配 DSL,用户可以根据自己的需求来定义复杂的流量规则。
在灰度发布和 A/B test 的场景,我们需要将符合特征的流量导入到一个特定的服务实例。例如我们希望将 HTTP 流量路径前缀为/app-a
或者 /app-b
且 HTTP 方法为 POST
,且URL 参数包含group=vip
,且域名为*.app.com
,且 Header 中 location 为 east-1
或east-2
,且 Cookie 中包含 uid
,且源 IP 在 1.1.1.1-1.1.1.100
范围内的流量中 50% 比例采样发送给 hello-world,那么我们可以定义下面一个流量规则:
apiVersion: crd.alauda.io/v1
kind: Rule
metadata:labels:alb2.cpaas.io/frontend: alb-demo-00080 # required, indicate the Frontend to which this rule belongsalb2.cpaas.io/name: alb-demo # required, indicate the ALB to which this rule belongsname: alb-demo-00080-topunamespace: kube-system
spec:backendProtocol: "" # as same as Frontendcertificate_name: "" # as same as Frontenddslx: # this rule matches url starts with /app-a or /app-b and method is post,and url param's group is vip, and host is *.app.com, and header's location is east-1 or east-2 and has a cookie name is uid, and source IPs come from 1.1.1.1-1.1.1.100- type: METHODvalues:- - EQ- POST- type: URLvalues:- - STARTS_WITH- /app-a- - STARTS_WITH- /app-b- type: PARAMkey: groupvalues:- - EQ- vip- type: HOST values:- - ENDS_WITH- .app.com- type: HEADERkey: LOCATION values:- - IN- east-1- east-2- type: COOKIEkey: uidvalues:- - EXIST - type: SRC_IPvalues:- - RANGE- "1.1.1.1"- "1.1.1.100"enableCORS: falsepriority: 5 # the lower the number, the higher the priorityserviceGroup:services:- name: hello-worldnamespace: defaultport: 80weight: 50
ALB 经过数年的实践与迭代,已在众多用户的生产环境中得到广泛应用。随着云原生技术的迅猛发展,ALB 的应用前景必定更加广阔。
未来,我们将持续优化 ALB 的性能和稳定性,以满足更高的业务需求。同时进一步丰富其功能特性,以适应业务的多样性。我们计划在未来的版本中增加更多的流量调度策略,满足更复杂的业务场景。
此外,我们将积极参与到社区,借助社区的力量推动 ALB 的发展,并诚邀更多的用户和开发者加入我们的行列,共同推进云原生技术的发展与创新。