Este proyecto contiene una aplicación Java simple que sirve contenido a través de HTTPS. Utilizamos un init container para agregar un certificado autofirmado al keystore de Java, permitiendo que el servidor HTTPS en la aplicación Java responda de manera segura a las solicitudes entrantes.
- Java JDK instalado localmente.
- Gradle instalado localmente.
- Docker instalado y en funcionamiento.
- Kubernetes para pruebas locales.
- kubectl para la interacción con el clúster de Kubernetes.
- OpenSSL para generar certificados autofirmados.
- Crea un directorio para la aplicación, por ejemplo,
MyJavaApp/
. - Dentro del directorio, crea la estructura
src/main/java/
y agrega un archivoMain.java
con el codigo para probar el cert: - Compila el proyecto con gradle
gradle build
Si lo deseas puedes probar localmente con el siguiente comando
java -jar build/libs/MyJavaApp-1.0.jar
Asegúrate de reemplazar your-project con el nombre real de tu proyecto y ajustar la versión según sea necesario
Usa el comando para construir la imagen docker
docker build . -t local/my-java-app:1.0 -f Dockerfile
Usa el siguiente comando para generar un certificado autofirmado de prueba:
openssl req -x509 -newkey rsa:4096 -sha256 -days 365 -nodes -keyout ./certs/my-cert.key -out ./certs/my-cert.crt -subj "/CN=my-java-app"
Esto generará dos archivos:
my-cert.key
: La clave privada.my-cert.crt
: El certificado público.
Crea un ConfigMap que contenga el certificado generado en el paso anterior.
kubectl create configmap cert-cfg --from-file=my-cert.crt
Crea un archivo deployment.yaml
para definir el init container, el contenedor principal y los volúmenes necesarios
Aplica el deployment:
kubectl apply -f deployment.yaml
Crea un archivo service.yaml
para exponer el servicio en k8s
Aplica el Service:
kubectl apply -f service.yaml
-
Revisa el estado del pod para asegurarte de que el init container y el contenedor principal se ejecutan correctamente:
kubectl get pods
-
Consulta los logs del init container para verificar la importación del certificado:
kubectl logs <POD_NAME> -c init-certificates
Reemplaza
<POD_NAME>
con el nombre del pod demy-java-app
.
Usa curl
para probar el endpoint, debes de obtener la ip del servicio:
curl -k https://{service-ip}:30443/hello
Si el despliegue es exitoso, deberías ver el mensaje:
¡Hola, Mundo! Esta es una conexión segura.
Cuando hayas terminado, puedes eliminar los recursos creados con:
kubectl delete -f configmap.yaml
kubectl delete -f deployment.yaml
kubectl delete -f service.yaml