Lab 8.3 - TLS/SSL com Cert-Manager
Objetivos do Lab
Ao final deste lab, você será capaz de:
- Instalar o cert-manager no cluster.
- Configurar um ClusterIssuer para Let's Encrypt.
- Criar um certificado TLS para um Ingress.
- Configurar HTTPS com Ingress.
- Testar o acesso HTTPS seguro.
Duração Estimada
60-75 minutos
Pré-requisitos
- kubectl instalado e configurado.
- Cluster Kubernetes com Ingress Controller.
- Domínio acessível publicamente (ou uso de certificados autoassinados para teste local).
Parte 1: Instalação do cert-manager
cert-manager é um operador Kubernetes que automatiza o gerenciamento de certificados TLS.
Etapa 1.1: Instalar o cert-manager
Instale o cert-manager:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml
Aguarde até que o cert-manager esteja pronto:
kubectl wait --for=condition=ready pod -l app.kubernetes.io/instance=cert-manager -n cert-manager --timeout=90s
Verifique a instalação:
kubectl get pods -n cert-manager
Parte 2: Configuração de um ClusterIssuer
Um ClusterIssuer define como o cert-manager obtém os certificados (Let's Encrypt, autoassinados, etc.).
Etapa 2.1: ClusterIssuer para Let's Encrypt (Produção)
Para um domínio público, crie clusterissuer-letsencrypt.yaml:
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 # Substitua pelo seu e-mail
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
Nota: Para Let's Encrypt, você deve ter um domínio público e um Ingress acessível pela Internet.
Etapa 2.2: ClusterIssuer Autoassinado (Teste Local)
Para um cluster local, utilize um certificado autoassinado:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: selfsigned-issuer
spec:
selfSigned: {}
Aplique o ClusterIssuer autoassinado:
kubectl apply -f clusterissuer-selfsigned.yaml
Verifique:
kubectl get clusterissuer
Parte 3: Criação de um Certificado
Etapa 3.1: Criar um Certificado
Crie certificate-example.yaml:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app-tls-cert
spec:
secretName: app-tls-secret # Nome do Secret onde o certificado será armazenado
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app.local # Nome do host para o certificado
Aplique o certificado:
kubectl apply -f certificate-example.yaml
Verifique o status:
kubectl get certificate
kubectl describe certificate app-tls-cert
Aguarde até que o certificado esteja pronto:
kubectl wait --for=condition=ready certificate app-tls-cert --timeout=60s
Verifique se o Secret foi criado:
kubectl get secret app-tls-secret
Parte 4: Configuração do Ingress com TLS
Etapa 4.1: Criar um Ingress com TLS
Crie ingress-tls.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-tls
annotations:
cert-manager.io/cluster-issuer: selfsigned-issuer # Anotação para cert-manager
spec:
ingressClassName: nginx
tls:
- hosts:
- app.local
secretName: app-tls-secret # Referência ao Secret do certificado
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80
Nota: Se você usar a anotação cert-manager.io/cluster-issuer, o cert-manager criará automaticamente o certificado. Caso contrário, referencie o Secret criado manualmente.
Aplique o Ingress:
kubectl apply -f ingress-tls.yaml
Parte 5: Teste do Acesso HTTPS
Etapa 5.1: Configurar o Hostname
Certifique-se de que app.local aponte para o IP do Ingress Controller em /etc/hosts.
Etapa 5.2: Testar HTTPS
Teste o acesso HTTPS:
# Ignorar a verificação do certificado autoassinado
curl -k https://app.local
Ou no navegador, aceite o certificado autoassinado (você verá um aviso de segurança, isso é normal para um certificado autoassinado).
Parte 6: Certificado Automático com Anotação
Você também pode deixar o cert-manager criar o certificado automaticamente via anotação no Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-auto-tls
annotations:
cert-manager.io/cluster-issuer: selfsigned-issuer
spec:
ingressClassName: nginx
tls:
- hosts:
- app.local
secretName: app-tls-secret-auto
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80
O cert-manager criará automaticamente o certificado e o Secret.
Parte 7: Limpeza
Remova os recursos:
kubectl delete ingress app-ingress-tls
kubectl delete certificate app-tls-cert
kubectl delete clusterissuer selfsigned-issuer
kubectl delete secret app-tls-secret
Para desinstalar o cert-manager:
kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml
Resumo do Lab
Neste lab, você instalou o cert-manager, configurou um ClusterIssuer (autoassinado para teste local), criou um certificado TLS e configurou um Ingress com HTTPS. Você aprendeu a automatizar o gerenciamento de certificados TLS no Kubernetes.
Próximos Passos
O último lab deste módulo mostrará como configurar múltiplos domínios e virtual hosts com Ingress.
Lab 8.4: Multi-domínios e Virtual Hosts
Lab criado em: Dezembro 2024