1. 简介
官网:https://docs.konghq.com/gateway/3.2.x/
2. 扩展知识
2.1 运行方式
2.2 konga
konga不是官方应用程序,并且和kong没有隶属关系。
官网:https://github.com/pantsel/konga
2.2.1 介绍
2.2.2 特征
2.3 kong插件
2.3.1 什么是插件
3. docker-compose部署kong和konga
3.1 准备yaml
[root@k8s-harbor01 docker-compose]# cat docker-compose.yaml
version: '3'
services:
kong-database:
image: postgres:9.6
restart: always #每次总是启动
networks:
- kong-net
environment:
postgres_user: kong
postgres_db: kong
postgres_password: kong
ports:
- "5432:5432"
#######################
# 执行数据库迁移
######################
kong-migration:
image: kong:2.5.1-centos
command: "kong migrations bootstrap"
networks:
- kong-net
restart: on-failure
environment:
- kong_database=postgres
- kong_pg_database=kong
- kong_pg_password=kong
- kong_pg_host=kong-database
links:
- kong-database #连接的是kong-database服务的
depends_on:
- kong-database #依赖于kong-database服务
#####################
# kong gateway
#####################
kong:
image: kong:2.5.1-centos
restart: always
networks:
- kong-net
environment:
kong_database: postgres
kong_pg_host: kong-database
kong_pg_password: kong
kong_proxy_listen: 0.0.0.0:8000
kong_proxy_listen_ssl: 0.0.0.0:8443
kong_admin_listen: 0.0.0.0:8001
depends_on:
- kong-migration
links:
- kong-database
healthcheck:
test: ["cmd", "curl", "-f", "http://kong:8001"]
interval: 5s
timeout: 2s
retries: 15
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"
#######################
#以下两个是konga gui
#######################
konga-prepare:
image: pantsel/konga:0.14.9
command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga" #注意是用户名:密码@数据库服务名称:端口
networks:
- kong-net
restart: on-failure
links:
- kong-database
depends_on:
- kong #依赖kong服务
- kong-database #依赖kong-database服务
konga:
image: pantsel/konga:0.14.9
restart: always
networks:
- kong-net
environment:
db_adapter: postgres
db_host: kong-database
db_user: kong
db_database: konga
db_password: kong #必须加上密码,不然会失败
depends_on:
- kong
- kong-database
ports:
- "1337:1337"
networks:
kong-net:
driver: bridge
3.2 部署
[root@k8s-harbor01 docker-compose]# docker-compose up -d
[root@k8s-harbor01 docker-compose]# docker-compose ps -a
name command state ports
------------------------------------------------------------------------------------------------------------------------------------------------
docker-compose_kong-database_1 docker-entrypoint.sh postgres up 0.0.0.0:5432->5432/tcp,:::5432->5432/tcp
docker-compose_kong-migration_1 /docker-entrypoint.sh kong ... exit 0
docker-compose_kong_1 /docker-entrypoint.sh kong ... up (healthy) 0.0.0.0:8000->8000/tcp,:::8000->8000/tcp,
0.0.0.0:8001->8001/tcp,:::8001->8001/tcp,
0.0.0.0:8443->8443/tcp,:::8443->8443/tcp, 8444/tcp
docker-compose_konga-prepare_1 /app/start.sh -c prepare - ... exit 0
docker-compose_konga_1 /app/start.sh up 0.0.0.0:1337->1337/tcp,:::1337->1337/tcp
3.3 访问并创建基本用户
3.4 konga连接kong配置
konga只是一个图形化界面,所以还需要配置链接到kong,才能进行数据展示和后续的相关操作
4. 常用配置介绍
我是把这个东西当成了一个nginx,方便理解
5. 配置实践:配置service和route让kong代理请求到后端服务
5.1 后端服务准备
这里我随便启动了2个nginx,页面不同,方便识别
[root@k8s-harbor01 docker-compose]# docker ps |egrep '8888|9999'
14ade1ab7e14 10.31.200.104/myserver/nginx "/docker-entrypoint.…" 40 hours ago up 40 hours 0.0.0.0:9999->80/tcp, :::9999->80/tcp xts-nginx-1
5bfd19e1bd28 10.31.200.104/myserver/nginx "/docker-entrypoint.…" 41 hours ago up 41 hours 0.0.0.0:8888->80/tcp, :::8888->80/tcp
5.2 配置service
相关配置介绍
属性 | 描述 |
---|---|
name(必填) | 服务名称 |
tags(可选) | 给服务添加标记 |
url(可选) | 将协议、主机、端口和路径立即设置成简短的属性,这个属性是只写的(admin api从来不“返回”url) |
protocol(必填) | 该协议用于与upstream通信。可以是http(默认)或https |
host(必填) | 后端服务的ip地址,或者upstream名称 |
port(必填) | 端口,对应上面的host |
path(可选) | 向host发起请求时使用请求的路径,默认为空 |
retries(可选) | 在代理失败的情况下,执行的重试次数,默认为5 |
connect_timeout(可选) | 与上游服务器(host)建立连接的超时(以毫秒为单位)。默认为60000(1分钟)。 |
write_timeout(可选) | 两个连续写操作之间的超时(以毫秒为单位),用于向上游服务器(host)发送请求。默认为60000 |
read_timeout(可选) | 两个连续读操作之间的超时(以毫秒为单位),用于向上游服务器(host)发送请求。默认为60000 |
client_certificate(可选) | 与上游服务器(host)进行tls握手时用作客户端证书的证书(id)。 |
5.3 配置路由
5.3.1 配置路由
5.3.2 路由配置参数说明
属性 | 描述 |
---|---|
name(可选) | 定义名称 |
tags(可选) | 向路由添加标签 |
host(半可选) | 匹配此路由的域名列表。例如:example.com。必须设置主机、路径或方法中的至少一个。 |
paths(半可选) | 匹配此路由的路径列表。例如:/my-path。必须设置主机、路径或方法中的至少一个。 |
headers(半可选) | 一个或多个由报头名称索引的值列表,如果在请求中存在,将导致此路由匹配。host头不能与此属性一起使用:hosts应该使用hosts属性指定。 字段值格式示例:x-some-header:foo,bar |
https redirect status code(可选) | 当route的所有属性都匹配,除了协议,即如果请求的协议是http而不是https时,kong响应的状态码。如果字段设置为301、302、307或308,kong将注入位置标头。默认为426。 |
regex priority(可选) | 当多个路由同时使用正则表达式匹配时,用于选择哪条路由解析给定请求的一个数字。当两个路由匹配路径并且具有相同的regex_priority时,将使用较旧的路由(最低的created_at)。注意,非正则表达式路由的优先级是不同的(较长的非正则表达式路由在较短的路由之前被匹配)。默认为0。 |
methods(半可选) | 匹配此路由的http方法列表。必须设置主机、路径或方法中的至少一个。如get、post |
strip path(可选) | 当通过其中一个路径匹配route时,从上游请求url中去掉匹配的前缀。(默认开启) |
preserve host(可选) | 当通过其中一个主机域名匹配路由时,在上游请求头中使用请求主机头。默认设置为false,上游主机报头将是服务主机的报头 |
protocols(半可选) | 此路由应允许的协议列表。默认情况下,它是[“http”, “http”],这意味着路由接受两者。当设置为[" https "]时,响应http请求,请求升级到https。 |
snis(半可选) | 使用流路由时匹配此路由的sni列表。当使用tcp或tls协议时,必须设置snis、source或destination中的至少一个。 |
sources(半可选) | 使用流路由时匹配此路由的传入连接的ip源列表。每个条目都是一个带有字段“ip”(可选的cidr范围表示法)和/或“port”的对象。当使用tcp或tls协议时,必须设置snis、source或destination中的至少一个。 该字段需要ip:port格式的值。例:192.168.1.2:3000 |
destinations(半可选) | 使用流路由时匹配此路由的传入连接的ip目的地列表。每个条目都是一个带有字段“ip”(可选的cidr范围表示法)和/或“port”的对象。当使用tcp或tls协议时,必须设置snis、source或destination中的至少一个。 该字段需要ip:port格式的值。例:192.168.1.2:3000 |
5.3.3 怎么理解
上面的操作全部当成在改nginx配置就行
5.4 访问测试
6. 配置实践:配置upstream,让kong代理请求到后端服务器组
这里的配置都是建立在上面的配置基础上的
6.1 配置upstream
6.2 配置目标主机
6.3 配置service
6.4 访问测试
6.5 理解方式
7. 配置实践:配置插件key-auth向api添加密钥身份验证
这里的配置也是基于上面配置完成后的操作
7.1 添加一个key auth
7.2 创建consumers
7.3 访问测试
7.3.1 不加key访问
7.3.2 加key访问
8. 插件部分生效
官网接口文档:https://docs.konghq.com/gateway/latest/admin-api/#debug-routes/
8.1 创建一个新的service和route
8.2 配置upstream
8.3 修改services配置
8.4 获取service id
8.4.1 方式1:在konga图形化界面获取
8.4.2 方式2:通过kong的api获取
8.5 创建一个只对某个路由生效的auth key
8.5.1 创建指定service.id的auth key
konga不支持这中key的创建,所以必须通过kong api创建
8.6 访问测试
这个时候,再用之前的全局key就不行了
使用指定key访问
这里的value是通用的,所以不用重新设置
9. 特别鸣谢
https://blog.csdn.net/qq_20741133/article/details/118573978
https://zhuanlan.zhihu.com/p/109722276
发表评论