cancel
Showing results forย 
Search instead forย 
Did you mean:ย 
Administration & Architecture
Explore discussions on Databricks administration, deployment strategies, and architectural best practices. Connect with administrators and architects to optimize your Databricks environment for performance, scalability, and security.
cancel
Showing results forย 
Search instead forย 
Did you mean:ย 

Network Check Control Plane Failure- Vnet injection

And2
New Contributor

Hi,

I'm receiving the following error when trying to run a classic compute:


Error message: [details] X_NHC_MULTIPLE_COMPONENTS_SSL_ERROR: Instance failed network health check before bootstrapping with fatal error: X_NHC_MULTIPLE_COMPONENTS_SSL_ERROR 3 failed component(s): control_plane internet storage Retryable: false Based on the failure results: List(entity: "arprodeastus2a6.blob.core.windows.net" outcome: "ssl_error" duration_sec: 227.56352 message: "curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to arprodeastus2a6.blob.core.windows.net:443" last_error_code: 35 , entity: "arprodeastus2a9.blob.core.windows.net" outcome: "ssl_error" duration_sec: 227.53041 message: "curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to arprodeastus2a9.blob.core.windows.net:443" last_error_code: 35 , entity: "arprodeastusa2.blob.core.windows.net" outcome: "ssl_error" duration_sec: 227.7241 message: "curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to arprodeastusa2.blob.core.windows.net:443" last_error_code: 35 , entity: "arprodeastusa13.blob.core.windows.net" outcome: "ssl_error" duration_sec: 227.70636 message: "curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to arprodeastusa13.blob.core.windows.net:443" last_error_code: 35 , entity: "dbartifactsprodeastus.blob.core.windows.net" outcome: "ssl_error" duration_sec: 227.95686 message: "curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to dbartifactsprodeastus.blob.core.windows.net:443" last_error_code: 35 , entity: "eastus2-c3.azuredatabricks.net" outcome: "ssl_error" duration_sec: 48.24833 message: "curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to eastus2-c3.azuredatabricks.net:443" last_error_code: 35 , entity: "www.databricks.com" outcome: "ssl_error" duration_sec: 228.2047 message: "curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to www.databricks.com:443" last_error_code: 35 )(OnDemand)

the workspace is deployed with Secure cluster connectivity enabled, on a Vnet injection and the firewall (Palo alto) has allow the following address:

 

East US 2

Control Plane IPs, including default storage and webapp

40.70.58.221/32, 20.41.4.113/32, 20.41.4.116/32, 52.254.24.96/28, 4.150.168.160/28

 

East US 2

Control Plane NAT

20.36.151.208/28, 20.65.4.240/28, 40.70.144.208/28, 23.101.152.95/32, 20.41.4.112/32, 20.41.4.114/32, 74.249.107.232/29, 20.161.82.48/29, 20.161.68.208/29, 74.249.108.56/29, 20.161.82.56/29, 20.161.68.216/29, 74.249.108.120/29, 20.161.82.64/29, 20.161.68.224/29, 20.161.81.88/29, 20.161.68.200/29, 68.154.4.136/29

Any ideas why this is happening and how to resolve it? 

Thanks!

1 REPLY 1

Louis_Frolio
Databricks Employee
Databricks Employee

Hello @And2 , I took a look at both internal and external documentation and here is what I found.

This looks like an inspection or outbound policy problem rather than a missing control plane IP range. Every failed entity came back with curl (35) "Connection reset by peer" during the TLS handshake, not the curl (28) timeout you'd see if a route or NSG rule were missing. A timeout means the packets never arrived. A reset means something in the path accepted the TCP handshake and then tore the session down. With a Palo Alto in the path, that points at the firewall.

Two things about the allow list. First, with secure cluster connectivity enabled, the Control Plane NAT ranges aren't in play; they're only used when SCC is disabled. What SCC needs is outbound access to the relay by FQDN. Your error shows eastus2-c3.azuredatabricks.net, so your relay is tunnel.eastus2c3.azuredatabricks.net, and Databricks is explicit about allowing it by domain name because the IPs behind it change. Second, none of the failing destinations live in the ranges you allowed. The artifact storage accounts (arprodeastus2aN, plus dbartifactsprodeastus, the East US secondary) resolve to Azure Storage addresses, and www.databricks.com is plain internet. An IP-only rule built from the control plane table can't cover them.

Two likely reset sources on the Palo Alto: a security policy that lets the SYN through, identifies the destination from the SNI via App-ID or URL filtering, then hits a deny with a reset action; or SSL Forward Proxy decryption, which the cluster nodes won't trust because they don't carry the firewall's CA. The Databricks troubleshooting guide calls out SSL inspection directly and notes it won't show as a drop at the network layer.

What I'd do, in order:

  1. Pull the Palo Alto session log for one failing hostname, say arprodeastus2a6.blob.core.windows.net. That's the fastest discriminator. If the firewall is the reset source, the session end reason (policy-deny, decrypt-error, and so on) tells you which fix applies. If there's no session at all, move on to DNS, UDR propagation, the Databricks-managed NSG rules (make sure they haven't been deleted or overridden), and the return path through your next hop.
  2. Confirm from a VM in the Databricks subnet, on the same UDR, DNS, and firewall path: curl -v https://eastus2-c3.azuredatabricks.net. If plain curl fails and curl -k succeeds, or openssl s_client -showcerts shows a cert from your corporate CA, decryption is the culprit. If both fail with a reset, it's the security policy.
  3. Replace the IP rules with FQDN address objects (or an EDL) covering the full East US 2 list, applied from both workspace subnets: webapp, SCC relay, artifact Blob storage primary and secondary, log Blob storage, metastore on 3306, Event Hubs on 9093, your DBFS root storage account, and www.databricks.com. The complete list is in the IP addresses and domains doc below.
  4. Add a no-decrypt rule for those destinations from the Databricks subnets, and make sure SNI and return traffic are preserved.

Resist the temptation to open all internet as a workaround. If your design allows it, the cleaner long-term answer is service tags in the UDR (AzureDatabricks, Storage, EventHub) so this traffic goes straight out. If you scope Storage by region, the secondary artifact storage is in East US and one log storage account is in West US, so include those regions too.

References:

Regards,
Louis