You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes环境中配置ejabberd的STUN/TURN UDP端口范围?

Kubernetes环境下ejabberd的STUN/TURN配置方案

核心结论

只在负载均衡器(LB)开放端口范围而不配置Kubernetes Service的方式不可行——LB的流量最终需要通过Service转发到Pod,Service是Pod与外部流量的必经桥梁。但可以通过NodePort/LoadBalancer类型的Service结合LB端口转发,实现大范围UDP端口的开放需求。

具体配置步骤

1. 配置ejabberd的STUN/TURN参数

在ejabberd配置文件(如ejabberd.yml)中指定STUN/TURN的端口范围及相关参数:

listen:
  - port: 3478
    transport: udp
    module: ejabberd_stun
    use_turn: true
    turn_min_port: 16500
    turn_max_port: 32500
    turn_ip: <你的LB外部公网IP>
    turn_auth_type: user
    turn_secret: <自定义加密密钥>

2. 调整Deployment的端口声明

在ejabberd的Deployment YAML中,声明STUN固定端口和TURN端口范围:

spec:
  containers:
  - name: ejabberd
    image: ejabberd/ecs:latest
    ports:
    - containerPort: 3478
      protocol: UDP
    # 部分新版本Kubernetes支持直接声明端口范围
    - containerPort: 16500
      protocol: UDP
      hostPort: 16500
      endPort: 32500

提示:如果集群不支持endPort语法,可仅声明端口范围的起止(Kubernetes会自动覆盖中间端口),但需确保节点端口无冲突。

3. 创建Service转发流量

新建LoadBalancer类型的Service,负责将LB的流量转发到ejabberd Pod:

apiVersion: v1
kind: Service
metadata:
  name: ejabberd-stun-turn
spec:
  type: LoadBalancer
  ports:
  - name: stun
    port: 3478
    targetPort: 3478
    protocol: UDP
  - name: turn-range
    port: 16500
    targetPort: 16500
    protocol: UDP
    endPort: 32500
  selector:
    app: ejabberd

补充:如果使用NodePort模式,需手动开放集群节点防火墙的16500-32500 UDP端口;云厂商LB则需在安全组/防火墙规则中开放该端口范围。

4. 验证配置有效性

  • 使用stunclient工具测试STUN服务连通性:
    stunclient <LB外部IP> 3478
    
  • 通过XMPP客户端发起音视频通话,确认TURN端口能正常分配并转发流量。

关键注意事项

  • 若使用hostPort模式,需注意节点端口冲突问题,建议配合DaemonSet部署避免端口抢占。
  • 部分云厂商LB对端口范围的数量有限制,需提前确认是否支持16001个UDP端口(32500-16500+1)的转发。
  • 若集群使用Calico等网络插件,需配置网络策略允许16500-32500范围的UDP流量通行。

内容的提问来源于stack exchange,提问作者Venkateshwaran Kathiresan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:45:01