通过AScript实现深度定制ALB Ingress转发规则

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行,即在ConfigMapscriptContent部分的行数。超过免费额度的部分会被收费,具体计费规则可参考ALB计费规则

前提条件

操作步骤

ALB Ingress中使用AScript时,您需要在ConfigMap中指定AScript规则,然后在AlbConfig中关联ConfigMap。

ConfigMap中配置规则

  1. 复制以下内容并保存到ascript_configmap.yaml。

    下方展示了一个AScript脚本示例,适用于解决场景示例中企业遭遇的问题;如果hostexample.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":{}}')
          }
        }
  2. 执行下方命令,创建ConfigMap。

    kubectl apply -f ascript_configmap.yaml

AlbConfig中关联规则

  1. 执行下方命令,编辑AlbConfig。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替换AlbConfig的名称
  2. 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

结果验证

  1. 执行以下命令,HTTP response403 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

    image

  2. 通过应用型负载均衡ALB控制台,您可在ALB实例的监听中看到已启用的AScript规则。

    image

相关文档