如何在Ingress Nginx中设置RTMP协议?

发布于 2025-01-25 11:25:23 字数 666 浏览 2 评论 0 原文

我在Google Kubernetes引擎上设置了一个Kubernetes群集。我有一个托管RTMP应用程序的POD。该应用程序需要两个端口,一个用于HTTP,一个用于RTMP。我已经设置了一个入口nginx负载平衡器。它正确路由HTTP流量。我也希望能够路由RTMP流量。但是,当我在yaml文件中编写RTMP时。它显示为一个未知领域。我正在使用Skaffold和Google Cloud Build进行部署。

Ingress-SRV文件,就是在端口1935上有一个RTMP的条目。然后,我可以使用RTMP协议来传输爱情视频。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - http:
        paths:
          - path: /?(.*)
            backend:
              serviceName: stream-server-srv
              servicePort: 8000

这是我想完成的

I have a Kubernetes cluster set up on Google Kubernetes Engine. I have a pod that hosts an RTMP application. This application requires two ports, one for HTTP and one for RTMP. I have set up an ingress Nginx load balancer. It routes the HTTP traffic correctly. I want to be able to route the RTMP traffic as well. But when I write RTMP in my YAML file. It shows it as an unknown field. I am using skaffold and Google Cloud Build to deploy.

Here is the Ingress-srv file

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - http:
        paths:
          - path: /?(.*)
            backend:
              serviceName: stream-server-srv
              servicePort: 8000

What I want to be able to do is have an entry for RTMP on port 1935. That I can then use to stream love videos using RTMP protocol.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

玩心态 2025-02-01 11:25:23

RTMP是基于TCP的协议,标准入口不支持TCP服务。

Nginx Ingress Controller(看起来您正在使用)可以被配置为公开TCP服务

首先,您需要确保在 stream> stream-server-srv 服务中同时公开HTTP和RTMP端口:(

apiVersion: v1
kind: Service
metadata:
  name: stream-server-srv
  namespace: default
spec:
  selector:
    app: stream-server
  type: ClusterIP
  ports:
    - name: http-port
      port: 8000
      targetPort: 8000
      protocol: TCP
    - name: rtmp-port
      port: 1935
      targetPort: 1935
      protocol: TCP

用命名空间替换默认值)

您还需要确保也暴露了1935年端口。例如:

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.2.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Local
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - appProtocol: http
    name: http
    port: 80
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
  - name: rtmp
    port: 1935
    protocol: TCP
    targetPort: 1935
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: LoadBalancer

最后,您需要更新/修补nginx TCP服务配置:(

kubectl patch configmap tcp-services -n ingress-nginx --patch '{"data":{"1935":"default/stream-server-srv:1935"}}'

用命名空间/serviceName替换“默认/stream-server-srv”)

RTMP is a TCP-based protocol and standard Ingress does not support TCP services.

The NGINX Ingress controller (which it looks like you are using) can be configured to expose TCP services.

First, you'll need to make sure that you expose both the HTTP and RTMP ports in your stream-server-srv Service:

apiVersion: v1
kind: Service
metadata:
  name: stream-server-srv
  namespace: default
spec:
  selector:
    app: stream-server
  type: ClusterIP
  ports:
    - name: http-port
      port: 8000
      targetPort: 8000
      protocol: TCP
    - name: rtmp-port
      port: 1935
      targetPort: 1935
      protocol: TCP

(replace default with your namespace)

You will also need to make sure that the Service used to expose the NGINX ingress exposes port 1935 as well. For example:

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.2.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Local
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - appProtocol: http
    name: http
    port: 80
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
  - name: rtmp
    port: 1935
    protocol: TCP
    targetPort: 1935
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: LoadBalancer

Finally, you'll need to update / patch the NGINX tcp services ConfigMap:

kubectl patch configmap tcp-services -n ingress-nginx --patch '{"data":{"1935":"default/stream-server-srv:1935"}}'

(replace "default/stream-server-srv" with your namespace/servicename)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文