在ACK Serverless集群中,ALB Ingress对集群服务(Service)中外部可访问的API对象进行管理,提供七层负载均衡能力。本文介绍如何使用ALB Ingress将来自不同域名或URL路径的请求转发给不同的后端服务器组、将HTTP访问重定向至HTTPS及实现灰度发布等功能。
前提条件
已创建一个ACK Serverless集群,集群的VPC需要配置NAT网关,从而可以访问外网,下载容器镜像。具体操作,请参见容器服务 Serverless 版使用快速入门。
- 已通过Kubectl工具连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
已创建AlbConfig,具体操作,请参见创建AlbConfig。
基于域名转发请求
通过创建一个简单的Ingress,根据指定的正常域名或空域名转发请求,示例如下。
基于正常域名转发请求
以下 YAML 示例将路由路径配置为 /hello,访问 demo.domain.ingress.top/hello 时会转发到后端服务。
部署以下模板,分别创建Service、Deployment和Ingress,将访问请求通过Ingress的域名转发至Service。
执行以下命令,通过指定的正常域名访问服务。
替换ADDRESS为ALB实例对应的域名地址,可通过
kubectl get ing获取。curl -H "host: demo.domain.ingress.top" <ADDRESS>/hello预期输出:
{"hello":"coffee"}
基于空域名转发请求
以下 YAML 示例将域名配置为空,路由路径配置为 /hello,访问<ADDRESS>/hello时会转发到后端服务。
部署以下模板,创建Ingress。
执行以下命令,通过空域名访问服务。
替换ADDRESS为ALB实例对应的域名地址,可通过
kubectl get ing获取。curl <ADDRESS>/hello预期输出:
{"hello":"coffee"}
基于URL路径转发请求
ALB Ingress支持按照URL转发请求,可以通过匹配规则(pathType)字段设置不同的URL匹配策略。pathType支持以下三种匹配方式。
完整匹配(
Exact):完全匹配请求URL路径。默认(
ImplementationSpecific):由Ingress控制器实现的具体逻辑决定,在ALB Ingress Controller中为完整匹配(Exact)。若未指定path字段,ALB Ingress会默认使用/作为path。前缀匹配(
Prefix):匹配请求URL路径的前缀部分。
pathType设置为Exact或Prefix时,必须将path设置为非空的绝对路径。否则,Ingress资源将因校验失败而无法创建。URL匹配策略可能存在冲突的情况,此时将会按照转发规则优先级进行排序,然后再转发请求,详情请参见配置转发规则优先级。
简单路径(/、/foo、/foo/)
匹配方式
规则路径(路由规则)
请求路径(用户访问)
是否命中此规则
前缀匹配(Prefix)
/
/(匹配所有规则)
是
/foo
/foo
/foo/
是
/foo/
/foo
/foo/
是
/aaa
/ccc
否,未匹配前缀。
完整匹配(Exact)或默认(ImplementationSpecific)
/foo
/foo
是
/bar
否
/foo/
否
/foo/
/foo
否
分层路径(/aaa/bb、/aaa/bbb、/aaa/bbb/)
匹配方式
规则路径(路由规则)
请求路径(用户访问)
是否命中此规则
前缀匹配(Prefix)
/aaa/bb
/aaa/bbb
否
/aaa/bbb
/aaa/bbb
是
/aaa/bbb/
/aaa/bbb
是,忽略规则路径尾部斜线。
/aaa/bbb
/aaa/bbb/
是,匹配请求路径尾部斜线。
/aaa/bbb/ccc
是,匹配请求路径的子路径。
同时设置两条规则路径
匹配方式
规则路径(路由规则)
请求路径(用户访问)
是否命中此规则
前缀匹配(Prefix)
/
/aaa
/aaa/ccc
是,请求路径匹配规则路径的
/前缀。/aaa
/
/aaa/ccc
是,请求路径匹配规则路径的
/aaa前缀。/ccc
是,请求路径匹配规则路径的
/前缀。/aaa
/bbb
/ccc
否,未匹配前缀。
三种匹配方式的示例如下:
前缀匹配(Prefix)
URL路径采用以/分隔的前缀匹配方式,匹配时区分大小写,并按路径中的每个元素逐级比较。
以下示例 YAML 中,当路由规则配置为/时,所有以/开头的路径(如/hello等)都能被匹配和访问。
部署以下模板,创建Ingress。
执行以下命令,访问服务。
替换ADDRESS为ALB实例对应的域名地址,可通过
kubectl get ing获取。curl <ADDRESS>/hello
预期输出:
{"hello":"coffee"}完整匹配(Exact)或默认(ImplementationSpecific)
在以下示例 YAML 中,路由规则配置为 /hello 时,仅能匹配并访问 /hello 路径。
部署以下模板,创建Ingress。
执行以下命令,访问服务。
替换ADDRESS为ALB实例对应的域名地址,可通过
kubectl get ing获取。curl <ADDRESS>/hello预期输出:
{"hello":"coffee"}
配置健康检查
ALB Ingress支持配置健康检查,可以通过设置以下注解来实现。
注解示例如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/healthcheck-enabled: "true"
alb.ingress.kubernetes.io/healthcheck-path: "/"
alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
alb.ingress.kubernetes.io/healthcheck-httpversion: "HTTP1.1"
alb.ingress.kubernetes.io/healthcheck-method: "HEAD"
alb.ingress.kubernetes.io/healthcheck-code: "http_2xx"
alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
alb.ingress.kubernetes.io/healthcheck-interval-seconds: "2"
alb.ingress.kubernetes.io/healthy-threshold-count: "3"
alb.ingress.kubernetes.io/unhealthy-threshold-count: "3"
spec:
... ...参数 | 描述 | 默认值 |
| 是否开启后端服务器组的健康检查。
|
|
| 健康检查路径。 |
|
| 健康检查使用的协议。
|
|
| HTTP协议版本,
|
|
| 健康检查的方法。
重要
|
|
| 健康检查状态码。仅当探测请求成功且返回指定状态码时,才认为该后端服务器状态正常。 可以填入以下选项中的任意一个或多个组合,多个状态码用英文半角逗号(,)分隔:
|
|
| 健康检查状态码,仅当探测请求成功且返回指定状态码时,才认为该后端服务器状态正常。与 可选参数依赖于
|
|
| 健康检查超时时间,单位秒(s)。取值范围:[1, 300]。 |
|
| 健康检查间隔周期,单位秒(s)。取值范围:[1, 50]。 |
|
| 健康检查成功多少次判定为成功。取值范围:[2, 10]。 |
|
| 健康检查失败多少次判定为失败。取值范围:[2, 10]。 |
|
| 健康检查使用的端口。 |
说明
|
配置HTTP重定向至HTTPS
ALB Ingress通过设置注解alb.ingress.kubernetes.io/ssl-redirect: "true",可以将HTTP请求重定向到HTTPS 443端口。
仅支持配置在监听端口为80的HTTP转发规则上。
仅支持与自定义转发动作:
RemoveHeader、InsertHeader、跨域Cors相关注解配合使用。配置此注解需要保证AlbConfig中已配置443端口的HTTPS监听,请参见通过AlbConfig配置ALB监听。
1.19及之后版本集群
apiVersion: v1
kind: Service
metadata:
name: demo-service-ssl
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo-ssl
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-ssl
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-ssl
template:
metadata:
labels:
app: demo-ssl
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo-ssl
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
namespace: default
spec:
ingressClassName: alb
tls:
- hosts:
- ssl.alb.ingress.top
rules:
- host: ssl.alb.ingress.top
http:
paths:
- backend:
service:
name: demo-service-ssl
port:
number: 80
path: /
pathType: Prefix1.19版本之前集群
apiVersion: v1
kind: Service
metadata:
name: demo-service-ssl
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo-ssl
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-ssl
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-ssl
template:
metadata:
labels:
app: demo-ssl
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo-ssl
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
namespace: default
spec:
ingressClassName: alb
tls:
- hosts:
- ssl.alb.ingress.top
rules:
- host: ssl.alb.ingress.top
http:
paths:
- backend:
serviceName: demo-service-ssl
servicePort: 80
path: /
pathType: Prefix支持后端HTTPS和gRPC协议
当前 ALB 支持 HTTPS 和 gRPC 作为后端协议,您只需在 Ingress 中添加以下注解。
Ingress创建后,后端协议不支持修改,如果您需要变更协议,请删除重建Ingress。
参数 | 描述 | YAML示例 |
|
| |
配置正则表达式
使用注解alb.ingress.kubernetes.io/use-regex:"true"启用正则模式,并在自定义转发条件或转发动作中配置相应的正则表达式。
注解仅在pathType: Prefix的路径规则下生效。
参数 | 描述 | |
| 启用正则表达式。 | |
| 配置自定义转发条件。更多详情请参见转发条件介绍。
|
正则匹配规则说明:
匹配对象 | 前缀 | 规则示例 | 客户端路径 | 是否命中 | 说明 |
域名 | 以 |
| test.EXAMPLE.com | 是 | 域名支持不区分大小写正则匹配。 |
路径 | 以 |
| /API | 是 | 路径支持不区分大小写正则匹配。 |
以 |
| /Api | 否 | 路径支持区分大小写正则匹配。 |
配置重写
ALB Ingress支持重写(Rewrite)功能,在接收到客户端请求后,修改请求中的Path部分,再发送给后端Service。重写通过以下两个Annotation实现:
alb.ingress.kubernetes.io/rewrite-target: /<path>/${number}:启用重写,并指定重写后的路径。重要使用
${number}格式表示从原路径中通过正则表达式获取的变量,可以配置为${1}、${2}、${3}中的一个或多个,最多可从原路径中获取三个变量。Ingress的
pathType需设置为Prefix
alb.ingress.kubernetes.io/use-regex:是否在path中使用正则表达式,配置rewrite-target后默认开启。"true":使用正则表达式。"false":不使用正则表达式。如果path中有特殊符号(“%#;!()[]^,”\"),Ingress资源会创建失败。
配置示例
示例场景一:移除前缀
下方的YAML示例中path: /something(/|$)(.*)通过正则表达式将客户端请求的路径分为了三个部分:
/something:匹配需要剥离的前缀。(/|$):第一捕获组,匹配/something后的/或$(路径结尾)。(.*):第二捕获组,匹配/something/后的全部内容,在重写后的路径中通过${2}使用。
alb.ingress.kubernetes.io/rewrite-target注解中配置的重写路径为/(路径标准前缀)+${2}(第二捕获组的内容),路径的重写效果如下:
客户端原始路径 | 是否匹配Path正则表达式 | 重写后路径 |
| 匹配,第二捕获组为空。 |
|
| 匹配,第二捕获组为空。 |
|
| 匹配,第二捕获组的内容为 |
|
| 不匹配,在本示例中未匹配到路由规则,ALB Ingress返回503状态码。 | |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # 允许path字段使用正则表达式。
alb.ingress.kubernetes.io/rewrite-target: /${2} # 该注解支持正则表达式替换。
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080示例场景二:捕获并重新排列多个部分
下方示例捕获路径/items/(.*)/(.*)/(.*)中的多个部分并进行重新排列,并且在用户无感的情况下更改了URL的格式(改为类POST形式)。重写路径为/(路径标准前缀)+${2}(第二捕获组的内容)+?code=+${3}(第三捕获组的内容),路径的重写效果如下:
示例中明确要求路径中有四个分段,使用这种方式要求客户端使用的路径为固定格式。
客户端原始路径 | 是否匹配Path正则表达式 | 重写后路径 |
| 匹配,第二捕获组的内容为 |
|
| 匹配,第二捕获组的内容为 |
|
| 不匹配,在本示例中未匹配到路由规则,ALB Ingress返回503状态码。 | |
| 不匹配,在本示例中未匹配到路由规则,ALB Ingress返回503状态码。 | |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # 允许path字段使用正则表达式。
alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3} # 该注解支持正则表达式替换。
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /items/(.*)/(.*)/(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080示例场景三:将多个路径重写到单一路径
下方示例通过同时对多个路径(/app-a(/|$)(.*)和/app-b(/|$)(.*))进行正则匹配,将多个路径重写到一个单一路径。重写路径为/app-c/+${2}(第二捕获组的内容),路径的重写效果如下:
客户端原始路径 | 是否匹配Path正则表达式 | 重写后路径 |
| 匹配,第二捕获组的内容为 |
|
| 匹配,第二捕获组的内容为 |
|
| 匹配,第二捕获组为空。 |
|
| 不匹配,在本示例中未匹配到路由规则,ALB Ingress返回503状态码。 | |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # 允许path字段使用正则表达式。
alb.ingress.kubernetes.io/rewrite-target: /app-c/${2} # 该注解支持正则表达式替换。
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /app-a(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
- path: /app-b(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080示例场景四:重写域名
alb.ingress.kubernetes.io/rewrite-target 注解仅支持更改路径,如需更改URL中的其他部分,例如域名与参数,请使用自定义转发规则。
验证重写规则匹配
使用sed命令可以提前测试客户端使用的特定路径是否匹配path中配置的正则表达式,并查看重写后的新路径。
以示例场景二:捕获并重新排列多个部分中的捕获路径/items/(.*)/(.*)/(.*)和重写规则/${2}?code=${3}为例:
将下方的示例命令保存到
path2.txt:/items/electronics/computers/554 /items/produce/fruits/12 /items/headphones/5 /drinks/41查看路径是否匹配,以及重写后的路径:
下方命令中对示例中的path正则表达式(
/items/(.*)/(.*)/(.*))和重写后的路径(/${2}?code=${3})进行了改写,在sed命令中特殊字符/前需要使用转义字符\,捕获组内容的写法由${2}改为\2。sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: [&] ---> Rewritten: [/\2?code=\3]#' path2.txt预期输出如下,前两条路径匹配重写规则,会被重写到新的路径;后两条路径不匹配,不会被重写。
Matched: [/items/electronics/computers/554] ---> Rewritten: [/computers?code=554] Matched: [/items/produce/fruits/12] ---> Rewritten: [/fruits?code=12] /items/headphones/5 /drinks/41
配置自定义监听端口
ALB Ingress 支持通过注解自定义监听端口,可实现服务同时暴露 80(HTTP)和 443(HTTPS)端口。
ALB不支持直接在Ingress中创建新的监听。为确保Ingress能够正常工作,您需要先在AlbConfig中创建所需的监听端口和协议,然后在Ingress中将这些监听与服务关联起来。关于如何创建ALB监听,请参见通过AlbConfig配置ALB监听。
参数 | 描述 | YAML示例 |
| 使服务同时监听 80 和 443 端口。 | |
配置转发规则优先级
默认情况下,ALB 转发规则的优先级排序依据如下:
不同Ingress按照
namespace/name的字典顺序优先级进行排列,字典顺序小的优先级高。先比较 namespace,若相同则再比 name,各字符逐一比较。
同一个Ingress按照
rule字段先后顺序进行排序,配置在上面的优先级高。rules: - host: www.example.com http: ... - host: www.test.com http: ...
若不修改Ingress的namespace/name字段,可以配置以下Ingress注解定义ALB转发规则优先级:
参数 | 描述 | 取值范围 | YAML示例 |
| 定义 ALB 转发规则的优先级,值越小优先级越高。 同一个监听内规则优先级必须唯一。 | [1,1000] 默认值:10 | |
通过注解实现灰度发布
ALB支持复杂路由处理,具备基于 Header、Cookie 及权重的灰度发布能力。可通过配置以下相关注解灵活实现各类灰度发布策略。关于灰度发布最佳实践,请参见通过ALB Ingress实现灰度发布。
参数 | 描述 | 说明 |
| 开启灰度发布能力 |
|
基于指定Header实现灰度流量分配
参数
描述
YAML示例
alb.ingress.kubernetes.io/canary-by-header该规则允许自定义请求的 Header 及其对应值,需同时配置两个注解。
当请求中的
header和header-value与设置的值匹配时,请求流量会被分配到灰度服务入口。其他不匹配的请求会根据灰度优先级分配到后续规则对应的灰度服务。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "1" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-by-header: "location" alb.ingress.kubernetes.io/canary-by-header-value: "hz" name: demo-canary spec: ... ...alb.ingress.kubernetes.io/canary-by-header-value当请求中的 Header 包含
location: hz时,流量将被路由到灰度服务;其余请求则会根据灰度权重策略分配到对应的灰度服务。配置示例如下。基于指定Cookie实现灰度流量分配
参数
Cookie取值
YAML示例
alb.ingress.kubernetes.io/canary-by-cookiealways:请求流量将全部分配到灰度服务入口never:请求流量不会分配到灰度服务入口
基于Cookie的灰度不支持设置自定义,只有
always和never。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "2" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-by-cookie: "demo" name: demo-canary-cookie ... ...请求头中有
Cookie: demo=always,则流量路由到灰度服务;如果请求头中有Cookie: demo=never,则流量不会路由到灰度服务。配置示例如下。按权重进行流量分配
参数
描述
YAML示例
alb.ingress.kubernetes.io/canary-weight设置请求到指定服务的百分比。取值范围:0~100的整数。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "3" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-weight: "50" name: demo-canary-weight配置灰度服务的权重为50%,示例如下:
通过注解实现会话保持
ALB Ingress支持通过以下注解实现会话保持。
注解示例如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-v3
annotations:
alb.ingress.kubernetes.io/sticky-session: "true"
alb.ingress.kubernetes.io/sticky-session-type: "Insert" # 支持自定义cookie时,植入cookie类型需为Server。
alb.ingress.kubernetes.io/cookie-timeout: "1800"
alb.ingress.kubernetes.io/cookie: "test"
spec:
... ...参数 | 描述 | 默认值 |
| 是否启用会话保持。
|
|
| Cookie的处理方式。
说明 当前服务器组 |
|
| Cookie 超时时间(单位:秒)取值:1~86400;
| 1000 |
| 自定义Cookie值。
| "" |
指定服务器组负载均衡算法
ALB Ingress 可通过以下注解指定服务器组的负载均衡算法,具体取值及说明见下表。
参数 | 取值 | 描述 | |
|
| 加权轮询,权重高的后端服务器被轮询到概率更高(默认值)。 | |
| 根据每台后端服务器设定的权重值和后端服务器的实际负载(即连接数)进行轮询。权重相同则优先选择连接数少的服务器。 | ||
| 源IP一致性Hash,基于客户端源IP请求做哈希分配,同一IP分配至同一后端服务器。 | ||
| URL参数一致性Hash。 通过注解 |
跨域配置
当前ALB Ingress支持跨域配置示例如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/enable-cors: "true"
alb.ingress.kubernetes.io/cors-expose-headers: ""
alb.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
alb.ingress.kubernetes.io/cors-allow-credentials: "true"
alb.ingress.kubernetes.io/cors-max-age: "600"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloud-nodeport
port:
number: 80参数 | 说明 |
| 允许通过浏览器访问的站点。使用半角逗号(,)分割。 值必须以http://或者https://开头,后跟一个正确域名,或者一级的泛域名。默认值: |
| 允许跨域方法,不区分大小写。跨域方法之间使用半角逗号(,)分割。 默认值: |
| 允许跨域传播的请求头,只能输入字母、数字、下划线(_)和短划线(-)。请求头之间使用半角逗号(,)分割。 默认值: |
| 允许暴露的Header列表,允许输入字母、数字、下划线(_)、短划线(-)和星号(*)。Header之间使用半角逗号(,)分割。 默认值: |
| 设置跨域访问时是否允许携带凭证信息。 默认值: |
| 对于非简单请求,设置OPTIONS预检请求在浏览器的最大缓存时间(秒),取值范围[-1, 172800]。 默认值: |
后端长链接
传统负载均衡采用短链接访问后端服务器组,每次请求都需建立和断开TCP连接,成为高性能系统的瓶颈。后端长链接支持极大减少了连接资源消耗,大幅提高处理性能。您可以在ALB Ingress中通过注解alb.ingress.kubernetes.io/backend-keepalive开启后端长链接。参考示例如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/backend-keepalive: "true"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloud-nodeport
port:
number: 80支持QPS限速
ALB本身支持转发规则的QPS限速功能,限速值要求在1~100000之间。当前在ALB Ingress只需要设置alb.ingress.kubernetes.io/traffic-limit-qps注解即可。参考示例如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/traffic-limit-qps: "50"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: ImplementationSpecific
backend:
service:
name: coffee-svc
port:
number: 80后端慢启动
在新增Pod加入Service后端后,如果ALB Ingress立即将流量分配至新增Pod,可能会导致瞬时的CPU或内存高压,导致访问异常。通过使用慢启动,ALB Ingress可以逐步将流量转移至新增Pod,缓解突发流量造成的影响。配置示例如下:
参数 | 说明 | YAML示例 |
| 是否启用慢启动功能,默认不开启。
| |
| 慢启动完成后,流量逐步增加的时间越长,流量提升的速度越慢。该参数以秒(s)为单位,取值范围为 [30, 900],默认值为 30 秒。 |
连接优雅中断
当Pod进入Terminating状态时,ALB Ingress会将其从后端服务器组中移除,ALB与该Pod已建立的连接不会立即中断,客户端访问时仍持续有请求转发至这些后端服务器,可能会导致Pod内的业务长期无法下线或出现请求错误。为了避免该问题,可以使用ALB的连接优雅中断功能,当Pod被移除或健康检查异常时,ALB Ingress会保持一定时间内的正常传输,并在到达中断时间后主动断开连接,保障业务平稳下线。更多详情,请参见通过ALB连接优雅中断实现业务平稳下线。
在连接优雅中断时间结束前,ALB Ingress无法保证Pod处于运行状态。请为Pod配置spec.terminationGracePeriodSeconds或使用preStop Hook,以控制Pod在Terminating状态中的可用性。
参数 | 描述 | YAML示例 |
| 是否开启连接优雅中断,默认不开启。
| |
| 优雅中断超时时间,单位为秒(s),取值范围为 [0, 900],默认值为 300 秒 |