diff --git a/util/src/main/java/io/kubernetes/client/util/ClientBuilder.java b/util/src/main/java/io/kubernetes/client/util/ClientBuilder.java index 91d55af898..3433f1df43 100644 --- a/util/src/main/java/io/kubernetes/client/util/ClientBuilder.java +++ b/util/src/main/java/io/kubernetes/client/util/ClientBuilder.java @@ -12,7 +12,11 @@ */ package io.kubernetes.client.util; -import static io.kubernetes.client.util.Config.*; +import static io.kubernetes.client.util.Config.ENV_KUBECONFIG; +import static io.kubernetes.client.util.Config.ENV_SERVICE_HOST; +import static io.kubernetes.client.util.Config.ENV_SERVICE_PORT; +import static io.kubernetes.client.util.Config.SERVICEACCOUNT_CA_PATH; +import static io.kubernetes.client.util.Config.SERVICEACCOUNT_TOKEN_PATH; import static io.kubernetes.client.util.KubeConfig.ENV_HOME; import static io.kubernetes.client.util.KubeConfig.KUBECONFIG; import static io.kubernetes.client.util.KubeConfig.KUBEDIR; @@ -41,7 +45,9 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.security.PrivateKey; +import java.time.Duration; import java.util.Arrays; +import java.util.List; import okhttp3.Protocol; import org.apache.commons.compress.utils.IOUtils; import org.slf4j.Logger; @@ -55,6 +61,12 @@ public class ClientBuilder { private byte[] caCertBytes = null; private boolean verifyingSsl = true; private Authentication authentication; + // defaulting client protocols to HTTP1.1 and HTTP 2 + private List protocols = Arrays.asList(Protocol.HTTP_2, Protocol.HTTP_1_1); + // default to unlimited read timeout + private Duration readTimeout = Duration.ZERO; + // default health check is once a minute + private Duration pingInterval = Duration.ofMinutes(1); /** * Creates an {@link ApiClient} by calling {@link #standard()} and {@link #build()}. @@ -367,12 +379,44 @@ public ClientBuilder setVerifyingSsl(boolean verifyingSsl) { return this; } + public ClientBuilder setProtocols(List protocols) { + this.protocols = protocols; + return this; + } + + public List getProtocols() { + return protocols; + } + + public ClientBuilder setReadTimeout(Duration readTimeout) { + this.readTimeout = readTimeout; + return this; + } + + public Duration getReadTimeout() { + return this.readTimeout; + } + + public ClientBuilder setPingInterval(Duration pingInterval) { + this.pingInterval = pingInterval; + return this; + } + + public Duration getPingInterval() { + return this.pingInterval; + } + public ApiClient build() { final ApiClient client = new ApiClient(); - // defaulting client protocols to HTTP1.1 client.setHttpClient( - client.getHttpClient().newBuilder().protocols(Arrays.asList(Protocol.HTTP_1_1)).build()); + client + .getHttpClient() + .newBuilder() + .protocols(protocols) + .readTimeout(this.readTimeout) + .pingInterval(pingInterval) + .build()); if (basePath != null) { if (basePath.endsWith("/")) {