adamant-church-60452
03/07/2026, 11:39 AMtall-airline-16756
03/07/2026, 11:39 AMtall-airline-16756
03/07/2026, 11:40 AMadamant-church-60452
03/07/2026, 11:51 AMtall-airline-16756
03/07/2026, 11:51 AMiceTransportPolicy: 'relay') if you want everyone to use TURN/TLS consistently.
How to implement this (high level)
1. Place an ALB or NLB in public subnets to accept TLS/WSS on port 443.
2. Forward port 443 to your LiveKit service in the private EKS cluster:
◦ ALB: good for HTTP/HTTPS/WSS. Terminate TLS at ALB or pass through if configured for TLS forwarding.
◦ NLB: good for passthrough TCP, preserves source IP if needed.
1. Enable a TURN server for LiveKit:
◦ Use the embedded TURN in LiveKit or deploy a separate TURN (e.g., coturn) configured with TLS.
◦ Ensure TURN advertises the same public domain/IP used by the load balancer so ICE candidates work.
1. Client config:
◦ Normal behavior: clients try UDP first (direct) then fall back to TURN/TLS if blocked.
◦ If you want consistent behavior, set iceTransportPolicy: 'relay' on the client to force TURN/TLS.
When you might still need UDP ports externally
• If you require direct peer UDP for lowest-latency/cheaper bandwidth (not relayed), you will need to expose the UDP port range.
• In that case, use an NLB in IP target mode that supports UDP and forward the 50k–60k range to nodePorts or instance targets. This is more complex and often unnecessary because TURN/TLS over 443 is widely compatible.
Questions to narrow the best next steps
1. Do you want clients to try direct UDP first and fall back to TURN, or do you want them to always use TURN (relay-only)?
2. Do you plan to terminate TLS at the LB, or do you prefer TLS termination at the pod level?
3. Would you like a step-by-step example for:
◦ configuring embedded TURN in LiveKit and ALB/NLB listeners, or
◦ deploying coturn on EKS and wiring it to LiveKit?
Pick one of the three above and I’ll give a concrete config and Kubernetes example (service type, target ports, sample LiveKit config, and client settings) tailored to your preference.
Sources: An open source stack for real-time multimodal AI | Firewall Tips for LiveKit Connectivity | LiveKitadamant-church-60452
03/07/2026, 11:56 AMtall-airline-16756
03/07/2026, 11:57 AMws and UDP). Before I provide a manifest, I need to confirm a couple of critical details so I give you something that will actually work in your environment and to make sure you accept the security trade-offs.
Quick confirmations
1. Is this deployment strictly for an internal, private network (clients and browsers are inside your VPC or otherwise trusted network)? Plain ws:// from public browsers will fail for getUserMedia/ WebRTC unless they run on insecure localhost or the browsers are specially configured.
2. Do you want the manifest to expose UDP media ports (the full 50,000–60,000 range) or are you ok exposing a single, smaller UDP port range (or specific ports) for testing? If you need the full range, tell me whether you want NodePort/HostPort or HostNetwork for UDP.
3. Do you want a single-pod minimal manifest for quick testing, or a more production-like Deployment + Service (ClusterIP/NodePort) with environment variables set?
If you confirm those, I’ll provide a ready-to-apply Kubernetes manifest. It will:
• Run LiveKit without TLS (plain ws), and disable TLS-related settings.
• Use a Service type you choose (ClusterIP for internal-only, or NodePort if you need node-level access from a public/private LB).
• Expose UDP ports as you request (I’ll show examples for a single test UDP port and for a NodePort range approach).
Important warnings (please read)
• Browsers typically require secure origins for WebRTC (getUserMedia and actual peer connections). Plain ws:// and non-TLS media will often be blocked by modern browsers unless you are in an exception case (e.g., page served from <http://localhost>). This setup is appropriate only for internal testing with controlled clients or native apps that permit insecure connections.
• Running without TLS and without DNS exposes credentials and media to interception. Do not use this configuration over the public Internet.
If you confirm:
• Your network is internal-only, and
• Which UDP port exposure option you prefer, and
• Whether you want ClusterIP or NodePort,
I’ll generate a concrete manifest for you (Deployment + Service + minimal config) you can apply with kubectl.
Sources: Running LiveKit on AWSadamant-church-60452
03/07/2026, 12:05 PMtall-airline-16756
03/07/2026, 12:05 PMws:// and unencrypted media from browsers (modern browsers often require secure origins for WebRTC; this may fail for public browsers unless pages are served from localhost or browsers are configured to allow insecure origins). Confirm: I should proceed with an insecure (non-TLS) config for testing.
2) UDP exposure choice — pick one:
• A: Expose the full WebRTC UDP range 50000–60000 via a public NLB in UDP mode (requires NLB with NodePort/IP target mode; more complex but supports direct UDP).
• B: Expose a smaller test UDP port range (I’ll use 100 ports, e.g., 55000–55100) via NodePort + NLB (simpler firewall footprint).
• C: Do not expose UDP publicly; use TURN/TCP fallback instead (but you said you cannot use WSS/443 — note TURN/TCP on 443 typically requires TLS/DNS).
Also tell me whether you want Service type:
• NodePort (recommended when fronted by an external NLB), or
• HostPort/HostNetwork (binds to host IPs; less portable).
If you reply with, for example: “Proceed: insecure config for testing; option A; use NodePort” I’ll produce:
• A Kubernetes manifest (Deployment + Service) configured for LiveKit without TLS, with NodePort mappings for ws (port 7880) and the UDP range, and environment vars to run without TLS.
• Step-by-step AWS instructions to create a public NLB that forwards TCP (ws) and UDP 50000–60000 to the node ports, plus required security group rules and notes on browser limitations.
Pick the UDP option (A, B, or C) and NodePort vs HostPort, and I’ll generate the manifest and the public-access steps.