Questa è una domanda difficile da chiedere, quindi portami un po 'con me. Cercherò di essere breve se posso.
Dichiarazione del problema
Sto cercando una best practice moderna per la gestione e la distribuzione dell'elenco di certificati CA attendibili di root dei container Docker. So che posso cuocere i certificati in ogni contenitore attraverso un Dockerfile. Tuttavia, si tratta di una nuova immagine di finestra mobile per ogni contenitore ogni volta che è necessario apportare un certificato o un CRL. Idealmente nello spirito di "cloud native" (vedi 12 app di fattori) i nostri contenitori non avrebbero certificati e CRL infornati e tutto questo proviene dall'ambiente in qualche modo.
Per dare un po 'più di contesto. Sto eseguendo questi contenitori in Kubernetes, ma potrebbero essere eseguiti in qualsiasi piattaforma contenitore come OpenShift, AWS, ecc. E idealmente il mio obiettivo è trovare un'unica soluzione che permetta una vera portabilità del contenitore.
Soluzioni potenziali
Alcune idee con cui ho giocato:
1) crea un altro contenitore che ha tutti i certificati, i CRL e il volume montati su ciascun contenitore. - Questo è un approccio comune ma richiede il salvataggio del contenitore in una nuova immagine ogni volta che un nuovo CERT o CRL è stato aggiornato. Non terribile, ma non si sente molto "cloud nativo".
2) Usa Spring Config Server e costruisci un piccolo sidecar Spring Boot che installa tutti i certs all'avvio. - La configurazione centralizzata esterna sembra cloud nativa. - Potrebbe richiedere pesanti modifiche all'ordine di avvio dei servizi nel contenitore che potrebbero richiedere quei certificati. - Sembra troppo complicato per un contenitore.
3) Utilizzare un proxy in cui tutti i certificati sono gestiti. - Si sente come un hack per forzare tutto il traffico attraverso il proxy. - Possibili problemi di throughput e di conflitto quando si verificano carichi pesanti sulle risorse HTTPS. - Potrebbe non essere possibile instradare tutto su HTTP diretto.
4) Utilizzare le variabili di ambiente e avere uno script di avvio che li installa - Approccio semplice e generalizzato per qualsiasi tipo di contenitore utilizzato ovunque. Non sono sicuro se sia appropriato farlo in questo modo. Questi sarebbero molti valori variabili per l'ambiente. Potete immaginare come sarà una "printenv"?
5) Usa i segreti di Kubernetes (non è sicuro che funzioni ancora) - È una soluzione solo di Kubernetes che è un downer per scrivere una volta, usare ovunque.
So che questo è un po 'prolisso. Mi scuso per quello. Non sapevo come comprimerlo ulteriormente. Non vedo l'ora che inizi la discussione.