What
Kong
是什么
一个网关,可以把它简单地看成是一个带管理界面的OpenResty
版
Why
为什么选择它
- 配置共享。所有的
Kong
实例可以使用同一份配置,这样你就不用一份文件到处复制,修改好几次。
UI
官方提供了Kong Manager
,可以直接使用Web
来添加管理配置文件
- 丰富的插件系统,官方提供许多丰富的插件,可以全局使用也可以指定服务使用。
- 虽然使用了数据库,但是会缓存当前配置,这样即使后端数据库挂了,当前也能正常运行,(曾经被这个坑坑死过,现在看到这个特性修复了,重新又入坑了)。
How
如何使用
Installation
避(官方)坑指南
因为默认的kong Manager
请求Kong Admin
的API
与它自身不在一个端口上,因此会导致跨域而无法正常显示。因此在它前面加一层代理来解决。
1
2
3
4
5
6
7
8
9
10
11
12
|
server {
listen 8001;
server_name _;
location /manager/ {
proxy_pass http://kong-gateway:8002/manager/;
}
location / {
proxy_pass http://kong-gateway:8001;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
version: '3'
networks:
kong-net:
driver: bridge
services:
kong-admin:
image: nginx:alpine
container_name: kong-admin
restart: always
ports:
- 8001:8001
environment:
- TZ=Asia/Shanghai
volumes:
- .app.conf:/etc/nginx/conf.d
networks:
- kong-net
kong-db:
image: postgres:13
container_name: kong-db
restart: always
privileged: true
ports:
- 5432:5432
restart: always # on-failure
volumes:
- ./db_data:/var/lib/postgresql/data
environment:
- TZ=Asia/Shanghai
- POSTGRES_USER=kong
- POSTGRES_DB=kong
- POSTGRES_PASSWORD=kongpass
networks:
- kong-net
kong-gateway:
image: kong/kong-gateway:3.6
container_name: kong
restart: always
privileged: true
ports:
- 8000:8000 #http
# - 8001:8001 #admin,Current the kong-manaer need a proxy.because it will directly access the admin api
- 8443:8443
- 8444:8444
- 8445:8445
# - 8002:8002 #manager use nginx proxy,so can't export the port
- 8003:8003
- 8004:8004
environment:
TZ: Asia/Shanghai
KONG_DATABASE: postgres
KONG_PG_HOST: kong-db
KONG_PG_USER: kong
KONG_PG_PASSWORD: kongpass
# 自定义日志格式,同样适用于Kong Ingress Controller
KONG_NGINX_HTTP_LOG_FORMAT: main '{"time":"$$time_iso8601", "request":"$$request", "status":$$status}'
KONG_PROXY_ACCESS_LOG: syslog:server=128.0.255.10:514 main
KONG_ADMIN_ACCESS_LOG: /dev/null
KONG_ADMIN_LISTEN: 0.0.0.0:8001
KONG_ADMIN_GUI_PATH: /manager
KONG_ADMIN_GUI_URL: http://0.0.0.0:8002/manager
networks:
- kong-net
db-init:
image: kong/kong-gateway:3.6
container_name: db-init
restart: on-failure
depends_on:
- kong-db
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=kong-db
- KONG_PG_USER=kong
- TZ=Asia/Shanghai
- KONG_PG_PASSWORD=kongpass
- KONG_PASSWORD=test
networks:
- kong-net
command:
kong migrations bootstrap && kong migrations finish
|
以上使用DB
模式,用于存储共享的配置信息
访问http://localhost:8001
进入Kong Manager
,注意,默认它没有验证
The Conception of Kong
关键概念
Tips
-
在添加过程中,从upstream
–>Gateway Service
—>Router
这样加,好理解
-
添加upstream
时,如果后端使用了虚拟主机,那么每个upstream
都要添加上对应的Host Header
,否则Kong
会404
。
-
在添加Gateway Service
时,有一栏Host
,这个是upstream
的名称,如你定义了一个upstream
名称为upstream-name
,那么这个Host
就填upstream-name
.