Cliente de Kubernetes para Java: Cómo configurar el cliente HTTP subyacente
Introducción
El cliente de Kubernetes de Fabric8 destaca como uno de los clientes Java más populares para Kubernetes. Si lo comparas con otros clientes de Kubernetes, tiene un conjunto de características adicionales y optimizaciones de rendimiento que lo diferencian de los demás.
Una característica notable introducida en la versión 6.0 te permite configurar el cliente HTTP subyacente utilizado por el cliente de Kubernetes. Esta característica única convierte al cliente de Fabric8 en una opción increíblemente flexible.
La opción de elegir el cliente HTTP adecuado es particularmente valiosa cuando deseas alinear tu cliente de Kubernetes con el cliente HTTP que ya está utilizando tu aplicación. Por ejemplo, la instancia del cliente de Kubernetes de Fabric8 proporcionada por Quarkus se configura por defecto con Eclipse Vert.x.
El cliente de Kubernetes de Fabric8 ofrece múltiples implementaciones de cliente HTTP integradas. Es probable que encuentres una que se adapte a tus necesidades. Veamos estas opciones en detalle y aprendamos cómo configurarlas.
Implementaciones de cliente HTTP disponibles
Actualmente, el cliente de Kubernetes de Fabric8 proporciona las siguientes implementaciones de cliente HTTP:
OkHttp es la implementación de cliente HTTP predeterminada proporcionada por Fabric8.
Esta ha sido tradicionalmente la opción desde las primeras versiones del cliente.
Esta es también la razón principal por la que todavía se emplea por defecto y por la que se proporciona como una dependencia transitiva
del módulo kubernetes-client
.
Siempre que agreguemos una dependencia a una implementación de cliente HTTP diferente, esta tendrá prioridad sobre OkHttp.
Sin embargo, se recomienda que excluyamos la dependencia kubernetes-httpclient-okhttp
para mejorar el rendimiento de la compilación de nuestro proyecto.
Ahora continuemos aprendiendo cómo configurar el cliente HTTP vanilla JDK.
Cómo configurar el cliente JDK HTTP vanilla
A partir de Java 11, el JDK proporciona un cliente HTTP integrado. Esto es extremadamente conveniente porque hoy en día, la mayoría de las aplicaciones necesitan comunicarse con servicios y aplicaciones externas a través de HTTP.
Desde el punto de vista del cliente de Kubernetes de Java, poder confiar en un cliente HTTP sin agregar dependencias adicionales es una gran ventaja. Cuándo liberamos la versión 6.0, consideramos cambiar la implementación predeterminada al cliente HTTP JDK vanilla. No obstante, el cliente HTTP JDK tiene algunos problemas que no se solucionaron hasta Java 16. Puedes encontrar más información sobre esto en el readme del módulo.
En cualquier caso, si estás utilizando Java 16 o cualquiera de las nuevas versiones LTS, puedes configurar el cliente de Kubernetes para usar el cliente HTTP JDK.
El siguiente fragmento muestra cómo configurar el archivo pom.xml
de tu proyecto para usar el cliente HTTP JDK:
<project>
<dependencies>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<exclusions>
<exclusion>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-httpclient-okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-httpclient-jdk</artifactId>
</dependency>
</dependencies>
</project>
En caso de que estés utilizando Gradle:
dependencies {
implementation("io.fabric8:kubernetes-client") {
exclude group: "io.fabric8", module: "kubernetes-httpclient-okhttp"
}
implementation("io.fabric8:kubernetes-httpclient-jetty")
}
Continuemos ahora aprendiendo cómo configurar el cliente HTTP Eclipse Vert.x.
Cómo configurar el cliente de Kubernetes para usar Eclipse Vert.x
Eclipse Vert.x es un conjunto de herramientas para crear aplicaciones reactivas en la JVM. También proporciona un cliente HTTP no bloqueante que se puede utilizar para comunicarse con servicios y aplicaciones externas. Dado que este es uno de los clientes más eficientes de los disponibles, es una excelente opción para el cliente de Kubernetes.
El siguiente fragmento muestra cómo configurar el archivo pom.xml
de tu proyecto para usar el cliente HTTP Vert.x:
<project>
<dependencies>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<exclusions>
<exclusion>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-httpclient-okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-httpclient-vertx</artifactId>
</dependency>
</dependencies>
</project>
En caso de que estés utilizando Gradle:
dependencies {
implementation("io.fabric8:kubernetes-client") {
exclude group: "io.fabric8", module: "kubernetes-httpclient-okhttp"
}
implementation("io.fabric8:kubernetes-httpclient-vertx")
}
Cómo configurar el cliente de Kubernetes para usar Eclipse Jetty
Eclipse Jetty es principalmente un servidor HTTP Java y un contenedor de servlets. Sin embargo, Jetty también proporciona un cliente HTTP de alto rendimiento que se puede utilizar para comunicarse con servicios y aplicaciones externas.
Jetty es una excelente opción si tu proyecto está utilizando JDK 11 o una versión más reciente. El siguiente fragmento muestra cómo configurar el cliente de Kubernetes para usar el cliente HTTP Jetty:
<project>
<dependencies>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<exclusions>
<exclusion>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-httpclient-okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-httpclient-jetty</artifactId>
</dependency>
</dependencies>
</project>
En caso de que estés utilizando Gradle:
dependencies {
implementation("io.fabric8:kubernetes-client") {
exclude group: "io.fabric8", module: "kubernetes-httpclient-okhttp"
}
implementation("io.fabric8:kubernetes-httpclient-jetty")
}
Cómo hemos visto, el cliente de Kubernetes de Fabric8 proporciona múltiples implementaciones de cliente HTTP. En el siguiente apartado, aprenderemos qué hacer en caso de que quieras utilizar un cliente HTTP diferente.
Cómo puedo usar un cliente HTTP diferente
En caso de que el cliente HTTP que quieras utilizar no lo proporcione cliente de Kubernetes de Fabric8,
aún puedes usarlo implementando las interfaces HttpClient
.
A pesar de que no es una tarea muy sencilla, aún es posible hacerlo.
Por ejemplo, los desarrolladores de Armeria ya están trabajando en una
implementación propia
de la interfaz HttpClient
para el cliente de Kubernetes de Fabric8.
Conclusión
En este artículo, te he enseñado cómo configurar el cliente de Kubernetes de Fabric8 para usar diferentes clientes HTTP. Poder elegir el cliente HTTP subyacente es una característica única que te permite reutilizar el cliente HTTP que ya estás utilizando en tu aplicación.
El cliente de Kubernetes de Fabric8 ya proporciona múltiples implementaciones de cliente HTTP.
También hemos aprendido que puedes implementar la interfaz HttpClient
en caso de que quieras utilizar un cliente HTTP diferente.