Feat: Add ai-geoip wasm plugin to search the client's geographic information depending on the client ip address (#1172)

Co-authored-by: Kent Dong <ch3cho@qq.com>
Co-authored-by: 澄潭 <zty98751@alibaba-inc.com>
This commit is contained in:
ran xuxin
2024-09-01 09:04:55 +08:00
committed by GitHub
parent d82c872c13
commit f26cde3b3b
11 changed files with 1708577 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
# 功能说明
`geo-ip`本插件实现了通过用户ip查询出地理位置信息然后通过请求属性和新添加的请求头把地理位置信息传递给后续插件。
# 配置字段
| 名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
| -------- | -------- | -------- | -------- | -------- |
| ip_protocol | string | 否 | ipv4 | 可选值1. ipv4只对ipv4用户请求查找地理位置信息传递给后续插件。而ipv6用户的请求会跳过该插件继续由后续插件处理。 2. ipv6(未来实现后)只对ipv6用户查找地理位置信息传递给后续插件。而ipv4用户的请求会跳过该插件继续由后续插件处理。目前是跳过插件请求由后续插件处理。
| ip_source_type | string | 否 | origin-source | 可选值1. 对端socket ip`origin-source`; 2. 通过header获取`header` |
| ip_header_name | string | 否 | x-forwarded-for | 当`ip_source_type``header`指定自定义IP来源头 |
# 配置示例
```yaml
ip_protocol: ipv4
ip_source_type: header
ip_header_name: X-Real-Ip
```
# 生成geoCidr.txt的说明
在generateCidr目录里包含的ip.merge.txt文件是github上ip2region项目的全世界的ip网段库。 ipRange2Cidr.go 是把ip网段转换成多个cidr的程序。转换出的cidr 和地理位置信息存在 /data/geoCidr.txt文件里。geo-ip插件会在Higress启动读配置阶段读取geoCidr.txt文件并且解析到radixtree数据结构的内存里以便以后查询用户ip对应的地理位置信息。转换程序运行命令如下
```bash
go run generateCidr/ipRange2Cidr.go
```
# property 的使用方式
在geo-ip插件里调用proxywasm.SetProperty() 分别把country、city、province、isp设置进请求属性里以便后续插件可以调用proxywasm.GetProperty()获取该请求的用户ip对应的地理信息。
# ip网段转换成cidr列表的单元测试
在 generateCidr 目录里的 ipRange2Cidr_test.go 是ip网段转换成cidr 列表的单元测试程序。在 generateCidr 目录里运行命令 go test 。通过的情况显示如下:
``bash
PASS
ok higress/plugins/wasm-go/extensions/geo-ip/generateCidr 0.018s
```