使用 Helm 在 Kubernetes 上部署 Mercure Hub:完整配置与源码级解析
【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载Mercure 是一种允许服务器向浏览器及其他 HTTP 客户端实时推送数据更新的开放协议具有便捷、快速、可靠且低功耗battery-efficient的特点。本篇文章以 charts 仓库中 stable/mercure 官方 Helm Chart 为核心完整讲解如何在 Kubernetes 集群上通过 Helm 部署 Mercure Hub逐项解读 Chart 暴露的全部配置参数JWT 鉴权、传输层、超时、CORS、监控指标等并结合 Chart 的模板源码说明每个参数如何落地为容器的环境变量与 Secret帮助读者实现一套可复制、可调优的实时推送基础设施。Chart 概览与废弃状态说明在开始之前需要先明确该 Chart 的当前状态仓库归档charts 仓库自 2020 年 11 月 13 日起不再更新见根目录的 Repo Archive Noticehelm/charts 官方仓库整体进入废弃归档流程。Chart 废弃Chart.yaml 中deprecated: true明确指出该 Chart 已废弃且不再维护。版本信息Chart 版本4.0.3对应的应用版本appVersion: 0.10.0即 Mercure Hub 镜像版本Chart 关键字为mercure、hub、push、streaming-api、async-api。虽然 Chart 已废弃但其整体结构完整、配置参数丰富对于理解「如何将外部服务打包为 Kubernetes Helm Chart」以及「Mercure Hub 的部署与配置模型」仍有较高的参考价值。历史版本用户亦可据此进行升级与排障。前置条件根据 README.md部署本 Chart 需要满足Kubernetes 1.4且启用 Beta API早期版本需要extensions/v1beta1等 Beta API 支持Ingress 模板中通过semverCompare 1.14-0判断使用networking.k8s.io/v1beta1还是extensions/v1beta1见 ingress.yaml。PV provisioner 支持默认的 BoltDB 传输transport需要底层基础设施提供持久卷供给能力用于保存历史数据。安装与卸载 Chart快速安装使用默认配置安装release 名称由 Helm 自动生成$ helm install stable/mercure指定 release 名称为my-release$ helm install --name my-release stable/mercure该命令会以默认配置在集群中部署 Mercure Hub。可以使用helm list查看所有已安装的 release。卸载$ helm delete my-release该命令会移除与 Chart 关联的所有 Kubernetes 组件并删除该 release。核心配置参数详解README 提供了完整的可配置参数表这也是本 Chart 的核心内容。以下按「Hub 功能参数」「安全与鉴权」「传输与超时」「镜像与部署」几个维度逐项展开。Hub 核心功能参数参数说明默认值transportUrl历史数据库的 URL 表示形式对应 Mercure 官方文档中的 Bolt 适配器bolt://updates.db?size0cleanup_frequency0.3allowAnonymous设为true时允许没有有效 JWT 的订阅者连接falsesubscriptions设为true时暴露订阅 Web API并在 Hub 与订阅者之间建立或关闭订阅时派发私有更新falsemetrics设为true时启用/metricsHTTP 端点以 OpenMetricsPrometheus格式提供 Hub 监控指标falsemetricsLogin启用 metrics 后访问/metrics端点允许的用户的登录名mercuremetricsPassword启用 metrics 后访问/metrics端点允许的用户的密码随机字符串corsAllowedOrigins允许的 CORS 源列表可包含*表示允许所有[]publishAllowedOrigins允许发布publish的源列表仅在使用 cookie 鉴权时适用[]debug设为true启用调试模式打印恢复栈跟踪falsedemo设为true启用演示模式当debug为true时自动启用falselogFormat日志格式FLUENTD安全与 JWT 鉴权参数参数说明默认值jwtAlgorithm发布者和订阅者使用的 JWT 验证算法如HS256默认或RS512HS256jwtKey发布者和订阅者共用的 JWT 密钥随机字符串publisherJwtKey验证发布者 JWT 所需的密钥可省略以使用jwtKey空subscriberJwtKey验证订阅者 JWT 所需的密钥可省略以使用jwtKey空传输与超时参数参数说明默认值heartbeatInterval心跳间隔对某些代理和旧浏览器有用0sreadTimeout读取完整请求含 body的最大时长设为0s可禁用5swriteTimeout响应写入超时前的最大时长设为0s可禁用60sdispatchTimeout单次更新派发的最大时长设为0s可禁用5suseForwardedHeaders使用X-Forwarded-For、X-Real-IP获取客户端 IP用X-Forwarded-Proto或X-Forwarded-Scheme获取 scheme用X-Forwarded-Host获取 host以及 RFC 7239 的Forwarded头。启用后反向代理必须覆盖或移除这些头否则存在安全风险falsecompress设为false可禁用 HTTP 压缩支持truelicense使用的许可证仅对 HA 版本有用空镜像与部署参数参数说明默认值image.repository容器镜像仓库dunglas/mercureimage.tag容器镜像标签v0.3.2README /v0.10values.yaml 实际值image.pullPolicy镜像拉取策略IfNotPresentnameOverride名称覆盖空fullnameOverride完整名称覆盖空service.typeService 类型README 中为NodePortvalues.yaml 实际默认ClusterIPservice.portService 端口80ingress.enabled是否启用 Ingressfalseingress.annotationsIngress 注解{}ingress.hostsIngress 接受的 hostname[{ host: chart-example.local, paths: [] }]values.yaml 中为mercure.localingress.tlsIngress TLS 配置[]serviceAccount.create是否为应用创建专用 ServiceAccounttrueserviceAccount.name启用serviceAccount.create时的 ServiceAccount 名称否则随机生成nilpodSecurityContextPod 安全上下文{}securityContext容器安全上下文{}resources容器资源请求与限制{}nodeSelector节点标签选择器{}tolerationsPod 污点容忍{}注意README 中的参数表与 values.yaml 实际默认值存在少量差异如image.tag、service.type、ingress.hosts这是 README 未随版本同步所致。以 values.yaml 中的实际默认值为准。此外values.yaml 还包含两个 README 参数表之外的关键配置backendConfigenabled: falsetimeoutSec: 30。GCP 负载均衡器默认在连接 30 秒后终止连接可通过启用 backendConfig 并调整timeoutSec属性来解决对应 Mercure 项目 issue #106 的场景。replicaCount: 1如果使用 BoltDB 传输默认replicaCount 必须为 1因为 BoltDB 不支持多副本共享同一数据库文件。两种参数配置方式方式一--set命令行参数使用--set keyvalue[,keyvalue]为helm install指定参数。例如$ helm install --name my-release --set jwtKeyFooBar,corsAllowedOriginsexample.com stable/mercure上述命令将 JWT 密钥设置为FooBar并允许从example.com提供页面的客户端连接到 Hub。方式二-f指定 YAML 文件将配置写入 YAML 文件后通过-f参数传入$ helm install --name my-release -f values.yaml stable/mercure完整的默认配置可直接参考 values.yaml在此基础上进行覆盖即可。源码级解析配置参数如何注入容器仅了解参数含义是不够的还需要理解这些参数如何生效。本 Chart 通过ConfigMap Secret 环境变量三层机制完成配置下发。布尔与列表参数的编码方式configmap.yaml 将多数参数写入 ConfigMap布尔参数编码为1/0例如allowAnonymous、subscriptions、metrics、debug、demo、compress、useForwardedHeaders列表参数corsAllowedOrigins、publishAllowedOrigins通过join 以空格分隔拼成单个字符串logFormat会被upper转为大写各类超时参数heartbeatInterval、readTimeout、writeTimeout、dispatchTimeout以字符串形式原样保留。ConfigMap 还带有helm.sh/hook: pre-install,pre-upgrade与helm.sh/hook-delete-policy: before-hook-creation注解确保在安装/升级前创建并在下次 hook 执行前删除重建。敏感参数的 Secret 化与随机生成secret.yaml 将敏感信息写入 Kubernetes Secret 并做 Base64 编码transportUrl直接编码jwtKey若未配置自动用randAlphaNum 12生成 12 位随机字符串metricsPassword同样在未配置时随机生成 12 位字符串publisherJwtKey、subscriberJwtKey、license均编码写入。这意味着如果你在安装时未显式指定jwtKeyHelm 会为每个 release 生成独立的随机密钥两个 release 之间互不通用——生产环境请务必通过--set jwtKey...或 values 文件显式指定。环境变量的注入方式deployment.yaml 通过valueFrom将上述配置逐一注入容器环境变量常规参数ALLOW_ANONYMOUS、METRICS、CORS_ALLOWED_ORIGINS、JWT_ALGORITHM等来自configMapKeyRef敏感参数TRANSPORT_URL、JWT_KEY、METRICS_PASSWORD、PUBLISHER_JWT_KEY、SUBSCRIBER_JWT_KEY、LICENSE来自secretKeyRef。环境变量名与参数名一一对应如jwtAlgorithm→JWT_ALGORITHM这些正是 Mercure Hub 镜像官方读取的环境变量命名规范因此 Chart 参数与 Hub 容器能力完全对齐。此外 Deployment 上带有checksum/config与checksum/secret注解配置变更时会自动触发 Pod 滚动更新无需手动重启。健康检查Deployment 同时配置了livenessProbe与readinessProbe均通过 HTTP GET 请求/healthz端口进行探测保证 Hub 异常时能被自动重启或从 Service 端点摘除。网络与外部访问Serviceservice.yaml 定义 Service默认类型ClusterIP、端口 80targetPort: http。若启用backendConfigService 会附带 GCP BackendConfig 注解beta.cloud.google.com/backend-config: {default: release-name-mercure}同时 backend-config.yaml 会创建一个cloud.google.com/v1beta1的BackendConfig资源用于调整负载均衡器的timeoutSec。Ingressingress.yaml 在ingress.enabled: true时创建 Ingress根据集群版本自动选择networking.k8s.io/v1beta1 1.14或extensions/v1beta1API支持ingress.annotations、ingress.hostshost paths与ingress.tlssecretName hosts配置。访问地址获取安装完成后NOTES.txt 会根据部署形态给出访问指引启用 Ingress直接输出http(s)://host/pathNodePort 类型通过kubectl读取 NodePort 与节点 IP输出http://$NODE_IP:$NODE_PORTLoadBalancer 类型提示等待外部 IP 就绪可通过kubectl get svc -w观察状态并输出http://$SERVICE_IP:portClusterIP 类型使用kubectl port-forward pod 8080:80转发本地端口访问http://127.0.0.1:8080。安装验证Chart 内置了连接性测试tests/test-connection.yaml 创建一个 busybox Pod通过wget访问release-mercure:service.port验证 Service 可达。安装后可执行$ helm test my-release部署注意事项与最佳实践综合 README、values.yaml 与模板源码实际部署时建议重点关注以下几点单副本约束默认 BoltDB 传输不支持多副本replicaCount必须保持为 1如需横向扩容需要切换到支持集群化的传输transport后端。显式指定 JWT 密钥jwtKey默认随机生成跨 release 不共享生产环境务必显式设置并可通过publisherJwtKey/subscriberJwtKey实现发布者与订阅者密钥分离支持RS512等非对称算法。匿名与订阅功能默认关闭allowAnonymous、subscriptions默认false按需开启避免未授权订阅与额外 API 暴露。监控指标按需开启metrics: true会暴露/metrics端点OpenMetrics/Prometheus 格式注意通过metricsLogin/metricsPassword保护密码默认随机生成需要提前从 Secret 中读取。反向代理场景若 Hub 位于反向代理之后启用useForwardedHeaders前必须确保代理覆盖/移除相关头否则存在 IP 伪造风险。GCP 负载均衡若使用 GKE建议启用backendConfig并适当调大timeoutSec默认 30s 会断开长连接避免实时推送连接被过早终止。长连接超时SSE 长连接场景下writeTimeout默认 60sdispatchTimeout默认 5sheartbeatInterval默认0s可根据实际网络与代理环境调整必要时将readTimeout/writeTimeout设为0s以禁用超时。小结通过本文读者可以掌握从helm install stable/mercure到精细调优的完整链路理解每个配置参数的语义与默认值了解 JWT 鉴权、BoltDB 传输、监控与 CORS 等核心能力的启用方式并借助模板源码厘清「values 参数 → ConfigMap/Secret → 容器环境变量」的配置下发机制。尽管该 Chart 已随 charts 仓库归档废弃但其参数模型与 Helm 模板组织方式对部署 Mercure Hub 及编写同类服务型 Chart 仍具有直接的参考价值。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐使用 Helm Chart 在 Kubernetes 上部署 Apache Answer完整配置指南与源码级解析使用 Helm Chart 在 Kubernetes 上部署 Apache Answer完整配置指南与源码级解析 Apache Answer 是一款面向团队的后端前端企业应用使用 Helm Chart 在 Kubernetes 上部署 ToolJet安装、配置与升级完整指南使用 Helm Chart 在 Kubernetes 上部署 ToolJet安装、配置与升级完整指南 Helm 是 Kubernetes 生态中最常用的应用打低代码后端前端AI 应用MCP 服务使用 Helm 在 Kubernetes 上部署 Apache Druid完整配置与实战指南使用 Helm 在 Kubernetes 上部署 Apache Druid完整配置与实战指南 Apache Druid 是一款高性能的实时分析数据库本指南基上一篇WaveTools鸣潮工具箱3个核心功能让游戏体验提升200%的专业解决方案下一篇WaveTools鸣潮工具箱如何用免费工具提升游戏体验300%创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考