【问题标题】:Dynamic URL that forwards all requests to dedicated Pod in Kubernetes将所有请求转发到 Kubernetes 中的专用 Pod 的动态 URL
【发布时间】:2020-10-08 04:08:33
【问题描述】:

我正在尝试使用 kubernetes 集群对来自多个 ip 摄像机的视频流进行按需实时转码,并通过 websocket 发送到网站。

我修改了一个我在网上找到的用 go 编写的项目,它接受一个带有 rtsp 提要 URL 有效负载的 Web 请求,然后它使用该 url 启动一个 FFMPEG 进程来访问流并将其转码为 MPEG 和将 mpeg 数据发送到 go 应用程序上的另一个端点,该端点启动 websocket 连接。当可以访问流时,对原始请求的响应包括一个 websocket url。哪个网址可以放入 mpeg js 播放器并通过 websocket 在浏览器中查看。主要优点是多个客户端可以查看流,而只有一个流来自摄像头,这减少了移动数据。我还要补充一点,FFMPEG 会在 60 秒后自动停止,请求未设置为端点。

我找不到解决方案的问题是,如何在 kubernetes 集群中扩展上述应用程序,所以当我请求进入时,它会执行以下操作。 -> 检查是否有人已经在观看流
----> 如果有人正在查看,则意味着已经创建了 pod 和 websocket 连接。因此,只需将指向 pod 的 url 发送回客户端即可。
----> 如果没有人在查看,则需要创建一个流/websocket pod,并在创建后将一个 url 发送回客户端以访问流。

我看过入口控制器可能动态更新入口资源是一种解决方案,甚至可能使用服务网格,但这些对我来说都是新的。

如果有人有任何意见可以给我一些指导,我将不胜感激。

非常感谢 卢克

【问题讨论】:

    标签: go kubernetes websocket video-streaming kubernetes-ingress


    【解决方案1】:

    让您的应用程序动态配置 K8s 听起来像是一个复杂的解决方案,由于入口对象的对象非常大,可能会对性能产生影响。您可能需要研究如何清理它们。此外,执行此操作需要在您的应用中安装 K8s 客户端。

    我建议在没有 K8s 资源帮助的情况下解决这个问题,只需让您的应用程序在需要时返回一个 HTTP 重定向 (301) 到该 websocket URL。

    【讨论】:

    • 感谢您的回复。我确实认为这是一个关于难以管理的大型入口资源的问题。那么你是在建议我不要使用 Kubernetes 作为基础架构吗?还是仍然使用它,但让处理响应的 pod 返回 HTTP 重定向?我的第二个问题是,kubernetes 集群如何知道将返回的 websocket url 转发到哪里?一个 websocket 代理可能吗?
    • Kubernetes 的使用必须根据独立于手头技术问题的成本效益分析来决定。对于您的特定用例,您将受益于轻松扩展接受初始请求的部署以及扩展提供 Web 服务端点的部署(如果需要)。为了使重定向解决方案起作用,您的 websocket url 需要是绝对的并且外部可用,例如example.com/mywebsocket/id 因为重定向将由客户端完成。
    • 我相信使用 kubernetes 将是有益的,因为 pod 可以比节点更快地按需启动。但是说我没有设置kubernetes。但我仍然没有完全理解你的意思,但你想说的是有一个预设的 url 池,你可以在有人有活动的查看会话时临时分配给部署?
    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2018-09-14
    • 2022-06-29
    • 1970-01-01
    相关资源
    最近更新 更多