当前位置: 代码网 > it编程>编程语言>Java > 云原生API网关-Kong部署与konga基本使用

云原生API网关-Kong部署与konga基本使用

2024年07月28日 Java 我要评论
Konga是一款基于Kong Admin API的GUI图形化管理界面。Kong Gateway 是一个 Lua 应用程序,旨在加载和执行 Lua 或 Go 模块,我们通常称之为插件。Kong 提供了一组与 Kong Gateway 捆绑在一起的标准 Lua 插件。您有权访问的插件集取决于您的安装:开源、企业或在 Kubernetes 上运行的这些 Kong Gateway 选项之一。自定义插件也可以由 Kong 社区开发,并由插件创建者支持和维护。

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com