Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Use cert-manager to manage certificates for ASM gateways

Última atualização: Jun 28, 2026

Ao expor serviços por meio de gateways de entrada do Service Mesh (ASM), o tráfego não é criptografado por padrão. O cert-manager automatiza a emissão e a renovação de certificados TLS no Kubernetes. Assim, você pode carregar certificados nos gateways de entrada do ASM e servir tráfego via HTTPS sem precisar rotacionar certificados manualmente.

Como funciona

O cert-manager integra-se aos gateways do ASM em três etapas:

  1. Crie um Issuer -- defina como obter os certificados (autoassinados ou assinados por CA).

  2. Solicite um Certificate -- o cert-manager gera um certificado TLS e o armazena como um Secret do Kubernetes.

  3. Referencie o Secret em um Gateway -- o gateway de entrada do ASM carrega o certificado do campo credentialName e encerra a conexão TLS.

Tipos de certificado

Tipo

Criptografia

Autenticação

Confiável pelo navegador

Mais indicado para

Autoassinado

Sim

Não

Não -- navegadores exibem um aviso de segurança

Desenvolvimento, testes e acesso via CLI

Validado por dns

Sim

Sim -- emitido por uma Autoridade Certificadora (CA) confiável

Sim

Acesso via CLI e via navegador

Pré-requisitos

Instale o cert-manager

Nota

A versão do cert-manager deve ser compatível com a versão do Kubernetes. Para verifique o mapeamento de versões, consulte Supported releases.

  1. Crie o namespace cert-manager:

       kubectl create namespace cert-manager
  2. Adicione o repositório Helm da Jetstack e atualize-o:

       helm repo add jetstack https://charts.jetstack.io
       helm repo update
  3. Instale o cert-manager com as Custom Resource Definitions (CRDs):

       helm install \
         cert-manager jetstack/cert-manager \
         --namespace cert-manager \
         --version v1.14 \
         --set installCRDs=true

Emita um certificado autoassinado

Certificados autoassinados criptografam o tráfego, mas os navegadores não os consideram confiáveis. Utilize-os apenas para desenvolvimento e testes.

Etapa 1: Crie um Issuer e um Certificate

  1. Salve o YAML a seguir como issuer.yaml. Este arquivo defina um Issuer autoassinado e solicita um certificado de CA:

    Show the issuer.yaml file

       apiVersion: cert-manager.io/v1
       kind: Issuer
       metadata:
         name: selfsigned
       spec:
         selfSigned: {}
       ---
       apiVersion: cert-manager.io/v1
       kind: Certificate
       metadata:
         name: istio-ingressgateway-certs
       spec:
         isCA: true
         duration: 2160h # 90 days
         secretName: istio-ingressgateway-certs
         commonName: istio-ingressgateway-certs
         subject:
           organizations:
           - cluster.local
           - cert-manager
         issuerRef:
           name: selfsigned
           kind: Issuer
           group: cert-manager.io
  2. Aplique a configuração no namespace istio-system:

       kubectl apply -f issuer.yaml -n istio-system
  3. Verifique se o Secret do certificado existe:

       kubectl get secret -n istio-system

    Saída esperada:

       NAME                                        TYPE                             DATA   AGE
       istio-ingressgateway-certs                  kubernetes.io/tls                3      68m

    Um Secret do tipo kubernetes.io/tls com DATA=3 confirma a criação do certificado.

Etapa 2: Configure o gateway do ASM para HTTPS

  1. Implante a aplicação httpbin como backend de teste.

  2. Adicione um listener HTTPS na porta 443 ao Istio Gateway do httpbin. Aplique essa configuração usando o kubeconfig da instância do ASM ou edite o YAML na página Gateway do console do ASM. Para mais detalhes, consulte Manage Istio gateways.

       apiVersion: networking.istio.io/v1beta1
       kind: Gateway
       metadata:
         name: httpbin
         namespace: default
       spec:
         selector:
           istio: ingressgateway
         servers:
           - hosts:
               - '*'
             port:
               name: test
               number: 80
               protocol: HTTP
           - hosts:
               - '*'
             port:
               name: https
               number: 443
               protocol: HTTPS
             tls:
               credentialName: istio-ingressgateway-certs
               mode: SIMPLE

    O campo credentialName referencia o Secret criado pelo cert-manager. O modo TLS SIMPLE habilita o TLS unidirecional (apenas autenticação do servidor).

Etapa 3: Verifique o acesso HTTPS

  1. Obtenha o endereço IP do gateway de entrada e armazene-o em uma variável:

       GATEWAY_IP=$(kubectl get svc -n istio-system -l istio=ingressgateway \
         -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
       echo $GATEWAY_IP
  2. Envie uma solicitação HTTPS para o serviço httpbin. A flag -k ignora a verificação do certificado porque ele é autoassinado:

       curl -k --resolve istio-ingressgateway-certs:443:$GATEWAY_IP \
         https://istio-ingressgateway-certs/status/418 -I

    O código de status 418 confirma o funcionamento do HTTPS. O domínio istio-ingressgateway-certs corresponde ao commonName no recurso Certificate.

Solução de problemas

Secret do certificado não criado

Verifique o status do recurso Certificate:

kubectl describe certificate istio-ingressgateway-certs -n istio-system

Analise a seção Events em busca de mensagens de erro. Causas comuns incluem:

  • Issuer sem o status Ready. Execute kubectl get issuer -n istio-system para verificar.

  • Pod do controlador do cert-manager parado. Execute kubectl get pods -n cert-manager para verificar.

Gateway não serve HTTPS

Confirme se o Secret existe no namespace istio-system:

kubectl get secret istio-ingressgateway-certs -n istio-system

O Secret deve estar em istio-system para que o gateway de entrada possa carregá-lo. Caso o Secret exista, mas o HTTPS ainda falhe, verifique os logs do gateway de entrada:

kubectl logs -n istio-system -l istio=ingressgateway --tail=50

Incompatibilidade entre versões do cert-manager e do Kubernetes

Se os pods do cert-manager falharem ao iniciar ou as CRDs não forem instaladas, confirme se a versão do cert-manager é compatível com a versão do Kubernetes. Consulte Supported releases.

Nota

Se ocorrer um erro ao usar o cert-manager em um cluster no plano de dados, entre no grupo 30421250 do DingTalk para obter suporte.

Limpeza

Remova os recursos criados neste guia:

# Delete the Gateway and httpbin resources
kubectl delete gateway httpbin -n default

# Delete the Certificate and Issuer
kubectl delete certificate istio-ingressgateway-certs -n istio-system
kubectl delete issuer selfsigned -n istio-system

# Delete the TLS Secret
kubectl delete secret istio-ingressgateway-certs -n istio-system