An Azure service that provides serverless Kubernetes, an integrated continuous integration and continuous delivery experience, and enterprise-grade security and governance.
Hello @cargobuddy,
That SSL connection could not be established is misleading. The root cause is not SSL. It's TCP.
SocketException (110): Connection timed out
at SslStream.EnsureFullTlsFrameAsync
TCP SYN went out, TCP connection was never established, so TLS ServerHello never came back. SSL is the victim.
In AKS private clusters this is almost always SNAT exhaustion or hairpin routing via App Gateway. This explains why it worked in EKS - AWS NAT Gateway has 55k ports per destination and auto-scales, Azure LoadBalancer SNAT gives you ∼1024 ports per node per public IP by default.
1. Add outbound capacity immediately:
If you are on LB outbound type:
az aks update -g <RG> -n <AKS> \
--load-balancer-managed-outbound-ip-count 3 \
--load-balancer-managed-outbound-ports 16000 \
--load-balancer-idle-timeout 4
This triples your ports from ∼1024 to ∼48k per node. Node reboot not needed but takes 5-10 min.
Best long term: switch to Managed NAT Gateway:
az aks update -g <RG> -n <AKS> --outbound-type managedNATGateway --nat-gateway-managed-v4-ip-count 2
2 IPs = 128k SNAT ports.
2. Harden .NET client - this is mandatory on Azure:
Default Azure LB idle timeout is 4 min. If .NET reuses a connection after 4 min, LB already dropped the mapping -> timeout on next handshake
Also set DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2SUPPORT=false temporarily to test if HTTP/2 multiplexing is aggravating it.
If this answers your query, do click Accept Answer and Up-Vote for the same. And, if you have any further query do let us know.