webhooks.app 的介绍

发布于:2022-10-14 ⋅ 阅读:(717) ⋅ 点赞:(0)

webhooks.app 的介绍

在这里插入图片描述

文章详细介绍 webhook 应用程序的用途:它的架构、如何在本地和 Kubernetes 集群上部署它,以及它所依赖的各种项目。

1. 简介

webhooks.app是一个遵循微服务架构的开源应用程序。它的目的是为演示提供一个 webhook 端点。在本系列文章中,我将介绍应用程序以及我使用(并将使用)使其在 Kubernetes 集群中的生产环境中运行的几个步骤。

2. 申请

webhooks.app是一个应用程序,其目的是提供永远在线的安全 webhook 端点(基本上是一个等待从 HTTP POST 请求接收 json 有效负载的服务器)。Webhook 是应用程序相互通信的一种方式,通常以 json 有效负载的形式交换信息。

让我们考虑以下示例:我们有一个Harbor容器注册表,并且希望每次将新图像推送到给定项目时都得到通知。Harbor 允许指定一个 webhook(url 和身份验证令牌),并且每次推送新图像时都会向该 webhook 发送一个 json 有效负载。

在这里插入图片描述
指定 webhook,以便每次将新图像推送到 api 项目时,Harbor 都会向该 webhook 发送有效负载

  • 许多其他注册表允许使用 webhook 与外部系统进行通信(您也可以使用 Docker Hub 存储库之一来使用它)
  • Harbor 还可以将有效负载发送到 webhook 端点以处理其他类型的事件(图像扫描的结果、超出配额……)

为了说明这一点,我们可以标记一个虚拟图像并将其发送到 Harbor 注册表:

$ docker login -u admin Harbor.techwhale.io 
$ docker image pull nginx:1.20 
$ docker image tag nginx:1.20 Harbor.techwhale.io/api/pong:2.0 
$ docker image pushharbor.techwhale.io/api/pong: 2.0

我们马上就可以在 webhooks.app 的仪表板中看到 Harbor 发送的负载内容:
webhook 端点接收到的 json 有效负载的内容
webhooks.app 仅允许您查看传入负载中的内容,并且不会以任何方式处理负载。这对于演示目的很有用,因此我们可以检查有效负载的内容,这可以是开发实际处理此有效负载的服务器之前的第一步。

4. 整体架构

该应用程序托管在 GitLab 的web-hook 组中。每个微服务都有自己的存储库:

  • web-hook:包含应用程序详细信息的元存储库,例如在本地运行它的方式以及您可以贡献的说明
  • www : 嗯……前端网络
  • api:操作数据并与底层数据库通信的微服务
  • ws : websocket 服务器,以确保每次应用程序接收到新的有效负载时实时更新前端

除了这些微服务之外,还使用了其他组件:

  • NATS 消息代理
  • MongoDB数据库
  • 应用前的 Traefik 反向代理

下面的架构说明了应用程序的架构:

在这里插入图片描述
基本上:

  • Traefik 将 api 和 web 前端暴露给外部世界
  • 每次将有效负载发送到 api 时,都会将其保存在数据库中并发布在 NATS 中的专用主题上
  • websocket 服务器收到来自 NATS 的消息并通过 websocket 将更新发送到浏览器

注意:架构中使用 NATS 来解耦 apiws 组件。它允许设置 Pub/Sub 系统,apiNATS 的发布者,而ws是NATS 的订阅者:api 发送的消息因此被 ws 接收。如果需要,以后可以轻松添加其他订阅者。

5. 每个微服务的简单 CI 设置

api、www和ws之间的每个存储库都包含一个 .gitlab-ci.yml 文件,该文件定义了在 git push 上触发的操作。例如,文件https://gitlab.com/web-hook/api/-/blob/main/.gitlab-ci.yml定义了api的 CI(持续集成)管道。当新代码被推送到 api 存储库的主分支时,会发生以下操作:

  • 创建一个新标签(遵循 SemVer 格式)
  • 使用此标记构建和标记新容器映像
  • 使用此标记更新配置存储库(在以下专门介绍 GitOps 方法的文章中详细介绍)

因此,CI 的主要结果是创建了一个新镜像,该镜像托管在微服务存储库的容器注册表中。

已经为 api 微服务构建的容器镜像的历史

6. Docker Compose 本地运行它

web-hook 存储库中,您可以找到在本地运行整个项目的所有说明。下面详细介绍如何使用 Docker Compose 在容器中运行应用程序。

首先将存储库克隆到一个新文件夹中。

mkdir webhooks && cd webhooks
for repo in www api ws web-hook; do
  git clone git@gitlab.com:web-hook/$repo.git
done

接下来使用 web-hook 存储库中的 docker-compose.yml 文件运行应用程序:

cd web-hook
docker compose up

几秒钟后,您可以访问将 Web 浏览器指向 localhost 的应用程序,然后单击底部的Get my webhook按钮获取您自己的 Webhook 端点。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

以上图片是访问应用程序并获取您自己的 webhook 端点(url 和身份验证令牌)

让我们跳到仪表板:

在这里插入图片描述
从那里你有一个 curl 示例命令,你可以使用它来立即从命令行发送有效负载:

$ curl -XPOST -H "Authorization: Bearer 7227a2c2ebdbc267438e7ece2bdd0a" http://localhost/data -d '{"ok": "hello"}' -H 'Content-Type: application/json'

仪表板将使用有效负载的内容实时更新:

在这里插入图片描述

翻译来源:

  • https://itnext.io/journey-of-a-microservice-application-in-the-kubernetes-world-bdfe795532ef
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到