Skip to content

Commit 095dde7

Browse files
committed
using connectionConfig to diable Timeout
1 parent 23c647f commit 095dde7

2 files changed

Lines changed: 56 additions & 48 deletions

File tree

src/main/java/io/github/kubesys/client/KubernetesClient.java

Lines changed: 53 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import org.apache.hc.client5.http.classic.methods.HttpPost;
1616
import org.apache.hc.client5.http.classic.methods.HttpPut;
1717
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
18+
import org.apache.hc.client5.http.config.ConnectionConfig;
1819
import org.apache.hc.client5.http.config.RequestConfig;
1920
import org.apache.hc.client5.http.impl.DefaultClientConnectionReuseStrategy;
20-
import org.apache.hc.client5.http.impl.DefaultConnectionKeepAliveStrategy;
2121
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
2222
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
2323
import org.apache.hc.client5.http.impl.classic.HttpClients;
@@ -52,12 +52,13 @@
5252
import io.github.kubesys.client.utils.URLUtil;
5353

5454
/**
55-
* Kubernetes客户端
56-
* 根据
57-
* https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/的
58-
* URL规则生产URL
55+
* Kubernetes客户端,具备自动学习Kubernetes中kind生命周期变化的能力,
56+
* 好处是,当Kubernetes通过CRD机制重新注册一个kind资源时,本接口无需
57+
* 重新编译,即可在线对其进行生命周期管理
5958
*
60-
* 对于JSON参数,可参见https://kubernetes.io/docs/reference/kubernetes-api/
59+
* 参见:
60+
* - https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27
61+
* - https://kubernetes.io/docs/reference/kubernetes-api/
6162
*
6263
* @author wuheng@iscas.ac.cn
6364
* @since 1.0.0
@@ -78,14 +79,13 @@ public class KubernetesClient {
7879
protected KubernetesAdminConfig kubernetesAdminConfig;
7980

8081
/**
81-
* it is used for getting the metadata of all kinds in Kubernetes according to
82-
* [Kubernetes API pattern]
83-
* (https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/)
82+
* 用于自动分析Kubernetes中所有kind资源,以及该资源对应的Url,
83+
* 参见https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/
8484
*/
8585
protected KubernetesAnalyzer analyzer;
8686

8787
/**
88-
* client
88+
* 用于与Kubernetes进行交互
8989
*/
9090
protected final CloseableHttpClient httpClient;
9191

