1515import org .apache .hc .client5 .http .classic .methods .HttpPost ;
1616import org .apache .hc .client5 .http .classic .methods .HttpPut ;
1717import org .apache .hc .client5 .http .classic .methods .HttpUriRequestBase ;
18+ import org .apache .hc .client5 .http .config .ConnectionConfig ;
1819import org .apache .hc .client5 .http .config .RequestConfig ;
1920import org .apache .hc .client5 .http .impl .DefaultClientConnectionReuseStrategy ;
20- import org .apache .hc .client5 .http .impl .DefaultConnectionKeepAliveStrategy ;
2121import org .apache .hc .client5 .http .impl .classic .CloseableHttpClient ;
2222import org .apache .hc .client5 .http .impl .classic .CloseableHttpResponse ;
2323import org .apache .hc .client5 .http .impl .classic .HttpClients ;
5252import 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
0 commit comments