Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

461
Vistas
¿Cómo agregar dinámicamente el certificado PEM de ConfigMap a los cacerts de Java en OpenShift?

Estamos tratando de crear un conjunto de los mismos servicios, que están conectados a diferentes MQTT Brokers y diferentes sistemas de terceros. Cada servicio debe tener su propio certificado para poder conectarse a su propio MQTT Broker.

Para hacerlo, estamos utilizando una canalización de Jenkins, que está enviando una imagen de Docker recién creada a múltiples proyectos de destino en OpenShift. Cada proyecto tiene su propio ConfigMap con detalles de conexión/configuración.

Ahora el problema es que nos gustaría hacer lo mismo con los Certificados PEM. La forma más fácil y funcional es mantener los certificados en el repositorio e importarlos en Dockerfile. Funciona bien, pero no se amplía cuando queremos agregar más POD en OpenShift con el mismo servicio, pero con configuraciones diferentes.

Para hacerlo dinámicamente pensamos en initContainers . Esto nos permitiría enviar el certificado de forma dinámica.

 initContainers: - name: inject-pem-to-cacerts image: <imageName> env: - name: MQTT_CERT_PEM value: home/fromMount/cert.pem - name: CACERTS value: $JAVA_HOME/jre/lib/security/cacerts command: ['/bin/bash'] args: ['-c', "keytool -import -noprompt -keystore $CACERTS -file $MQTT_CERT_PEM -storepass changeit -alias service-$MQTT_CERT_PEM"]

En ese caso, estamos recibiendo Permiso denegado en esa ruta específica. Sudo no es una opción aquí por lo que probamos. Tal vez sea una cuestión de contexto de seguridad en YAML, pero no sé qué se debe configurar.

Si hay otra manera de hacerlo mejor, me encantaría escuchar.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El problema al que te enfrentas se debe al hecho de que los Init-Containers no son la herramienta adecuada aquí. Los contenedores de inicio se inician antes que los contenedores de pod, por lo tanto, el almacén de confianza que configure aquí estará en el contenedor de inicio y no en el contenedor de la aplicación. Para lograr lo que está tratando de hacer, le recomiendo PostStart Container Lifecycle Handler :

 containers: - name: my-container lifecycle: postStart: exec: ['-c', "keytool -import -noprompt -keystore $CACERTS -file $MQTT_CERT_PEM -storepass changeit -alias service-$MQTT_CERT_PEM"]

Dando un paso atrás, me pregunto acerca de una solución alternativa. Si lo entendí correctamente, debe instalar los cacerts para los certificados de servidor de los distintos intermediarios de MQTT. Entonces, dado que los cacerts no son confidenciales , ¿por qué no trabajar con una imagen de Docker singular que tenga todos los cacerts instalados? Eso le quitaría mucha complejidad a los K8.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda