bg-tutorials

Como instalar um certificado SSL da ACME no Kubernetes

A instalação de um certificado ACME SSL no Kubernetes agora é um processo padronizado e flexível, graças a ferramentas maduras como o cert-manager e ao amplo suporte de CAs comerciais. Se você estiver executando cargas de trabalho de produção por trás do NGINX Ingress, Traefik ou outro gateway, poderá automatizar o HTTPS seguro com controle total.

Instalar o ACME SSL no Kubernetes

Este guia mostrará a você como instalar um certificado ACME SSL no Kubernetes usando o cert-manager. Abordaremos a instalação, a configuração de um emissor com External Account Binding (EAB) e a emissão de certificados para proteger seus serviços de entrada.


O que você precisará

Antes de mergulhar, certifique-se de que você:

  • Você tem um cluster Kubernetes em funcionamento (recomenda-se a versão 1.23 ou superior)
  • kubectl está configurado e funcionando
  • Você tem acesso ao seu controlador de entrada (por exemplo, NGINX, Traefik)
  • Seu domínio aponta para o IP público do controlador de entrada
  • Você tem credenciais EAB de sua CA compatível com ACME:
    • URL do diretório ACME (por exemplo, https://acme.example.com/v2/DV)
    • Identificador de chave EAB (KID)
    • Chave HMAC do EAB

Observação: https://acme.example.com/v2/DV é usado em todo este guia como URL de diretório ACME de espaço reservado. Substitua-o pelo endpoint real de sua autoridade de certificação.


Etapa 1 – Instalar o cert-manager

cert-manager é o cliente ACME nativo do Kubernetes mais amplamente usado. Ele é executado como um controlador que gerencia a emissão e a renovação de certificados.

Instale via Helm (preferencialmente para produção):

kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.14.4 \
--set installCRDs=true

Aguarde alguns segundos e confirme se todos os pods estão funcionando:

kubectl get pods -n cert-manager

Você deverá ver três pods: cert-manager, cert-manager-webhook e cert-manager-cainjector.


Etapa 2 – Criar um segredo do Kubernetes para as credenciais do EAB

Crie um segredo do Kubernetes para armazenar sua chave EAB com segurança:

kubectl create secret generic acme-eab-secret \
--namespace cert-manager \
--from-literal=eab-kid="YOUR_EAB_KID" \
--from-literal=eab-hmac-key="YOUR_EAB_HMAC_KEY"

Substitua por suas credenciais reais. Evite copiar e colar espaços em branco.


Etapa 3 – Definir um ClusterIssuer ou Emissor

Agora, crie um recurso ClusterIssuer (para todos os namespaces) ou Issuer (namespace único) que conecte o cert-manager à ACME CA usando as credenciais do EAB.

Aqui está um exemplo de ClusterIssuer YAML:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: acme-issuer
spec:
acme:
server: https://your.acme-server.com/v2/DV
email: [email protected]
privateKeySecretRef:
name: acme-private-key
externalAccountBinding:
keyID: YOUR_EAB_KID
keySecretRef:
name: acme-eab-secret
key: eab-hmac-key
solvers:
- http01:
ingress:
class: nginx

Aplique-o:

kubectl apply -f clusterissuer.yaml

Substitua ingress.class: nginx por traefik, nginx-internal ou qualquer outra classe de ingress que você tenha. Você pode encontrar isso na documentação do seu controlador ingress.


Etapa 4 – Criar um recurso de certificado

Quando o ClusterIssuer estiver pronto, crie um recurso de certificado que informe ao cert-manager qual domínio você deve proteger. Veja um exemplo:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-ssl-cert
namespace: default
spec:
secretName: my-ssl-cert-tls
issuerRef:
name: acme-issuer
kind: ClusterIssuer
commonName: yourdomain.com
dnsNames:
- yourdomain.com
- www.yourdomain.com

Aplique-o:

kubectl apply -f certificate.yaml

O cert-manager usará o emissor, resolverá o desafio via ingress e armazenará o certificado emitido como um segredo TLS do Kubernetes.


Etapa 5 – Faça referência ao certificado em seu Ingress

Atualize sua regra de entrada para usar o certificado gerado:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
annotations:
cert-manager.io/cluster-issuer: acme-issuer
spec:
tls:
- hosts:
- yourdomain.com
- www.yourdomain.com
secretName: my-ssl-cert-tls
rules:
- host: yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80

Aplique-o:

kubectl apply -f ingress.yaml

Quando o cert-manager detectar a anotação, ele começará a resolver o desafio ACME e emitirá o seu certificado.


Etapa 6 – Verificar o certificado e a renovação automática

Para verificar se tudo funcionou:

kubectl describe certificate my-ssl-cert

Procure o certificado emitido com sucesso.

Para verificar a configuração de renovação, execute:

kubectl get certificaterequests

O cert-manager lida com a renovação automaticamente cerca de 30 dias antes da expiração. Você pode simular uma renovação como esta:

kubectl cert-manager renew my-ssl-cert


Perguntas comuns

A configuração do ACME SSL no Kubernetes pode parecer um pouco abstrata, especialmente quando você faz malabarismos com controladores de entrada, segredos e registros DNS. Abaixo, respondemos a algumas perguntas comuns que os desenvolvedores enfrentam ao instalar certificados ACME em um ambiente Kubernetes, quer você esteja usando o cert-manager ou uma configuração alternativa.

Posso usar o DNS-01 em vez do HTTP-01?

Sim, o cert-manager oferece suporte à validação de DNS com provedores como Cloudflare, AWS e Google Cloud DNS. Use-o se você não expuser a porta 80.

O cert-manager está pronto para produção?

Com certeza. Ele potencializa o SSL para grandes clusters do Kubernetes em empresas e nuvens públicas.

Posso usar um certificado curinga com o ACME no Kubernetes?

Sim, mas os certificados curinga exigem a validação DNS-01, que envolve a atualização de registros DNS em vez de usar desafios HTTP. Confirme se o seu provedor de DNS oferece suporte à automação (via API) e configure o solucionador dns01 de acordo com a configuração do cert-manager.

Palavras finais

Agora você sabe como instalar um certificado ACME SSL no Kubernetes usando o cert-manager e uma autoridade de certificação compatível com o ACME. Essa configuração é totalmente automatizada e dimensionável para ambientes modernos do Kubernetes. Você obtém HTTPS seguro, renovação automática e integração perfeita com o Ingress, tudo isso sem sair do cluster.

Economize 10% em certificados SSL ao fazer seu pedido hoje!

Emissão rápida, criptografia forte, 99,99% de confiança no navegador, suporte dedicado e garantia de reembolso de 25 dias. Código do cupom: SAVE10

Uma imagem detalhada de um dragão em voo
Escrito por

Redator de conteúdo experiente, especializado em certificados SSL. Transformação de tópicos complexos de segurança cibernética em conteúdo claro e envolvente. Contribua para melhorar a segurança digital por meio de narrativas impactantes.