全部产品
Search
文档中心

负载均衡:ALB Ingress功能操作指导

更新时间:Dec 06, 2024

ALB Ingress除了支持在容器服务ACK/ACK Serverless等Kubernetes产品中使用,还支持与企业级分布式应用服务EDAS(Enterprise Distributed Application Service)、Serverless应用引擎SAE(Serverless App Engine)、云上自建Kubernetes集群等相结合使用,以满足您多样化的业务需求。本文为您介绍ALB Ingress的基础功能、高级功能以及与其他产品集成使用的操作指导。

基础功能

AlbConfig是由ALB Ingress Controller提供的CRD资源,ALB Ingress Controller使用AlbConfig来配置ALB实例和监听。下表为您介绍如何在容器ACK系列产品中安装和卸载ALB Ingress Controller、如何创建与修改AlbConfig以及开启日志服务等操作。

对象

功能

描述

容器服务ACK文档链接

容器服务ACK Serverless文档链接

ALB Ingress Controller

ALB Ingress Controller组件管理

容器服务基于ALB提供了托管的ALB Ingress Controller。

您可以通过在创建集群时安装ALB Ingress Controller,也可以通过在组件管理页面安装ALB Ingress Controller。

管理ALB Ingress Controller组件

管理ALB Ingress Controller组件

实例管理

创建AlbConfig

AlbConfig是在ALB Ingress Controller提供的CRD资源,使用AlbConfig CRD来配置ALB实例和监听。

一个AlbConfig对应一个ALB实例,如果您需要使用多个ALB实例,可以通过创建多个AlbConfig实现。

创建AlbConfig

创建AlbConfig

关联Ingress

AlbConfig通过K8s中标准的IngressClass资源与Ingress进行关联。您需要先创建IngressClass,然后关联AlbConfig。

创建IngressClass并关联AlbConfig

使用IngressClass关联AlbConfig与Ingress

修改AlbConfig

您可以修改AlbConfig的属性,比如名称、vSwitch配置等。

配置完成保存后,新配置自动生效。

开启日志服务访问日志

当您需要ALB Ingress能够收集访问日志Access Log,您需要在AlbConfig中指定logProjectlogStore

说明
  • 当前Log Project需要您手动创建,不支持自动创建。创建Log Project的具体操作,请参见管理Project

  • logStore命名需要以alb_开头,若指定logStore不存在,系统则会自动创建。

开启日志服务访问日志

开启日志服务访问日志

复用已有ALB实例

当您需要复用已有ALB实例,您只需要在创建AlbConfig时指定ALB实例ID即可。

复用已有ALB实例

复用已有ALB实例

使用多个ALB实例

当您需要使用多个ALB实例时,您可以在Ingress中通过spec.ingressClassName指定不同的IngressClass即可。

创建并使用多个ALB实例

创建并使用多个ALB实例

删除ALB实例

一个ALB实例对应一个AlbConfig, 因此可以通过删除AlbConfig实现删除ALB实例,但前提是先需要删除AlbConfig关联的所有Ingress。

删除ALB实例

删除ALB实例

监听管理

指定HTTPS证书

通过ALBConfig可以指定ALB证书,您可以通过配置ALBConfig的listeners来指定HTTPS的证书ID。

配置HTTPS证书以实现加密通信

配置HTTPS证书以实现加密通信

支持TLS安全策略

当前ALBConfig配置HTTPS监听时,支持指定TLS安全策略。TLS安全策略包含自定义策略和系统默认策略,更多信息,请参见TLS安全策略

指定TLS安全策略

指定TLS安全策略

高级功能

在容器服务ACK集群中,ALB Ingress对集群服务(Service)中外部可访问的API对象进行管理,提供七层负载均衡能力。下表为您介绍如何通过ALB Ingress将来自不同域名或URL路径的请求转发给不同的后端服务器组、将HTTP访问重定向至HTTPS、灰度发布等功能。

功能

描述

容器服务ACK文档链接

容器服务ACK Serverless文档链接

基于域名转发请求

创建一个简单的Ingress,根据指定的正常域名或空域名转发请求。

基于域名转发请求

基于域名转发请求

基于URL路径转发请求

ALB Ingress支持按照URL转发请求,可以通过pathType字段设置不同的URL匹配策略。pathType支持Exact、ImplementationSpecific和Prefix三种匹配方式。

基于URL路径转发请求

基于URL路径转发请求

自定义转发规则

