mirror of https://github.com/OpenVidu/openvidu.git
openvidu-deployment: HA: expose RTMPS Ingress on port 1945 through the load balancer
With --external-load-balancer the installer advertises the RTMP Ingress URL as rtmps://<domain>:1945/rtmp (CADDY_RTMPS_PUBLIC_PORT), but the load balancers only listened on 1935, so the advertised URL never connected. Verified live on AWS HA: :1945 timed out, and :1935 reached a target group on Media Node port 1945 where nothing listens (ingress serves RTMP on 1935). - AWS: NLB TLS listener 1945 -> Media Node ingress 1935 (target group and SG) - Azure: LB frontend 1945 -> masters 1945, and the master NSG allows 1945 - GCP: forwarding rule 1945 (a passthrough NLB cannot translate ports) - OCI: NLB listener, backend set, NSGs and master firewalld on 1945 - DigitalOcean: LB forwarding rule 1945 -> masters 1945media-node-health
parent
a2d76661b4
commit
687bcdec0e
|
|
@ -3702,8 +3702,8 @@ Resources:
|
||||||
Properties:
|
Properties:
|
||||||
GroupId: !Ref OpenViduMediaNodeSG
|
GroupId: !Ref OpenViduMediaNodeSG
|
||||||
IpProtocol: tcp
|
IpProtocol: tcp
|
||||||
FromPort: 1945
|
FromPort: 1935
|
||||||
ToPort: 1945
|
ToPort: 1935
|
||||||
SourceSecurityGroupId: !Ref OpenViduLoadBalancerSG
|
SourceSecurityGroupId: !Ref OpenViduLoadBalancerSG
|
||||||
|
|
||||||
OpenViduLoadBalancerToMediaNodeIngressHealthCheckSG:
|
OpenViduLoadBalancerToMediaNodeIngressHealthCheckSG:
|
||||||
|
|
@ -3775,12 +3775,12 @@ Resources:
|
||||||
ToPort: 443
|
ToPort: 443
|
||||||
CidrIpv6: ::/0
|
CidrIpv6: ::/0
|
||||||
- IpProtocol: tcp
|
- IpProtocol: tcp
|
||||||
FromPort: 1935
|
FromPort: 1945
|
||||||
ToPort: 1935
|
ToPort: 1945
|
||||||
CidrIp: 0.0.0.0/0
|
CidrIp: 0.0.0.0/0
|
||||||
- IpProtocol: tcp
|
- IpProtocol: tcp
|
||||||
FromPort: 1935
|
FromPort: 1945
|
||||||
ToPort: 1935
|
ToPort: 1945
|
||||||
CidrIpv6: ::/0
|
CidrIpv6: ::/0
|
||||||
|
|
||||||
LoadBalancer:
|
LoadBalancer:
|
||||||
|
|
@ -3830,7 +3830,8 @@ Resources:
|
||||||
- Type: forward
|
- Type: forward
|
||||||
TargetGroupArn: !Ref OpenViduMediaNodeRTMPTG
|
TargetGroupArn: !Ref OpenViduMediaNodeRTMPTG
|
||||||
LoadBalancerArn: !Ref LoadBalancer
|
LoadBalancerArn: !Ref LoadBalancer
|
||||||
Port: 1935
|
# RTMPS on 1945: the port OpenVidu advertises in the RTMP Ingress URL behind a load balancer
|
||||||
|
Port: 1945
|
||||||
Protocol: TLS
|
Protocol: TLS
|
||||||
Certificates:
|
Certificates:
|
||||||
- CertificateArn: !Ref OpenViduCertificateARN
|
- CertificateArn: !Ref OpenViduCertificateARN
|
||||||
|
|
@ -3916,7 +3917,8 @@ Resources:
|
||||||
- - OVRTMP-
|
- - OVRTMP-
|
||||||
- !Select [4, !Split ['-', !Select [2, !Split ['/', !Ref AWS::StackId]]]]
|
- !Select [4, !Split ['-', !Select [2, !Split ['/', !Ref AWS::StackId]]]]
|
||||||
VpcId: !Ref OpenViduVPC
|
VpcId: !Ref OpenViduVPC
|
||||||
Port: 1945
|
# RTMP port of the ingress service on the Media Nodes
|
||||||
|
Port: 1935
|
||||||
Protocol: TCP
|
Protocol: TCP
|
||||||
Matcher:
|
Matcher:
|
||||||
HttpCode: '200'
|
HttpCode: '200'
|
||||||
|
|
|
||||||
|
|
@ -2152,7 +2152,7 @@ resource LoadBalancer 'Microsoft.Network/loadBalancers@2024-05-01' = {
|
||||||
backendAddressPool: {
|
backendAddressPool: {
|
||||||
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', lbName, lbBackendPoolNameMasterNode)
|
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', lbName, lbBackendPoolNameMasterNode)
|
||||||
}
|
}
|
||||||
frontendPort: 1935
|
frontendPort: 1945
|
||||||
backendPort: 1945
|
backendPort: 1945
|
||||||
enableFloatingIP: false
|
enableFloatingIP: false
|
||||||
protocol: 'Tcp'
|
protocol: 'Tcp'
|
||||||
|
|
@ -2499,6 +2499,26 @@ resource loadBalancerToMasterIngress 'Microsoft.Network/networkSecurityGroups/se
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RTMPS Ingress: the Load Balancer keeps the client IP, so the masters must accept 1945 from anywhere
|
||||||
|
resource loadBalancerToMasterRtmpIngress 'Microsoft.Network/networkSecurityGroups/securityRules@2023-11-01' = {
|
||||||
|
parent: openviduMasterNodeNSG
|
||||||
|
name: 'loadBalancer_to_masterNode_RTMP_INGRESS'
|
||||||
|
properties: {
|
||||||
|
protocol: 'Tcp'
|
||||||
|
sourceAddressPrefix: '*'
|
||||||
|
sourcePortRange: '*'
|
||||||
|
destinationApplicationSecurityGroups: [
|
||||||
|
{
|
||||||
|
id: openviduMasterNodeASG.id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
destinationPortRange: '1945'
|
||||||
|
access: 'Allow'
|
||||||
|
priority: 111
|
||||||
|
direction: 'Inbound'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
resource masterToMasterClusterIngress 'Microsoft.Network/networkSecurityGroups/securityRules@2023-11-01' = {
|
resource masterToMasterClusterIngress 'Microsoft.Network/networkSecurityGroups/securityRules@2023-11-01' = {
|
||||||
parent: openviduMasterNodeNSG
|
parent: openviduMasterNodeNSG
|
||||||
name: 'masterNode_to_masterNode_CLUSTER_INGRESS'
|
name: 'masterNode_to_masterNode_CLUSTER_INGRESS'
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
"_generator": {
|
"_generator": {
|
||||||
"name": "bicep",
|
"name": "bicep",
|
||||||
"version": "0.46.1.21595",
|
"version": "0.46.1.21595",
|
||||||
"templateHash": "1339858443803788925"
|
"templateHash": "9885917927692102096"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -858,7 +858,7 @@
|
||||||
"backendAddressPool": {
|
"backendAddressPool": {
|
||||||
"id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbName'), variables('lbBackendPoolNameMasterNode'))]"
|
"id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('lbName'), variables('lbBackendPoolNameMasterNode'))]"
|
||||||
},
|
},
|
||||||
"frontendPort": 1935,
|
"frontendPort": 1945,
|
||||||
"backendPort": 1945,
|
"backendPort": 1945,
|
||||||
"enableFloatingIP": false,
|
"enableFloatingIP": false,
|
||||||
"protocol": "Tcp",
|
"protocol": "Tcp",
|
||||||
|
|
@ -1248,6 +1248,29 @@
|
||||||
"[resourceId('Microsoft.Network/networkSecurityGroups', format('{0}-masterNodeNSG', parameters('stackName')))]"
|
"[resourceId('Microsoft.Network/networkSecurityGroups', format('{0}-masterNodeNSG', parameters('stackName')))]"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "Microsoft.Network/networkSecurityGroups/securityRules",
|
||||||
|
"apiVersion": "2023-11-01",
|
||||||
|
"name": "[format('{0}/{1}', format('{0}-masterNodeNSG', parameters('stackName')), 'loadBalancer_to_masterNode_RTMP_INGRESS')]",
|
||||||
|
"properties": {
|
||||||
|
"protocol": "Tcp",
|
||||||
|
"sourceAddressPrefix": "*",
|
||||||
|
"sourcePortRange": "*",
|
||||||
|
"destinationApplicationSecurityGroups": [
|
||||||
|
{
|
||||||
|
"id": "[resourceId('Microsoft.Network/applicationSecurityGroups', format('{0}-masterNodeASG', parameters('stackName')))]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"destinationPortRange": "1945",
|
||||||
|
"access": "Allow",
|
||||||
|
"priority": 111,
|
||||||
|
"direction": "Inbound"
|
||||||
|
},
|
||||||
|
"dependsOn": [
|
||||||
|
"[resourceId('Microsoft.Network/applicationSecurityGroups', format('{0}-masterNodeASG', parameters('stackName')))]",
|
||||||
|
"[resourceId('Microsoft.Network/networkSecurityGroups', format('{0}-masterNodeNSG', parameters('stackName')))]"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "Microsoft.Network/networkSecurityGroups/securityRules",
|
"type": "Microsoft.Network/networkSecurityGroups/securityRules",
|
||||||
"apiVersion": "2023-11-01",
|
"apiVersion": "2023-11-01",
|
||||||
|
|
|
||||||
|
|
@ -286,13 +286,14 @@ resource "google_compute_forwarding_rule" "tcp_80" {
|
||||||
ip_address = local.nlb_ip_address
|
ip_address = local.nlb_ip_address
|
||||||
}
|
}
|
||||||
|
|
||||||
# Forwarding rule for TCP 1935
|
# Forwarding rule for TCP 1945 (RTMPS: the port OpenVidu advertises in the RTMP Ingress URL
|
||||||
resource "google_compute_forwarding_rule" "tcp_1935" {
|
# behind a load balancer; a passthrough NLB cannot translate ports)
|
||||||
name = lower("${var.stackName}-tcp-1935-rule")
|
resource "google_compute_forwarding_rule" "tcp_1945" {
|
||||||
|
name = lower("${var.stackName}-tcp-1945-rule")
|
||||||
region = var.region
|
region = var.region
|
||||||
load_balancing_scheme = "EXTERNAL"
|
load_balancing_scheme = "EXTERNAL"
|
||||||
backend_service = google_compute_region_backend_service.tcp_backend.id
|
backend_service = google_compute_region_backend_service.tcp_backend.id
|
||||||
port_range = "1935"
|
port_range = "1945"
|
||||||
ip_protocol = "TCP"
|
ip_protocol = "TCP"
|
||||||
ip_address = local.nlb_ip_address
|
ip_address = local.nlb_ip_address
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue