ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

在 Argo CD 中集成 Pushover 通知服务:配置 Secret、注册服务与订阅应用事件的完整指南

在 Argo CD 中集成 Pushover 通知服务:配置 Secret、注册服务与订阅应用事件的完整指南 在 Argo CD 中集成 Pushover 通知服务配置 Secret、注册服务与订阅应用事件的完整指南【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd本文围绕 Argo CD 通知系统Argo CD Notifications中的 Pushover 通知服务展开讲解如何通过argocd-notifications-cmConfigMap 注册 Pushover 服务、通过secret-nameSecret 存放 API Token并在 Application 资源上通过notifications.argoproj.io/subscribe.*注解订阅同步事件。读完本文后你将能够在自己的 Argo CD 集群中完成 Pushover 通知从创建应用到收到消息的全流程配置并理解其底层的敏感数据引用与订阅解析机制。一、背景Argo CD Notifications 与 Pushover 服务Argo CD 内置的通知控制器notification-controller会持续监控 Argo CD 应用的状态并通过触发器trigger 模板template 服务service三者协作的方式发送通知触发器决定何时发送例如on-sync-succeeded、on-sync-failed模板决定发什么内容**服务Service**决定通过什么渠道送达。Pushover 就是其中一种通知服务Service Type它基于 pushover.net 的推送 API把 Argo CD 应用事件实时推送到 iOS / Android / 桌面端的 Pushover 客户端。在仓库的 通知服务总览 中Pushover 与 Slack、Email、Telegram、Webhook 等并列作为受支持的官方服务类型。服务的统一配置入口是argocd-notifications-cmConfigMap使用service.type.(custom-name)格式的键声明涉及认证的敏感数据如 API Token则统一存放到 Kubernetes Secret 中配置里用$secret-key占位符引用。Pushover 服务的完整配置正是这一机制的典型示例。二、前置条件开始配置前请确认集群中已安装 Argo CD且通知控制器argocd-notifications-controller正常运行已在 pushover.net 注册账号Pushover 提供 30 天免费试用期之后需要一次性付费购买拥有对argocd命名空间或你的 Argo CD 所在命名空间下 ConfigMap 与 Secret 的读写权限手机或桌面端已安装 Pushover 客户端并准备好你的User Key在 pushover.net 控制台可查看形如uumy8u4owy7bgkapp6mc5mvhfsvpcd。三、配置 Pushover 通知服务的完整步骤原文档给出了四个核心步骤创建应用 → 存储 API Key → 在 ConfigMap 中注册服务 → 在 Application 上订阅。下面逐一展开。步骤 1在 pushover.net 创建应用以获取 API Token访问 pushover.net 的应用创建页面Applications → Create an Application填写应用名称如Argo CD、描述与用途后提交。创建完成后你会得到一个API Token/Key形如avtc41pn13asmra6zaiyf7dh6cgx97。说明Pushover 的 API Token 标识哪个应用在发消息而 User Key 标识发给哪个用户。两者是独立的都不可泄露本文后续配置中 API Token 存放于 SecretUser Key 则作为订阅注解中的接收者值。步骤 2将 API Token 存入 Kubernetes Secret官方推荐将敏感数据存放到 Secret 中而不是直接明文写在 ConfigMap 里。以下 Secret 使用了stringData值按明文书写创建时自动 base64 编码apiVersion: v1 kind: Secret metadata: name: secret-name stringData: pushover-token: avtc41pn13asmra6zaiyf7dh6cgx97 type: Opaque其中secret-name是 Secret 的名称需要与步骤 3 中 ConfigMap 里的引用一致默认通知安装方式下通常直接使用argocd-notifications-secret这也是仓库中 argocd-notifications-secret.yaml 使用的标准名称pushover-token是 Secret 内的 key步骤 3 中通过$pushover-token引用type: Opaque为通用类型可省略时使用默认值。也可以使用命令行创建kubectl apply -n argocd -f - EOF apiVersion: v1 kind: Secret metadata: name: argocd-notifications-secret stringData: pushover-token: avtc41pn13asmra6zaiyf7dh6cgx97 type: Opaque EOF步骤 3在argocd-notifications-cmConfigMap 中注册 Pushover 服务编辑argocd-notifications-cmConfigMap在data下新增service.pushover键apiVersion: v1 kind: ConfigMap metadata: name: argocd-notifications-cm data: service.pushover: | token: $pushover-token这里service.pushover的含义是service固定前缀 服务类型pushover无自定义名名称默认为pushover。token: $pushover-token中的$pushover-token引用的是步骤 2 创建的 Secret 中pushover-tokenkey 的值。注意ConfigMap 的data值是一段 YAML 文本块标量|token是 Pushover 服务必需的配置项缺少它服务将无法完成认证与消息推送。步骤 4在 Application 资源上订阅通知为需要接收通知的 Application 添加订阅注解注解值填写接收者的User Key即 Pushover 用户 keyapiVersion: argoproj.io/v1alpha1 kind: Application metadata: annotations: notifications.argoproj.io/subscribe.on-sync-succeeded.pushover: uumy8u4owy7bgkapp6mc5mvhfsvpcd注解 key 的格式为notifications.argoproj.io/subscribe.trigger.servicevalue 是接收者列表可用;分隔多个接收者。本示例表示当该应用同步成功on-sync-succeeded时通过pushover服务向 User Key 为uumy8u4owy7bgkapp6mc5mvhfsvpcd的用户推送通知。也可用kubectl patch动态添加kubectl patch app my-app -n argocd -p \ {metadata: {annotations: {notifications.argoproj.io/subscribe.on-sync-succeeded.pushover: uumy8u4owy7bgkapp6mc5mvhfsvpcd}}} \ --type merge四、深入理解敏感数据引用与 Secret 机制Pushover 配置中token: $pushover-token的写法是 Argo CD 通知系统统一的敏感数据引用机制在 通知服务总览 中有明确说明所有认证类数据token、密码、webhook 签名等都应存入secret-nameSecret而非 ConfigMap服务配置中使用$secret-key格式引用例如$pushover-token会解析为 Secret 中pushover-tokenkey 的值通知控制器在启动/热加载时会读取 Secret 并与 ConfigMap 配置合并因此不要把 token 直接硬编码进 ConfigMap。这样的设计让同一份 ConfigMap 可以在不同环境复用敏感信息与可读配置彻底分离也便于通过 RBAC 单独控制 Secret 的访问权限。仓库中 argocd-notifications-cm.yaml 的注释同样印证了这一点Service definition might reference values from argocd-notifications-secret Secret using $my-key format。五、进阶自定义服务名与多实例配置若需要在同一集群中配置两套不同的 Pushover 服务例如不同团队、不同应用使用不同的 Pushover 应用/Token可以使用自定义服务名。配置键格式为service.type.custom-name订阅注解中的服务名也要随之替换# argocd-notifications-cm data: service.pushover.team-a: | token: $pushover-token-a service.pushover.team-b: | token: $pushover-token-b# Secret 中对应存放两个 key stringData: pushover-token-a: avtc41pn13asmra6zaiyf7dh6cgx97 pushover-token-b: another-token# Application 订阅时按自定义服务名区分 metadata: annotations: notifications.argoproj.io/subscribe.on-sync-failed.team-a: uumy8u4owy7bgkapp6mc5mvhfsvpcd notifications.argoproj.io/subscribe.on-sync-failed.team-b: user-key-b这一同类型多实例模式对 Slack、Email 等所有服务类型通用具体可参考 通知服务总览 中的 Custom Names 一节。六、订阅的另一种方式AppProject 与全局默认订阅除了在单个 Application 上添加注解订阅还可以落在两个更广的层级1. AppProject 级订阅——为该 Project 下所有应用统一订阅apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: annotations: notifications.argoproj.io/subscribe.on-sync-succeeded.pushover: uumy8u4owy7bgkapp6mc5mvhfsvpcd2. 全局默认订阅——在argocd-notifications-cm的subscriptions字段中配置对所有应用生效并可通过selector按标签筛选data: subscriptions: | - recipients: - pushover:uumy8u4owy7bgkapp6mc5mvhfsvpcd triggers: - on-sync-succeeded - recipients: - pushover:uumy8u4owy7bgkapp6mc5mvhfsvpcd selector: testtrue triggers: - on-sync-status-unknown其中recipients使用服务名:接收者的格式。关于注解结构与全局订阅的完整说明参见 订阅机制文档。七、常用触发器组合与通知场景Pushover 订阅注解中的trigger可以是通知目录catalog提供的任意触发器。仓库在 通知目录 与 notifications_catalog 中提供了大量内置触发器常见组合包括触发器触发条件订阅注解示例on-sync-succeeded应用同步成功notifications.argoproj.io/subscribe.on-sync-succeeded.pushoveron-sync-failed应用同步失败notifications.argoproj.io/subscribe.on-sync-failed.pushoveron-sync-status-unknown同步状态变为 Unknownnotifications.argoproj.io/subscribe.on-sync-status-unknown.pushoveron-health-degraded应用健康状态降级notifications.argoproj.io/subscribe.on-health-degraded.pushover消息的具体内容则由对应模板template控制例如 argocd-notifications-cm.yaml 中的示例模板可以引用{{.app.metadata.name}}、{{.app.status.sync.status}}、{{.context.argocdUrl}}等字段拼装正文。Pushover 客户端收到消息后标题与正文即来自该模板渲染结果。八、验证与常见问题排查完成上述配置后可通过以下方式验证确认 ConfigMap 与 Secret 就绪kubectl -n argocd get cm argocd-notifications-cm -o yaml kubectl -n argocd get secret argocd-notifications-secret -o yaml查看通知控制器日志触发一次应用同步观察argocd-notifications-controller的日志中是否有 Pushover 投递成功或失败记录kubectl -n argocd logs deploy/argocd-notifications-controller --tail100 | grep -i pushover常见问题收不到通知优先检查$pushover-token的 key 名是否与 Secret 完全一致区分大小写以及订阅注解中的 User Key 是否正确订阅无效确认注解 key 中服务名与 ConfigMap 的service.type.custom-name名称一致自定义名场景权限问题通知控制器读取 Secret 需要相应 RBAC 权限若控制器与应用不在同一命名空间需按 index.md 中的 Namespace based configuration 一节配置--application-namespaces与--self-service-notification-enabled。九、源码与依赖视角Pushover 通知的底层实现Pushover 通知并非由 Argo CD 主仓库直接实现而是依赖两个关键组件这一点可从仓库 go.mod 中确认github.com/argoproj/notifications-engine v0.5.1-...Argo CD 通知控制器的核心引擎负责触发器求值、模板渲染、订阅解析以及各通知服务Slack、Email、Pushover 等的注册与分发github.com/gregdel/pushover v1.3.1indirect 依赖Pushover 官方的 Go 客户端库通知引擎中的 Pushover 服务类型基于该库完成 REST API 调用、认证与消息推送。因此从源码结构可以推断service.pushover配置项中的token会被通知引擎解析为对 Pushover API 的认证凭证并在发送消息时连同订阅注解中的 User Key 一起传给 pushover.net$pushover-token这类占位符则在引擎读取argocd-notifications-secretSecret 后被替换为真实值。这也是为什么token必须与 Secret 中的 key 一一对应——任何一端改名都会导致认证失败。十、总结Pushover 通知服务的配置遵循 Argo CD 通知系统的通用范式仅需四步即可打通在 pushover.net 创建应用获取API Token将 Token 存入Secret如argocd-notifications-secret在argocd-notifications-cm中注册service.pushover并通过$pushover-token引用在Application / AppProject上添加notifications.argoproj.io/subscribe.trigger.pushover注解值为你的 User Key。在此基础上你还可以利用自定义服务名实现多实例、通过全局subscriptions实现集中订阅、通过通知目录的触发器组合覆盖同步失败、健康降级等多种场景。这套机制既保证了敏感信息与配置分离又让通知能力可以按应用、按项目、按团队灵活扩展是 Argo CD 实现应用事件实时触达的最佳实践之一。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表