使用 Docker 的 Kong 微服务 API 网关
近年来,我们经常提到微服务,并尝试在公司中推广。要应用微服务,有很多主题可以用来管理我们的服务。它们包括身份验证、安全、日志记录、缓存系统、代理服务、响应速率限制、请求大小限制等等。对于这些插件,Mashape 发布了 Kong 微服务 API 网关。所有插件都已准备好支持这些插件。此外,您还可以根据自己的场景编写单独的插件。太棒了!
首先,让我们使用 Docker 安装 Kong 工作区。您的计算机必须已安装 Docker。另一方面,我将演示如何直接使用 Docker 安装 Kong。还有其他系统可以安装 Kong。
我们应该为 Kong 创建一个专用的 Docker 网络。我使用以下命令创建了一个网络。我定义了kong-net名称。
docker network create kong-net
要使用 Kong,我们需要一个数据库。为此,我使用了 Postgres。
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6
从现在开始,我可以拉取 Kong Docker 镜像了。该镜像将涉及kong-net网络和postgres数据库。
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations up
下一步是使用此命令运行我们的容器。相关端口已在本地计算机上开放。您可以看到它们如下所示。然后,我设置了日志文件来查看日志。
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
只要一切成功,您就可以使用此命令查看 Kong 结果。
curl -i http://localhost:8001/
服务
首先,我们需要学习服务。你可以把服务想象成我们的 API。每个服务对应一个 API。这样,我们就可以定义一个服务,由 Kong 来管理所有 API。好了,我将创建一个如下所示的服务。
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=mertblog-service' \
--data 'url=https://reqres.in/api/users?page=2'
在开始向服务发送请求之前,我们需要为其添加一个路由。路由指定请求到达 Kong 后如何发送到相应的服务。一个服务可以有多个路由。
curl -i -X POST \
--url http://localhost:8001/services/mertblog-service/routes \
--data 'hosts[]=mertblog.net'
从现在开始,Kong 可以正确地将请求转发到我们的服务。
插件
我们需要谈谈插件。插件是 Kong 的杰作。因为您可以根据自己的场景选择其中任何一个。因此,您选择的插件可以轻松适配您的项目。它们允许您轻松地为服务添加新功能或使其更易于管理。
我们开始做演示了。有很多身份验证插件。我更倾向于使用key-auth 插件。它最简单。你只需要在 header 中发送一个密钥即可。
要为我们在 Kong 中配置的服务配置 key-auth 插件,请发出以下 cURL 请求。
curl -i -X POST \
--url http://localhost:8001/services/mertblog-service/plugins/ \
--data 'name=key-auth'
之后,我检查了我们的端点,由于该插件的原因,我无法访问。状态为401 未授权,并显示一条消息。
消费者
我们学习了如何向 Kong 添加插件。接下来我们将学习如何将消费者添加到您的 Kong 实例。消费者与使用您服务的个人关联,可用于跟踪、访问管理等。
要创建名为Mert 的用户,请执行以下请求。
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=Mert"
太棒了!我们找到了一个需要的消费者。现在,我们应该为消费者 Mert 创建一个密钥。
curl -i -X POST \
--url http://localhost:8001/consumers/Mert/key-auth/ \
--data 'key=this_is_mert_secret_key'
现在,我们可以检查我们的服务了。如您所见,我添加了apiKey参数及其值。太棒了,我可以访问它了。
结论
在本文中,我们学习了添加服务、路由、消费者以及启用插件的基础知识。然而,Kong 还有更多功能等待我们探索,如果需要,我们也可以开发自己的插件。
文章来源:https://dev.to/_mertsimsek/kong-microservices-api-gateway-with-docker-12g5