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.