ALB Ingress支持自定义转发规则。转发规则包含转发条件和转发动作。通过ALB Ingress您可以

  • 自定义转发条件,指定请求的域名、路径、请求头、查询字符串、请求方法、Cookie、源IP等,可以在alb.ingress.kubernetes.io/conditions.<Service的名称>注解中配置转发条件。

  • 自定义转发动作,配置固定响应、重定向、插入请求头、流量镜像、转发至后端多服务器组和重写等,可使用alb.ingress.kubernetes.io/actions.<服务名称>注解配置转发动作。

  • 通过ACK控制台自定义转发条件,指定请求的域名、路径、HTTP标头。

  • 通过ACK控制台自定义转发动作,配置转发至、返回固定响应。

重要
  • 单条转发规则的转发条件的条目上限为10个,一旦达到规定数量上限,您将无法再添加更多的条件。

  • 转发条件ResponseHeader和ResponseStatusCode仅在自定义响应方向转发规则中有效。

自定义ALB Ingress的转发规则

自定义ALB Ingress的转发规则

配置健康检查

ALB Ingress支持通过设置注解来配置健康检查,配置项包括path/protocol/method/httpcode/timeout/interval/threshold等。

配置健康检查

配置健康检查

配置自动发现HTTPS证书功能

ALB Ingress Controller提供证书自动发现功能。您需要首先在数字证书管理服务控制台创建证书,然后ALB Ingress Controller会根据Ingress中TLS配置的域名自动匹配发现证书。

配置HTTPS证书以实现加密通信

配置HTTPS证书以实现加密通信

配置HTTP重定向至HTTPS

ALB Ingress通过设置注解alb.ingress.kubernetes.io/ssl-redirect: "true",可以将HTTP请求重定向到HTTPS 443端口。

配置HTTP重定向至HTTPS

配置HTTP重定向至HTTPS

支持HTTPS和gRPC协议

当前ALB Ingress后端协议支持HTTPS和gRPC协议,通过ALB Ingress只需要在注解中配置alb.ingress.kubernetes.io/backend-protocol: "grpc"alb.ingress.kubernetes.io/backend-protocol: "https" 即可。使用Ingress转发gRPC服务需要对应域名拥有SSL证书,使用TLS协议进行通信。

说明

后端协议不支持修改,如果您需要变更协议,请删除重建Ingress。

支持后端HTTPS和gRPC协议

支持后端HTTPS和gRPC协议

支持Rewrite重写

当前ALB Ingress支持Rewrite重写,通过ALB Ingress只需要在注解中配置alb.ingress.kubernetes.io/rewrite-target: /path/${2} 即可。

说明
  • rewrite-target注解中,${number}类型的捕获组变量需要在路径为Prefix类型的path上配置。

  • path默认无法配置正则符号,例如*?等,您需要通过配置rewrite-target注解使用正则符号。

  • path必须以 / 开头。

支持Rewrite重写

支持Rewrite重写

配置自定义监听端口

支持Ingress配置自定义监听端口。通过该方式,可以将服务同时暴露80端口和443端口。

配置自定义监听端口

配置自定义监听端口

配置转发规则优先级

通过配置Ingress注解可以定义ALB Ingress转发规则优先级。

说明

同一个监听内规则优先级必须唯一。alb.ingress.kubernetes.io/order用于标识Ingress之间的优先级顺序,取值范围为1~1000,值越小表示优先级越高。

配置转发规则优先级

配置转发规则优先级

通过注解实现灰度发布

ALB Ingress提供复杂路由处理能力,支持基于Header、Cookie以及权重的灰度发布功能。灰度发布功能可以通过设置注解来实现。

为了启用灰度发布功能,需要设置注解alb.ingress.kubernetes.io/canary: "true",通过不同注解可以实现不同的灰度发布功能。

通过注解实现会话保持

ALB Ingress支持通过alb.ingress.kubernetes.io/sticky-sessionalb.ingress.kubernetes.io/sticky-session-type注解实现会话保持。

通过注解实现会话保持

通过注解实现会话保持

指定服务器组负载均衡算法

ALB Ingress支持通过设置Ingress注解alb.ingress.kubernetes.io/backend-scheduler指定服务器组负载均衡算法。

指定服务器组负载均衡算法

指定服务器组负载均衡算法

跨域配置

ALB Ingress支持通过设置注解项配置跨域。

跨域配置

跨域配置

后端长链接

当使用短链接的方式访问后端服务器组时,每一条请求都需要经历TCP层面的建立连接和断开连接,使网络连接成为高性能系统的瓶颈。ALB支持开启后端长链接,能够极大的减少处理连接层面的资源消耗,从而大幅度提高处理性能。当前在ALB Ingress中可以通过注解alb.ingress.kubernetes.io/backend-keepalive开启后端长链接。

后端长链接

