<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kong on Leanku 的博客</title><link>https://www.leanku.com/tags/kong/</link><description>Recent content in Kong on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 01 Aug 2025 11:46:01 +0800</lastBuildDate><atom:link href="https://www.leanku.com/tags/kong/index.xml" rel="self" type="application/rss+xml"/><item><title>Kong+Konga+Consul</title><link>https://www.leanku.com/post/microservice/kong-konga-consul/</link><pubDate>Fri, 01 Aug 2025 11:46:01 +0800</pubDate><guid>https://www.leanku.com/post/microservice/kong-konga-consul/</guid><description>&lt;h1 id="kongkongaconsul-安装和使用"&gt;Kong+Konga+Consul 安装和使用&lt;/h1&gt;&#10;&lt;p&gt;此处使用Docker安装方式&lt;/p&gt;&#10;&lt;h2 id="一-安装kong"&gt;一、 安装Kong&lt;/h2&gt;&#10;&lt;p&gt;kong具体使用可参考另一篇文章：&lt;a href="./Kong%20API%E7%BD%91%E5%85%B3.md"&gt;Kong API网关&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;为了确保 Kong、Konga 和 Consul 能够通信，Kong 和 Konga 也需要加入到同一个网络。如果你尚未创建网络，或者希望使用新的网络，可以创建一个：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;docker network create kong-net&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="11-安装-postgresql-kong-的数据库"&gt;1.1 安装 PostgreSQL (Kong 的数据库)&lt;/h3&gt;&#10;&lt;p&gt;Kong 需要 PostgreSQL 来存储其配置数据&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;docker run -d --name kong-database &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; --network&lt;span class="o"&gt;=&lt;/span&gt;kong-net &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; -p 5432:5432 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; -e &lt;span class="s2"&gt;&amp;#34;POSTGRES_USER=kong&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; -e &lt;span class="s2"&gt;&amp;#34;POSTGRES_DB=kong&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; -e &lt;span class="s2"&gt;&amp;#34;POSTGRES_PASSWORD=kong&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; postgres:13&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&amp;ndash;network=kong-net: 确保数据库与 Kong、Consul 在同一网络。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;-e 环境变量：设置数据库的用户名、数据库名和密码。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;建议使用 PostgreSQL 9.6 或更高版本，这里使用了 13 版本。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="12-初始化-kong-数据库"&gt;1.2 初始化 Kong 数据库&lt;/h2&gt;&#10;&lt;p&gt;运行一个临时容器来执行数据库迁移：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;docker run --rm &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; --network&lt;span class="o"&gt;=&lt;/span&gt;kong-net &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; -e &lt;span class="s2"&gt;&amp;#34;KONG_DATABASE=postgres&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; -e &lt;span class="s2"&gt;&amp;#34;KONG_PG_HOST=kong-database&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; -e &lt;span class="s2"&gt;&amp;#34;KONG_PG_USER=kong&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; -e &lt;span class="s2"&gt;&amp;#34;KONG_PG_PASSWORD=kong&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; kong:3.6.1 kong migrations bootstrap&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;&lt;code&gt;--rm&lt;/code&gt;&lt;/strong&gt;: 容器退出后自动删除。&lt;/p&gt;</description></item><item><title>Kong API网关</title><link>https://www.leanku.com/post/microservice/kong-api%E7%BD%91%E5%85%B3/</link><pubDate>Tue, 01 Aug 2023 11:46:01 +0800</pubDate><guid>https://www.leanku.com/post/microservice/kong-api%E7%BD%91%E5%85%B3/</guid><description>&lt;h1 id="kong-api网关"&gt;Kong API网关&lt;/h1&gt;&#10;&lt;h2 id="api网关特点"&gt;API网关特点&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;集合多个API，统一API入口&lt;/li&gt;&#10;&lt;li&gt;避免内部信息泄露&lt;/li&gt;&#10;&lt;li&gt;提供安全认证&lt;/li&gt;&#10;&lt;li&gt;支持混合通讯协议&lt;/li&gt;&#10;&lt;li&gt;降低微服务复杂度&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;常用的API网关有：NGINX，Zuul，Kong&lt;/p&gt;&#10;&lt;h2 id="kong-介绍"&gt;Kong 介绍&lt;/h2&gt;&#10;&lt;p&gt;kong是微服务中的一个网关组件，具有高可用和可扩展性，能提供易于使用的restful api来操作和配置API管理系统，同时它也可以通过负载均衡的功能把请求均匀的分发到各个服务器上，应对大量的请求。基于Nginx和OpenResty，是一个具有分布式、高性能、高并发、可伸缩&amp;hellip;亚毫秒级延迟等特性和功能的微服务抽象层。&lt;/p&gt;&#10;&lt;h2 id="konga-是kong的ui界面"&gt;konga 是kong的UI界面&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;多用户管理&lt;/li&gt;&#10;&lt;li&gt;管理多个kong节点&lt;/li&gt;&#10;&lt;li&gt;使用快照备份，还原和迁移Kong节点&lt;/li&gt;&#10;&lt;li&gt;使用运行状态检查监控节点和API状态&lt;/li&gt;&#10;&lt;li&gt;数据库集成postgresSQL&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="kong-流程图"&gt;Kong 流程图&lt;/h2&gt;&#10;&lt;p&gt;&lt;img src="http://resources.leanku.com/kong.png" alt="Kong流程图"&gt;&lt;/p&gt;&#10;&lt;h2 id="kong-安装"&gt;Kong 安装&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://getkong.org/install/"&gt;Kong下载安装&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/pantsel/konga"&gt;Konga下载安装&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="api操作-文档地址"&gt;API操作 &lt;a href="https://docs.konghq.com/gateway/3.5.x/admin-api/"&gt;文档地址&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;示例:&lt;/p&gt;&#10;&lt;h3 id="负载均衡"&gt;负载均衡&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# 添加负载均衡&#10;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=demo-upstream&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/upstreams&amp;#39;&#10;&#10;#设置权重&#10;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;target=127.0.0.1:8000&amp;#34; \&#10; -d &amp;#34;weight=100&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/upstreams/demo-upstream/targets&amp;#39;&#10;&#10; curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;target=127.0.0.1:8080&amp;#34; \&#10; -d &amp;#34;weight=500&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/upstreams/demo-upstream/targets&amp;#39;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="添加service"&gt;添加Service&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# 添加负载均衡&#10;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=demo-service&amp;#34; \&#10; -d &amp;#34;host=demo-upstream&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/services&amp;#39;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="添加路由"&gt;添加路由&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# 添加负载均衡&#10;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=demo-service-route&amp;#34; \&#10; -d &amp;#34;paths[]=/abc&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/services/demo-service/routes&amp;#39;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="plugins-为路由添加basic-auth"&gt;Plugins 为路由添加basic-auth&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=basic-auth&amp;#34; \&#10; -d &amp;#34;config.hide_credentials=true&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/routes/demo-service-route/plugins&amp;#39;&#10;&#10;## 添加成功后需要添加CONSUMERS在Plugins添加basic auth&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="plugins-为services添加jwt"&gt;Plugins 为services添加jwt&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=jwt&amp;#34; \&#10; -d &amp;#34;config.hide_credentials=true&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/services/demo-service/plugins&amp;#39;&#10;&#10;## 添加成功后需要CONSUMERS配置jwt&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="plugins-为services添加oauth2"&gt;Plugins 为services添加oauth2&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=oauth2&amp;#34; \&#10; -d &amp;#34;config.enable_authorization_code=true&amp;#34; \&#10; -d &amp;#34;config.enable_client_credentials=true&amp;#34; \&#10; -d &amp;#34;config.token_expiration=7200&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/services/demo-service/plugins&amp;#39;&#10;&#10;## 添加成功后需要CONSUMERS在Plugins添加auth2&#10;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=test&amp;#34; \&#10; -d &amp;#34;config.client_id=true&amp;#34; \&#10; -d &amp;#34;config.client_secret=true&amp;#34; \&#10; -d &amp;#34;config.token_expiration=7200&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/consumers/test/oauth2&amp;#39;&#10;&#10; ## 替换下面的client_id和client_secret获取Token &#10; curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;grant_type=client_credentials&amp;#34; \&#10; -d &amp;#34;client_id=xxx&amp;#34; \&#10; -d &amp;#34;client_secret=xxx&amp;#34; \&#10; -d &amp;#34;config.token_expiration=7200&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8443/abc/oauth2/token&amp;#39;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="plugins-为services添加限流"&gt;Plugins 为services添加限流&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# 限制IP每分钟5次&#10;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=rate-limiting&amp;#34; \&#10; -d &amp;#34;config.minute=5&amp;#34; \&#10; -d &amp;#34;config.limit_by=ip&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/services/demo-service/plugins&amp;#39;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="plugins-为services添加黑白名单"&gt;Plugins 为services添加黑白名单&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# 限制127.0.0.1访问&#10;curl -i -X POST \&#10; -H &amp;#34;Content-Type:application/x-www-form-urlencoded&amp;#34; \&#10; -d &amp;#34;name=ip-restriction&amp;#34; \&#10; -d &amp;#34;config.deny=127.0.0.1&amp;#34; \&#10; &amp;#39;http://127.0.0.1:8001/services/demo-service/plugins&amp;#39;&#10;&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>