Skip to content

准入控制

动态配置

准入控制器支持通过Web API进行动态配置。

准入控制器

在每个服务上可以分别设置准入控制器来控制客户端接入。

gost -L http://:8080?admission=127.0.0.1,192.168.0.0/16,example.com

通过admission参数来指定客户端地址匹配规则列表,规则以逗号分割的IP,CIDR或域名,域名会被解析为IP。

services:
- name: service-0
  addr: ":8080"
  admission: admission-0
  handler:
    type: http
  listener:
    type: tcp
admissions:
- name: admission-0
  matchers:
  - 127.0.0.1
  - 192.168.0.0/16
  - example.com

服务中使用admission属性通过引用准入控制器名称(name)来使用指定的准入控制器。

黑名单与白名单

与分流器类似,准入控制器也可以设置黑名单或白名单模式,默认为黑名单模式。

gost -L http://:8080?admission=~127.0.0.1,192.168.0.0/16

通过在admission参数中增加~前缀将准入控制器设置为白名单模式。

services:
- name: service-0
  addr: ":8080"
  admission: admission-0
  handler:
    type: http
  listener:
    type: tcp
admissions:
- name: admission-0
  whitelist: true
  matchers:
  - 127.0.0.1
  - 192.168.0.0/16

admissions中通过设置whitelist属性为true来开启白名单模式。

控制器组

通过使用admissions属性来指定准入控制器列表来使用多个控制器,当任何一个控制器拒绝则代表请求拒绝。

services:
- name: service-0
  addr: ":8080"
  admissions: 
  - admission-0
  - admission-1
  handler:
    type: http
  listener:
    type: tcp
admissions:
- name: admission-0
  whitelist: true
  matchers:
  - 192.168.0.0/16
  - 127.0.0.1
- name: admission-1
  matchers:
  - 192.168.0.1

数据源

准入控制器可以配置多个数据源,目前支持的数据源有:内联,文件,redis,HTTP。

内联

内联数据源直接在配置文件中通过matchers参数设置数据。

admissions:
- name: admission-0
  matchers:
  - 127.0.0.1
  - 192.168.0.0/16
  - example.com

文件

指定外部文件作为数据源。通过file.path参数指定文件路径。

admissions:
- name: admission-0
  file:
    path: /path/to/file

文件格式为按行分割的地址列表,以#开始的部分为注释信息。

# ip or cidr

127.0.0.1
192.168.0.0/16
example.com

Redis

指定redis服务作为数据源,redis数据类型必须为集合(Set)类型。

admissions:
- name: admission-0
  redis:
    addr: 127.0.0.1:6379
    db: 1
    username: user
    password: 123456
    key: gost:admissions:admission-0
addr (string, required)
redis服务地址
db (int, default=0)
数据库名
username (string)
用户名
password (string)
密码
key (string, default=gost)
redis key

数据的每一项与文件数据源的格式类似:

> SMEMBERS gost:admissions:admission-0
1) "127.0.0.1"
2) "192.168.0.0/16"
3) "example.com"

HTTP

指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。

admissions:
- name: admission-0
  http:
    url: http://127.0.0.1:8000
    timeout: 10s
url (string, required)
请求的URL
timeout (duration, default=0)
请求超时时长

热加载

文件,redis,HTTP数据源支持热加载。通过设置reload参数开启热加载,reload参数指定同步数据源数据的周期。

admissions:
- name: admission-0
  reload: 10s
  file:
    path: /path/to/file
  redis:
    addr: 127.0.0.1:6379
    db: 1
    password: 123456
    key: gost:admissions:admission-0
  http:
    url: http://127.0.0.1:8000
    timeout: 10s

插件

准入控制器可以配置为使用外部插件服务,控制器会将请求转发给插件服务处理。当使用插件时其他参数无效。

admissions:
- name: admission-0
  plugin:
    type: grpc
    addr: 127.0.0.1:8000
    tls: 
      secure: false
      serverName: example.com
type (string, default=grpc)
插件类型:grpc, http
addr (string, required)
插件服务地址。
tls (object, default=null)
设置后将使用TLS加密传输,默认不使用TLS加密。

HTTP插件

admissions:
- name: admission-0
  plugin:
    type: http
    addr: http://127.0.0.1:8000/admission

请求示例

curl -XPOST http://127.0.0.1:8000/admission -d '{"addr": "example.com"}'
{"ok": true}

Comments