Kubernetes 1.19 Ingress API desde Java con YAKC
Introducción
Kubernetes v1.19.0 acaba de ser lanzado. Entre las nuevas funcionalidades y mejoras destaca la graduación del Ingress API a V1 (#1453).
Pese a que los recursos de tipo Ingress se usan por la mayoría de usuarios de Kubernetes, y que esta funcionalidad se introdujo en 2015, no ha sido hasta la reciente version 1.19 en la que se ha hecho globalmente disponible.
Un Ingress es “Un objeto API que gestiona acceso externo a los servicios de un cluster, normalmente HTTP”. En otras palabras, los Ingress permiten exponer públicamente los servicios gestionados por Kubernetes.
En este artículo os mostraré como utilizar YAKC para crear un Ingress empleando la v1 del API presentado en Kubernetes v.19.0.
Ingress desde Java
Podéis emplear los Ingress para dotar de URLs externas y accesibles, además de balanceo de tráfico a los recursos de tipo Service. Asimismo, los recursos Ingress son útiles para proveer alojamiento virtual basado en nombres y terminación SSL.
El recurso Ingress requiere un IngressController para poder ser utilizado. En la actualidad, Kubernetes soporta y mantiene oficialmente controladores GCE y NGINX.
Destacar que Ingress v1
introduce varios cambios respecto a la versión v1beta1
Uno de los más importantes es que el campo pathType
ahora es obligatorio y ya no tiene un valor por defecto.
El siguiente YAML describe un Ingress
empleando un IngressController
NGINX:
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 name: ingress-example
5 namespace: default
6spec:
7 ingressClassName: nginx
8 rules:
9 - host: "*.foo.com"
10 http:
11 paths:
12 - path: /
13 pathType: Exact
14 backend:
15 serviceName: path-exact
16 servicePort: 80
De forma similar, se puede definir el mismo Ingress y obtener el mismo resultado empleando YAKC desde Java:
1new KubernetesClient().create(NetworkingV1Api.class).createNamespacedIngress("default", Ingress.builder()
2 .metadata(ObjectMeta.builder()
3 .name("ingress-example")
4 .build())
5 .spec(IngressSpec.builder()
6 .addToRules(IngressRule.builder()
7 .host("*.foo.com")
8 .http(HTTPIngressRuleValue.builder()
9 .addToPaths(HTTPIngressPath.builder()
10 .path("/")
11 .pathType("Exact")
12 .backend(IngressBackend.builder()
13 .service(IngressServiceBackend.builder()
14 .name("path-exact")
15 .port(ServiceBackendPort.builder()
16 .number(80)
17 .build())
18 .build())
19 .build())
20 .build())
21 .build())
22 .build())
23 .build())
24 .build()
25).get();
La principal ventaja de utilizar Java (Kubernetes Client YAKC) es que puedes realizar estas tareas de forma dinámica. Por ejemplo, puedes implementar un operador basado en Java que cree automáticamente un nuevo Ingress cada vez que se de de alta un nuevo Service en el cluster.
Conclusión
Kubernetes 1.19 marca la disponibilidad general de Ingress networking.k8s.io/v1
. En esta publicación os he mostrado como utilizar YAKC para crear un Ingress desde Java.
Puedes encontrar más información en la página del proyecto de YAKC en GitHub. También puedes analizar el código de prueba aquí.