跳到主要内容

Webhooks

Webhooks 将 KubeVision 中的资源变更事件实时推送至外部服务。可用于向聊天平台发送告警、触发 CI/CD 流水线,或将数据接入可观测性工具。

支持的平台

平台类型备注
SlackIncoming WebhookBlock Kit 消息格式
DiscordIncoming WebhookEmbed 格式
DingTalk机器人 WebhookMarkdown 卡片格式
Feishu (Lark)机器人 Webhook互动卡片格式
WeCom (WeChat Work)机器人 WebhookMarkdown 消息格式
自定义 HTTPPOST 端点原始 JSON 载荷,HMAC 签名

创建 Webhook

  1. 进入 Settings → Webhooks
  2. 点击 New Webhook
  3. 选择平台并粘贴 Webhook URL
  4. 配置事件筛选条件(见下文)
  5. 点击 Save,然后使用 Test 验证是否能成功送达

事件筛选

通过缩小触发条件来减少无效通知:

筛选项可选值
事件类型createupdatedeletescale
集群一个或多个托管集群,或 * 表示全部
资源类型DeploymentPodServiceNode
命名空间特定命名空间或 *

事件须同时满足所有已启用的筛选条件才会被送达。

载荷格式(自定义 HTTP)

{
"event": "update",
"cluster": "prod-us",
"namespace": "team-alpha",
"resource": "Deployment",
"name": "api-server",
"actor": "alice",
"timestamp": "2026-03-05T10:23:00Z",
"detail": {
"field": "spec.replicas",
"old": 3,
"new": 5
}
}

HMAC-SHA256 签名

向自定义 HTTP 端点的每次投递都包含一个签名请求头,用于验证请求确实来自 KubeVision:

X-KubeVision-Signature: sha256=<hex digest>

Go 验证示例:

mac := hmac.New(sha256.New, []byte(webhookSecret))
mac.Write(body)
expected := "sha256=" + hex.EncodeToString(mac.Sum(nil))
if !hmac.Equal([]byte(expected), []byte(r.Header.Get("X-KubeVision-Signature"))) {
http.Error(w, "invalid signature", http.StatusUnauthorized)
}
提示

在接收端将 Webhook 密钥存储在环境变量或密钥管理服务中,切勿将其硬编码在源代码里。

API 参考

方法路径说明
GET/api/v1/webhooks列出所有 Webhooks
POST/api/v1/webhooks创建 Webhook
PUT/api/v1/webhooks/:id更新 Webhook
DELETE/api/v1/webhooks/:id删除 Webhook
POST/api/v1/webhooks/:id/test发送测试事件

投递保证

KubeVision 采用指数退避重试策略进行投递(最多重试 3 次,最大延迟 30 秒)。投递失败的记录连同 HTTP 状态码和响应正文会记录在界面中该 Webhook 的 Delivery History 标签页内。

注意

Webhooks 采用尽力投递机制。若接收端长时间不可用,耗尽重试次数的事件将永久丢失。如需保证投递,请改为通过审计日志导出来消费事件。

相关文档

  • 审计日志 — Webhooks 不足时的完整事件历史
  • RBAC — 仅 adminops 角色可管理 Webhooks