@@ -116,17 +116,17 @@ public KubernetesClient(File file) throws KubernetesConnectionException {
116116

117117

118118
/**
119-
* invoke Kubernetes using x509
120-
*
121-
* @param file file
122-
* @param analyzer it is used for getting the metadata for each Kubernetes kind.
119+
* 根据配置文件创建Kubernetes客户端
120+
*
121+
* @param file 比如$HOME$/.kube/conf
122+
* @param analyzer 用于自动分析Kubernetes中所有kind资源,以及该资源对应的Url
123123
* @throws KubernetesConnectionException
124124
*/
125125
public KubernetesClient(File file, KubernetesAnalyzer analyzer) throws KubernetesConnectionException {
126126
try {
127127
this.kubernetesAdminConfig = new KubernetesAdminConfig(new YAMLMapper().readTree(file));
128-
this.analyzer = analyzer.initIfNeed(this);
129128
this.httpClient = createDefaultHttpClient(kubernetesAdminConfig);
129+
this.analyzer = analyzer.initIfNeed(this);
130130
} catch (Exception ex) {
131131
throw new KubernetesConnectionException(ex.toString());
132132
}
@@ -139,33 +139,31 @@ public KubernetesClient(File file, KubernetesAnalyzer analyzer) throws Kubernete
139139
***************************************************************************/
140140

141141
/**
142-
* invoke Kubernetes using token,see
142+
* 根据token访问kubernetes
143143
* https://kubernetes.io/docs/reference/access-authn-authz/authentication/
144144
*
145-
* @param url default is https://IP:6443/
146-
* @param token bearer token, you can create it using ServiceAccount and
147-
* ClusterRoleBinding
145+
* @param url 如https://IP:6443/
146+
* @param token bearer token, 通过ServiceAccount和ClusterRoleBinding进行创建
148147
* @throws KubernetesConnectionException
149148
*/
150149
public KubernetesClient(String url, String token) throws KubernetesConnectionException {
151150
this(url, token, new KubernetesAnalyzer());
152151
}
153152

154153
/**
155-
* invoke Kubernetes using token, see
154+
* 根据token访问kubernetes
156155
* https://kubernetes.io/docs/reference/access-authn-authz/authentication/
157156
*
158-
* @param url default is https://IP:6443/
159-
* @param token bearer token, you can create it using ServiceAccount and
160-
* ClusterRoleBinding
161-
* @param analyzer it is used for getting the metadata for each Kubernetes kind.
157+
* @param url 如https://IP:6443/
158+
* @param token bearer token, 通过ServiceAccount和ClusterRoleBinding进行创建
159+
* @param analyzer 用于自动分析Kubernetes中所有kind资源,以及该资源对应的Url
162160
* @throws KubernetesConnectionException
163161
*/
164162
public KubernetesClient(String url, String token, KubernetesAnalyzer analyzer) throws KubernetesConnectionException {
165163
try {
166164
this.kubernetesAdminConfig = new KubernetesAdminConfig(url, token);
167-
this.analyzer = analyzer.initIfNeed(this);
168165
this.httpClient = createDefaultHttpClient(kubernetesAdminConfig);
166+
this.analyzer = analyzer.initIfNeed(this);
169167
} catch (Exception ex) {
170168
throw new KubernetesConnectionException(ex.toString());
171169
}
@@ -179,10 +177,10 @@ public KubernetesClient(String url, String token, KubernetesAnalyzer analyzer) t
179177
***************************************************************************/
180178

181179
/**
182-
* invoke Kubernetes using token,see
180+
* 根据用户名密码创建Kubernetes连接
183181
* https://kubernetes.io/docs/reference/access-authn-authz/authentication/
184182
*
185-
* @param url default is https://IP:6443/
183+
* @param url 如https://IP:6443/
186184
* @param username basic authing
187185
* @param password basic authing
188186
* @throws KubernetesConnectionException
@@ -192,20 +190,20 @@ public KubernetesClient(String url, String username, String password) throws Kub
192190
}
193191

194192
/**
195-
* invoke Kubernetes using token, see
193+
* 根据用户名密码创建Kubernetes连接
196194
* https://kubernetes.io/docs/reference/access-authn-authz/authentication/
197195
*
198196
* @param url default is https://IP:6443/
199197
* @param username basic authing
200198
* @param password basic authing
201-
* @param analyzer it is used for getting the metadata for each Kubernetes kind.
199+
* @param analyzer 用于自动分析Kubernetes中所有kind资源,以及该资源对应的Url
202200
* @throws KubernetesConnectionException
203201
*/
204202
public KubernetesClient(String url, String username, String password, KubernetesAnalyzer analyzer) throws KubernetesConnectionException {
205203
try {
206204
this.kubernetesAdminConfig = new KubernetesAdminConfig(url, username, password);
207-
this.analyzer = analyzer.initIfNeed(this);
208205
this.httpClient = createDefaultHttpClient(kubernetesAdminConfig);
206+
this.analyzer = analyzer.initIfNeed(this);
209207
} catch (Exception ex) {
210208
throw new KubernetesConnectionException(ex.toString());
211209
}
@@ -238,24 +236,32 @@ public KubernetesClient(String url, String username, String password, Kubernetes
238236
* @return httpClient
239237
* @throws Exception
240238
*/
241-
protected CloseableHttpClient createDefaultHttpClient(KubernetesAdminConfig kac)
242-
throws Exception {
239+
protected CloseableHttpClient createDefaultHttpClient(KubernetesAdminConfig kac) throws Exception {
243240

244-
@SuppressWarnings("deprecation")
245-
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(Timeout.DISABLED)
246-
.setConnectionKeepAlive(Timeout.DISABLED).setConnectionRequestTimeout(Timeout.DISABLED)
247-
.setResponseTimeout(Timeout.DISABLED).build();
248-
249-
return HttpClients.custom().setDefaultRequestConfig(requestConfig)
250-
.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy())
251-
.setConnectionManager(
252-
new PoolingHttpClientConnectionManager(RegistryBuilder.<ConnectionSocketFactory>create()
253-
.register(URIScheme.HTTP.id, PlainConnectionSocketFactory.getSocketFactory())
254-
.register(URIScheme.HTTPS.id,
255-
SSLUtil.createSocketFactory(
256-
kac.keyManagers(),
257-
kac.trustManagers()))
258-
.build()))
241+
ConnectionConfig connectionConfig = ConnectionConfig.custom()
242+
.setConnectTimeout(Timeout.ZERO_MILLISECONDS)
243+
.setSocketTimeout(Timeout.ZERO_MILLISECONDS)
244+
.build();
245+
246+
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(RegistryBuilder.<ConnectionSocketFactory>create()
247+
.register(URIScheme.HTTP.id, PlainConnectionSocketFactory.getSocketFactory())
248+
.register(URIScheme.HTTPS.id,
249+
SSLUtil.createSocketFactory(
250+
kac.keyManagers(),
251+
kac.trustManagers()))
252+
.build());
253+
254+
connManager.setDefaultConnectionConfig(connectionConfig);
255+
256+
RequestConfig requestConfig = RequestConfig.custom()
257+
.setConnectionKeepAlive(Timeout.ZERO_MILLISECONDS)
258+
.setConnectionRequestTimeout(Timeout.ZERO_MILLISECONDS)
259+
.setResponseTimeout(Timeout.ZERO_MILLISECONDS)
260+
.build();
261+
262+
return HttpClients.custom()
263+
.setDefaultRequestConfig(requestConfig)
264+
.setConnectionManager(connManager)
259265
.setConnectionReuseStrategy(new DefaultClientConnectionReuseStrategy()).build();
260266
}
261267

src/test/java/io/github/kubesys/client/testcases/WatchKindTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ public void doClose() {
4444
}
4545

4646
};
47-
client.watchResources("apiextensions.k8s.io.CustomResourceDefinition", KubernetesConstants.VALUE_ALL_NAMESPACES, watcher);
47+
client.watchResources("Pod", KubernetesConstants.VALUE_ALL_NAMESPACES, watcher);
48+
49+
// client.watchResources("apiextensions.k8s.io.CustomResourceDefinition", KubernetesConstants.VALUE_ALL_NAMESPACES, watcher);
4850
// or
4951
// client.watchResources("apps.Deployment", KubernetesConstants.VALUE_ALL_NAMESPACES, watcher);
5052

0 commit comments

Comments
 (0)