后端长链接

支持QPS限速

ALB本身支持转发规则的QPS限速功能,QPS限速值取值范围为1~100000。当前在ALB Ingress只需要设置alb.ingress.kubernetes.io/traffic-limit-qps注解即可。

支持QPS限速

支持QPS限速

后端慢启动

ALB Ingress支持通过alb.ingress.kubernetes.io/slow-start-enabled注解开启后端慢启动,通过alb.ingress.kubernetes.io/slow-start-duration注解设置慢启动完成流量逐步增加所花费的时间,取值范围为30-900秒(s)。

说明

时间越长,流量增加的速度越慢。

后端慢启动

后端慢启动

连接优雅中断

ALB Ingress支持通过alb.ingress.kubernetes.io/connection-drain-enabled注解开启连接优雅中断,通过alb.ingress.kubernetes.io/connection-drain-timeout注解设置优雅中断超时时间,取值范围为0-900秒(s)。

连接优雅中断

连接优雅中断

  • 支持K8s与ECS混合挂载

  • 支持通过云企业网转发路由器等产品的组合配置来挂载跨地域和线下IDC资源

  • ALB Ingress支持使用alb.ingress.kubernetes.io/actions.<服务名称>注解配置后端转发服务器组。后端转发服务器组支持通过服务名称或服务器组ID挂载,实现K8s集群内Pod和K8s集群外ECS实例混合挂载。

  • 通过ALB和云企业网CEN(Cloud Enterprise Network)、转发路由器等产品的组合配置,可以使ALB将请求转发至其他地域VPC内的服务器或者本地IDC服务器。

通过ALB Ingress实现混合挂载、跨地域挂载和本地IDC挂载

通过ALB Ingress实现混合挂载、跨地域挂载和本地IDC挂载

ALB Ingress生态集成

云产品集成

云产品

功能

描述

文档链接

WAF

为ALB Ingress开启WAF防护

Web应用防火墙WAF(Web Application Firewall)可以为网站或App提供一站式安全防护,防止数据泄密和恶意CC攻击,阻止木马上传和网页篡改,提供虚拟补丁。当ALB Ingress开启WAF防护后,ALB实例监听的端口流量将受到Web应用安全防护。

为ALB Ingress开启WAF防护

EDAS

创建应用路由(ALB Ingress)

EDAS支持ALB Ingress应用路由,ALB Ingress基于阿里云应用型负载均衡 ALB(Application Load Balancer)提供更有效的Ingress流量管理方式,同时兼容Nginx Ingress,具备处理复杂业务路由和证书自动发现的能力。

创建应用路由(ALB Ingress)

SAE

基于Ingress网关实现全链路灰度

您可以通过ALB Ingress网关,在不需要修改您的任何业务代码的情况下,为您的SAE应用实现全链路流量控制。

ASM

支持以Ingress方式与应用型负载均衡ALB集成。

阿里云服务网格(Alibaba Cloud Service Mesh,简称ASM)支持以Ingress方式与应用型负载均衡 ALB(Application Load Balancer)集成,满足ALB用户使用ASM的诉求。

ASM集成应用型负载均衡实例ALB

HPA

支持以Ingress方式与应用型负载均衡ALB集成。

容器水平伸缩(Horizontal Pod Autoscaler,简称 HPA)是 Kubernetes 中实现 Pod 水平自动伸缩的功能。HPA支持以Ingress方式与应用型负载均衡 ALB(Application Load Balancer)集成,实现基于QPS数据的应用弹性伸缩。

使用HPA基于QPS数据实现应用的弹性伸缩

Knative

支持在安装了Knative组件的ACK或ACK Serverless集群中,通过ALB来访问服务。

Knative是一款基于Kubernetes的Serverless框架。支持通过Knative的方式配置ALB服务发现,实现Header和Cookie灰度发布功能。

使用ALB网关

ACK One

支持以Ingress的方式创建应用型负载均衡ALB多集群网关

分布式云容器平台ACK One(Distributed Cloud Container Platform for Kubernetes)是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级云原生平台。ACK One ALB多集群网关是ALB Ingress的多集群模式,可以快速实现同城多活、异地多活容灾、流量多集群负载均衡、基于Header路由流量到指定集群等功能。

开源产品集成

开源产品

功能

描述

文档链接

云上自建K8s

支持在云上自建的Kubernetes集群中,通过Ingress方式使用ALB产品。

利用购置的ECS计算资源搭建的Kubernetes集群,可以通过Ingress的方式编排ALB路由,实现集群内服务的自动发现和负载均衡。

自建Kubernetes集群使用ALB Ingress最佳实践