Kubernetes internal CA
Quando o FoxIDs e distribuido em Kubernetes e o trafego de saida e encaminhado atraves de um proxy que termina TLS e reemite certificados a partir de uma internal root CA, os containers do FoxIDs devem confiar nessa root CA.
Esta configuracao aplica-se apenas ao trafego HTTPS de saida dos pods FoxIDs e FoxIDs Control, como chamadas a servicos externos feitas atraves do proxy. Nao afeta a forma como o trafego TLS de entrada e terminado.
Os passos abaixo descrevem a configuracao mais simples, que nao requer quaisquer alteracoes as container images.
1) Create a bundle file (PEM) containing the internal roots
Se ja tiver um bundle combinado, use-o. Caso contrario, concatene os certificados root internos num unico ficheiro PEM e crie uma 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
Use um Secret em vez de uma ConfigMap se as roots forem privadas.
2) Mount the bundle and set SSL_CERT_FILE in both deployments
Atualize Kubernetes/foxids-deployment.yaml e adicione o volume, o mount e a variavel de ambiente em ambos os deployments.
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 os containers precisarem de aceder a servicos publicos, usar um CA bundle que contenha apenas certificados root privados pode quebrar essas chamadas, porque substitui o trust store do sistema predefinido.
Nesse caso, deve:
- Criar um CA bundle combinado que inclua certificados root publicos e privados e monta-lo, opcao recomendada.
- Estender o trust store do sistema dentro da container image em vez de usar
SSL_CERT_FILE.
How to create a combined bundle (public + private)
A abordagem mais segura e manter o trust store publico existente e acrescentar os seus certificados root internos. Comece com o CA bundle publico da base image do container FoxIDs, adicione as suas roots internas e monte o bundle combinado resultante usando SSL_CERT_FILE.
Exemplo, o path pode variar consoante a base image; verifique-o dentro do seu 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
Use a mesma configuracao de volume mount e SSL_CERT_FILE descrita no passo 2, mas apontando para combined-roots.pem.