diff --git a/src/http_server.rs b/src/http_server.rs
index 11899a09ad9a62c2ad360ec1b729ac8a24570bac..baed97ee8bc497b6db41eacd8d9e4af00f1f1adc 100644
--- a/src/http_server.rs
+++ b/src/http_server.rs
@@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
 use std::{collections::HashMap, error::Error};
 
 use ::tarantool::fiber;
+use tarantool::fiber::r#async::timeout::IntoTimeout;
 
 use crate::info::{RuntimeInfo, VersionInfo};
 use crate::instance::{Instance, InstanceId, StateVariant};
@@ -14,7 +15,7 @@ use crate::traft::network::ConnectionPool;
 use crate::util::Uppercase;
 use crate::{tlog, unwrap_ok_or};
 
-const DEFAULT_TIMEOUT: Option<std::time::Duration> = Some(std::time::Duration::from_secs(1));
+const DEFAULT_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(1);
 
 /// Response from instances:
 /// - `raft_id`: instance raft_id to find Instance to store data
@@ -200,7 +201,11 @@ async fn get_instances_data(
                 tlog!(Error, "webui: error on calling .proc_runtime_info on instance {}: {e}", instance.instance_id);
                 continue;
             }
-        );
+        // we have to add timeout directly to future due
+        // to the bug in connection pool that does not consider
+        // timeout when establishing TCP connection
+        // See https://git.picodata.io/picodata/picodata/picodata/-/issues/943 
+        ).timeout(DEFAULT_TIMEOUT);
         fs.push({
             async move {
                 let mut data = InstanceDataResponse {