Pular para o conteúdo principal

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