ALB Ingress提供的基础转发规则适合处理静态条件路由,例如固定路径或基础请求头过滤。然而,当需要配置大量转发规则或业务逻辑复杂时,基础转发规则可能无法满足您的需求。在这些场景中,可编程脚本AScript可简化配置操作,并提供了动态逻辑处理能力,如正则匹配、加密计算以及内容改写等。您可通过本文了解在ALB Ingress中使用AScript的方法及示例。
场景示例
某企业在ACK中使用ALB Ingress对外提供服务,但是发现频繁遇到异常请求的问题。具体表现为大量的恶意请求和不明来源的流量对后端服务器造成了较大的负担,影响了正常业务的访问速度和用户体验。该企业选择利用ALB Ingress的能力来拦截异常请求,明确了以下需求:
当请求访问ALB Ingress时,检查请求中的以下信息:
客户端使用
example.com
域名访问ALB Ingress。URI以
/order/create
开头。HTTP请求头部的User-Agent中不包含
trusted
字符串。
如果以上条件均满足,ALB Ingress将设置状态码为403,并返回自定义响应消息The order data is abnormal
。否则将正常转发请求到后端服务。
尽管ALB的标准转发规则可以根据域名和路径进行请求的路由,但在进行这样更深层次的用户行为分析时,能力较为有限。而通过AScript就可以实现这样的需求,详细的实现方法请参见操作步骤。
功能计费
AScript默认免费额度为25行,即在ConfigMap中scriptContent
部分的行数。超过免费额度的部分会被收费,具体计费规则可参考ALB计费规则。
前提条件
已为集群安装ALB Ingress Controller组件,且组件版本为2.15.0或以上。具体操作,请参见管理ALB Ingress Controller组件。
说明若需要在ACK专有集群中通过ALB Ingress访问服务,在部署服务前需要为ALB Ingress Controller授权。具体操作,请参见为ACK专有集群授予ALB Ingress Controller访问权限。
已通过kubectl工具连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
已创建AlbConfig及IngressClass资源。具体操作,请参见创建ALB Ingress。
操作步骤
在ALB Ingress中使用AScript时,您需要在ConfigMap中指定AScript规则,然后在AlbConfig中关联ConfigMap。
在ConfigMap中配置规则
复制以下内容并保存到ascript_configmap.yaml。
下方展示了一个AScript脚本示例,适用于解决场景示例中企业遭遇的问题;如果
host
为example.com
,URL中包含/order/create
,且User_Agent
中不含trusted
时,返回403与自定义信息。本示例中的规则行数为5。AScript支持的更多语法和变量,请参见相关文档。
apiVersion: v1 kind: ConfigMap metadata: name: ascript-rule namespace: default data: scriptContent: | if and(eq($host,'example.com'),eq(get(split($request_uri, '?'),1),'/order/create')){ if not(match_re($http_user_agent,'.*trusted.*')){ exit(403,'{"code":10063,"msg":"The order data is abnormal","data":{}}') } }
执行下方命令,创建ConfigMap。
kubectl apply -f ascript_configmap.yaml
在AlbConfig中关联规则
执行下方命令,编辑AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替换AlbConfig的名称
在AlbConfig中添加
aScriptConfig
字段,关联AScript规则。保存并退出后,AScript规则即可生效。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: default spec: config: name: alb-test-1 addressType: Intranet listeners: - port: 80 protocol: HTTP aScriptConfig: # AScript配置 - aScriptName: ascript-rule # 使用的AScript名称 enabled: true # 是否启用该规则 position: RequestFoot # AScript规则执行位置,RequestFoot对应Ingress请求方向规则执行后执行AScript规则 configMapNamespace: default # AScript使用的ComfigMap所处的Namespace
说明关于AScript规则执行位置的更多信息,请参见可编程脚本AScript。
结果验证
执行以下命令,HTTP response为
403 Forbidden
,响应报文为{"code":10063,"msg":"The order data is abnormal","data":{}}
,表明添加AScript可编程脚本定义的转发规则已生效。curl -v -H "Host:example.com" -H "User-Agent:suspicious test" http://<访问地址>/order/create
通过应用型负载均衡ALB控制台,您可在ALB实例的监听中看到已启用的AScript规则。
相关文档
AScript的语法规则,请参见AScript语法规则。
AScript支持的内置函数和变量列表,请参见AScript内置变量表、AScript内置函数库。