Neste capítulo, exploraremos o CertManager, uma ferramenta amplamente utilizada para automatizar a gestão de certificados TLS/SSL em clusters Kubernetes. CertManager é uma solução valiosa para garantir a comunicação segura entre os componentes de uma aplicação distribuída e proteger a transferência de dados sensíveis.
Introdução ao CertManager
O que é CertManager?
O CertManager é uma ferramenta de código aberto para gerenciamento de certificados X.509 em clusters Kubernetes.
Ele simplifica a aquisição, emissão, renovação e rotação automática de certificados TLS/SSL para aplicações hospedadas no Kubernetes.
Por que Certificados TLS/SSL são Importantes?
- Segurança: Certificados TLS/SSL são essenciais para garantir a comunicação segura entre aplicações, protegendo dados sensíveis contra interceptação e violações de segurança.
- Confiabilidade: Certificados válidos garantem que os navegadores e outros clientes confiem na sua aplicação, melhorando a experiência do usuário.
- Conformidade: Em muitos casos, conformidade regulatória exige o uso de certificados TLS/SSL.
Funcionalidades do CertManager
O CertManager oferece várias funcionalidades importantes:
Gerenciamento Automatizado de Certificados
- Aquisição Automática: CertManager pode solicitar automaticamente certificados de uma Autoridade de Certificação (CA) confiável, como a Let’s Encrypt.
- Renovação Automática: Ele acompanha a validade dos certificados e renova-os automaticamente, evitando a expiração.
Integração com Recursos Kubernetes
- CRDs (Custom Resource Definitions): CertManager utiliza CRDs para definir recursos personalizados, como
Certificate
eIssuer
, tornando a configuração mais declarativa. - Secrets: Os certificados gerados são armazenados em Secrets do Kubernetes, facilitando a sua utilização por outros recursos.
Suporte a Diferentes Autoridades de Certificação
CertManager suporta várias autoridades de certificação, permitindo escolher a CA mais adequada às necessidades da aplicação.
Personalização de Políticas
As políticas de emissão de certificados podem ser personalizadas de acordo com os requisitos de segurança e conformidade da organização.
Configuração e Uso Básico
Instalação do CertManager
A instalação do CertManager é geralmente realizada usando um conjunto de recursos YAML que define os componentes necessários no cluster Kubernetes.
Configuração do Issuer/ClusterIssuer
Para começar a emitir certificados, você precisa configurar um Issuer
(dentro de um namespace) ou um ClusterIssuer
(global) que especifica como e onde obter certificados.
Definindo Certificados
Você pode criar recursos Certificate
para especificar quais certificados TLS/SSL deseja gerar e associá-los a serviços ou outros recursos no Kubernetes.
Instalação do CertManager
O cert-manager é uma solução popular no Kubernetes para gerenciar e automatizar a emissão de certificados SSL/TLS, e o Let’s Encrypt é uma autoridade de certificação (CA) que fornece certificados gratuitos.
Atividade 1
Passo 1.1. Primeiro, instale os CustomResourceDefinitions (CRDs) para o cert-manager:
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.13.1/cert-manager.crds.yaml
Verifique o [repositório oficial do cert-manager](https://github.com/jetstack/cert-manager/releases) para obter a versão mais recente. |
Confira a instalação com o comando kubectl get crd
.
Passo 1.2. Crie o namespace para o cert-manager:
kubectl create namespace cert-manager
Passo 1.3. Adicione o repositório Helm do Jetstack:
helm repo add jetstack https://charts.jetstack.io
Passo 1.4. Atualize o índice de repositórios Helm:
helm repo update
Passo 1.5. Instale o cert-manager usando Helm:
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.13.1
Acompanhe a criação dos pods como comando watch kubectl get pods -n cert-manager
, assim que todos estiverem com status Running
finalize com as teclas Ctlr+c.
Configuração do Let’s Encrypt:
Atividade 2
Passo 2.1. Para obter certificados do Let’s Encrypt, você precisará criar um ClusterIssuer
ou Issuer
. O ClusterIssuer
é global, enquanto o Issuer
é específico para um namespace.
Para ambientes de teste, você pode usar o ambiente de ‘staging’ do Let’s Encrypt para evitar limites de taxa. Basta mudar o server para ‘https://acme-staging-v02.api.letsencrypt.org/directory’ e adaptar os nomes conforme necessário. |
Aqui está um exemplo para criar um ClusterIssuer
para o ambiente de produção do Let’s Encrypt:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: your-email@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
Substitua your-email@example.com pelo seu e-mail. Ele é usado pelo Let’s Encrypt para enviar notificações relacionadas aos seus certificados. |
Salve o conteúdo acima como letsencrypt-prod.yaml
e aplique-o:
kubectl apply -f letsencrypt-prod.yaml
Solicitando Certificados:
Atividade 3
Com o ClusterIssuer
ou Issuer
configurado, você pode solicitar certificados para seus domínios. Para isso, vamos criar um recurso do ingress que especifica os detalhes do certificado desejado.
Verifique o nome do Isser
ou ClusterIssuer
existente. Use kubectl get issuer -n <nome do namespace>
para um issuer local ou kubectl get clusterissuer
para o issuer global. Esta informação deverá constar no arquivo de criação do Ingress Resource.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-resource
annotations:
cert-manager.io/cluster-issuer: letsencrypt-dev
spec:
ingressClassName: nginx
tls:
- hosts:
- nginx.example.com
secretName: letsencrypt-dev
rules:
- host: nginx.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-main
port:
number: 80
Aplique o arquivo e faça o teste de acesso e valide o certicado no navegador ou curl.
Este é um guia básico para instalar o cert-manager e configurá-lo com o Let’s Encrypt. Dependendo do seu ambiente e requisitos (por exemplo, usando desafios DNS-01 em vez de HTTP-01), você pode precisar de etapas adicionais ou diferentes configurações. Sempre é uma boa ideia consultar a documentação oficial do cert-manager para obter detalhes e atualizações.
Em nosso Glossário você encontra outros termos. Veja agora.