API网关Kong学习笔记(二):Kong与Kubernetes集成的方法中介绍过Kong Ingress Controller定义的CustomResourceDefinitions
,那时候了解不多,没详细记录用法。把Kong Ingress Controller的代码读了以后,基本上摸清了它的工作过程,这里详细记录一下KongPlugin
、KongConsumer
、KongIngress
和KongCredential
的用法。
2019-05-06 16:28:56:kong 1.1.x有了一个重大变换,实现了db-less模式,可以不使用数据库了,见笔记二十六:查看全部笔记。
如果是刚开始学习kong,直接从1.x开始,0.x已经不再维护,0.15是0.x的最后一个版本。
前19篇笔记是刚开始接触kong时记录的,使用的版本是0.14.1,当时对kong一知半解,笔记比较杂乱。第二十篇开始是再次折腾时的笔记,使用的版本是1.0.3,笔记相对条理一些。
从0.x到1.x需要关注的变化有:
KongPlugin的格式如下:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: <object name>
namespace: <object namespace>
labels: global: "true" # optional, please note the quotes around true
consumerRef: <optional, name of an existing consumer> # optional
disabled: <boolean> # optional
config:
key: value
plugin: <name-of-plugin>
Kong实现了很多插件,每个插件的配置都不相同,这些不同的配置都体现在config
中。
rate-limiting
插件的一个实例可能是这个样子的:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: http-svc-consumer-ratelimiting
consumerRef: consumer-team-x
config:
hour: 1000
limit_by: ip
second: 100
plugin: rate-limiting
而ip-restriction
插件的一个实例可能是下面这个样子:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: echo-ip-restriction
namespace: demo-echo
disabled: false # optional
plugin: ip-restriction
config:
# whitelist: #用“,”间隔的一组IP或者CIDR,要么白名单、要么黑名单
blacklist: 192.168.33.12,172.16.129.1
它们的config
字段的结构是不同的,每个插件的config字段中可以有哪些配置,在每个插件插件的文档中可以找到:rate-limiting,ip-restriction。
KongIngress
中是一些增强配置
的,这一点要特别注意。kong ingress controller会将kubernetes中原生定义的ingress转换成kong中的配置,但是kong的配置是要多于标准ingress中的内容的,多出的这些配置在KongIngress中设置。
KongIngress的结构如下,由upstream
、proxy
和route
三部分组成:
apiVersion: configuration.konghq.com/v1
kind: KongIngress
metadata:
name: configuration-demo
upstream:
hash_on: none
hash_fallback: none
healthchecks:
active:
concurrency: 10
healthy:
http_statuses:
- 200
- 302
interval: 0
successes: 0
http_path: "/"
timeout: 1
unhealthy:
http_failures: 0
http_statuses:
- 429
interval: 0
tcp_failures: 0
timeouts: 0
passive:
healthy:
http_statuses:
- 200
successes: 0
unhealthy:
http_failures: 0
http_statuses:
- 429
- 503
tcp_failures: 0
timeouts: 0
slots: 10
proxy:
protocol: http
path: /
connect_timeout: 10000
retries: 10
read_timeout: 10000
write_timeout: 10000
route:
methods:
- POST
- GET
regex_priority: 0
strip_path: false
preserve_host: true
protocols:
- http
- https
upstream
中配置的负载均衡算法、健康检查方法等,proxy
中设置的kong与backend server通信的时超时时间、重试次数等,route
中设置的是路由匹配的协议、方法以及路由的优先级。