Kubernetes internal CA
Quando FoxIDs viene distribuito in Kubernetes e il traffico in uscita viene instradato attraverso un proxy che termina TLS e riemette certificati da una internal root CA, i container FoxIDs devono considerare affidabile quella root CA.
Questa configurazione si applica solo al traffico HTTPS in uscita dai pod FoxIDs e FoxIDs Control, ad esempio chiamate a servizi esterni effettuate attraverso il proxy. Non influisce su come il traffico TLS in ingresso viene terminato.
I passaggi seguenti descrivono la configurazione piu semplice, che non richiede modifiche alle container images.
1) Create a bundle file (PEM) containing the internal roots
Se hai gia un bundle combinato, usalo. Altrimenti concatena i certificati root interni in un file PEM e crea una ConfigMap:
cat root1.crt root2.crt root3.crt > extra-roots.pem
kubectl -n <foxids-namespace> create configmap foxids-extra-ca --from-file=extra-roots.pem
Usa un Secret invece di una ConfigMap se le root sono private.
2) Mount the bundle and set SSL_CERT_FILE in both deployments
Aggiorna Kubernetes/foxids-deployment.yaml e aggiungi volume, mount e variabile di ambiente in entrambi i deployment.
FoxIDs deployment:
spec:
template:
spec:
volumes:
- name: extra-ca
configMap:
name: foxids-extra-ca
items:
- key: extra-roots.pem
path: extra-roots.pem
containers:
- name: foxids
volumeMounts:
- name: extra-ca
mountPath: /etc/ssl/certs/extra-roots.pem
subPath: extra-roots.pem
env:
- name: SSL_CERT_FILE
value: /etc/ssl/certs/extra-roots.pem
FoxIDs Control deployment:
spec:
template:
spec:
volumes:
- name: extra-ca
configMap:
name: foxids-extra-ca
items:
- key: extra-roots.pem
path: extra-roots.pem
containers:
- name: foxids-control
volumeMounts:
- name: extra-ca
mountPath: /etc/ssl/certs/extra-roots.pem
subPath: extra-roots.pem
env:
- name: SSL_CERT_FILE
value: /etc/ssl/certs/extra-roots.pem
Important notes for .NET / ASP.NET
Se i container devono accedere a servizi pubblici, usare un CA bundle che contiene solo certificati root privati puo interrompere quelle chiamate, perche sostituisce il trust store di sistema predefinito.
In tal caso dovresti:
- Creare un CA bundle combinato che includa sia certificati root pubblici sia privati e montarlo, soluzione raccomandata.
- Estendere il trust store di sistema all'interno della container image invece di usare
SSL_CERT_FILE.
How to create a combined bundle (public + private)
L'approccio piu sicuro e mantenere il trust store pubblico esistente e aggiungere i certificati root interni. Parti dal CA bundle pubblico della base image del container FoxIDs, aggiungi le root interne e monta il bundle combinato risultante usando SSL_CERT_FILE.
Esempio, il path puo variare a seconda della base image; verificalo all'interno del tuo container:
cat /etc/ssl/certs/ca-certificates.crt extra-roots.pem > combined-roots.pem
kubectl -n <foxids-namespace> create configmap foxids-extra-ca --from-file=combined-roots.pem
Usa la stessa configurazione di volume mount e SSL_CERT_FILE descritta nel passaggio 2, ma puntandola a combined-roots.pem.