Receber certificados TLS: um exemplo

Este tópico é apenas um exemplo. Ele explica como conseguir um certificado TLS da autoridade de certificação (CA, na sigla em inglês) Let's Encrypt (em inglês). Essas etapas são fornecidas principalmente como um exemplo a ser seguido se você não tiver outra maneira pronta de obter um par de certificado/chave autorizado por uma CA. No exemplo, mostramos como gerar certificados usando a CA Let's Encrypt, o cliente Certbot e o Cloud DNS do Google Cloud Platform.

Onde usar esses certificados

Você precisa fornecer certificados TLS para dois gateways de entrada do Istio expostos fora do cluster:

Gateway Requisito de TLS
Gateway de entrada do ambiente de execução Você pode usar um par de certificado/chave autoassinado ou certificados TLS autorizados.
Gateway de entrada MART (opcional quando não estiver usando o Apigee Connect) Requer um certificado/par de chaves TLS autorizado ou um secret do Kubernetes.
Consulte também Conexões externas.

Requisitos

Você precisará de um nome de domínio proveniente de um registrador de nomes de domínio. É possível registrar um nome de domínio por meio do Google Domains ou outro registro de domínios da sua escolha.

Configurar o Cloud DNS

Para conseguir os certificados TLS autorizados, é necessário ter um nome de domínio qualificado. As etapas a seguir explicam como usar o Google Cloud DNS para conseguir um nome de domínio e gerenciar seus servidores de domínio.
  1. Abra o Console do Google Cloud e faça login com a conta que você criou na Etapa 1: criar uma conta do Google Cloud.
  2. Selecione o projeto criado na Etapa 2: criar um projeto do GCP.
  3. Se você ainda não tiver feito isso, ative a API Cloud DNS. Consulte Como ativar APIs.
  4. Crie um endereço IP estático:
    • Se você estiver no GKE, siga as instruções em Como reservar um endereço IP externo estático para criar um endereço IP estático que os processos externos possam usar para se comunicar com a entrada de ambiente de execução híbrido. Você pode dar o nome que quiser ao nome, por exemplo: apigee-hybrid-runtime. Quando terminar, você usará o número do IP na configuração do cluster na próxima etapa. Por exemplo: 34.66.75.196
    • Se você estiver no Anthos GKE, siga as instruções na Documentação do Anthos GKE para criar um endereço IP estático.
  5. Receba o IP externo que você acabou de reservar.
  6. Crie o conjunto de registros para o endpoint do ambiente de execução de entrada do Istio. Esse é o endereço para fazer chamadas de API para o gateway híbrido. Insira o IP externo que você recebeu na etapa anterior e adicione um prefixo ao nome do domínio, como example-endpoint. Para mais instruções, consulte Criar um novo registro.
    1. Crie uma zona pública gerenciada. Para mais instruções, consulte Criar uma zona pública gerenciada.
    2. Crie um novo conjunto de registros com:
      • Nome do DNS: o nome das chamadas de API externas do endpoint que se comunicarão, como api-services ou example-endpoint
      • Tipo de registro de recurso: A
      • TTL e Unidade TTL: aceitar padrões
      • IP Addhook: o IP estático que você criou.
  7. A visualização Detalhes da zona listará os servidores DNS como os dados NS da nova zona. Copie os dados do registro DNS, conforme mostrado no exemplo a seguir:

  8. Retorne à página do seu domínio no registrador, por exemplo, o Google Domains.
  9. Selecione seu domínio.
  10. Selecione DNS.
  11. Na seção "Servidores de nomes", clique em Editar.
  12. Insira os servidores de nomes de domínio que você copiou da página Serviços de rede do Cloud DNS. Por exemplo:

Agora o Google Cloud DNS gerenciará os registros DNS do seu domínio.

Instalar o Certbot em uma VM

Agora que o Cloud DNS está configurado para gerenciar os servidores de domínio, instale o cliente Certbot com o plug-in dns_google em uma VM do Cloud. O cliente permite que você receba certificados autorizados para seu domínio a partir de um endpoint Let's Encrypt.

  1. Abra o Console do Google Cloud e faça login com a conta que você criou na Etapa 1: criar uma conta do Google Cloud.
  2. Selecione o projeto criado na Etapa 2: criar um projeto do GCP.
  3. Selecione IAM e administrador > Contas de serviço.

    A visualização "Contas de serviço" exibe uma lista das contas de serviço do projeto.

  4. Para criar uma nova conta de serviço, clique em +Criar conta de serviço na parte superior da visualização.

    A visualização Detalhes da conta de serviço é exibida.

  5. No campo Nome da conta de serviço, insira o nome da conta de serviço.

    Se quiser, adicione uma descrição no campo Descrição da conta de serviço. As descrições são úteis para lembrar você sobre como uma conta de serviço específica é usada.

  6. Clique em Criar

    O GCP cria uma nova conta de serviço e exibe a visualização Permissões da conta de serviço. Use essa visualização para atribuir um papel à sua nova conta de serviço.

  7. Clique na lista suspensa Selecionar um papel.
  8. Selecione o papel Proprietário do projeto.
  9. Clique em Continuar.
  10. Clique em Concluído.
  11. No console do GCP, selecione Compute Engine > Instâncias de VM.
  12. Crie uma instância de VM chamada certmanager.
  13. Na seção "Disco de inicialização", escolha CentOS7 e 20 GB para a unidade permanente SSD.
  14. Defina a conta de serviço como a que você criou acima.
  15. Instale o Certbot e o plug-in dns_google na máquina e execute o cliente do Certbot:
      sudo su -
      yum -y install yum-utils
      yum install certbot -y
      yum install certbot-dns-google -y
      certbot certonly --dns-google -d *.your_domain_name,*.your_domain_name --server https://acme-v02.api.letsencrypt.org/directory
      

    Exemplo:

    sudo su -
    yum -y install yum-utils
    yum install certbot -y
    yum install certbot-dns-google -y
    certbot certonly --dns-google -d *.apigee-hybrid-docs.net,*.apigee-hybrid-docs.net --server https://acme-v02.api.letsencrypt.org/directory
  16. Agora é possível encontrar o certificado autorizado e os arquivos de chave privada nesse diretório: cd /etc/letsencrypt/live/your_domain_name/

    Exemplo:

    cd /etc/letsencrypt/live/apigee-hybrid-docs.net
    ls
      cert.pem  chain.pem  fullchain.pem  privkey.pem  README
  17. Copie os arquivos fullchain.pem e privkey.pem para sua máquina local.
  18. Opcional: crie um secret do Kubernetes com o certificado/par de chaves. Consulte as instruções na Opção 2: Secret do Kubernetes em Como configurar o TLS e o mTLS na entrada do Istio.
  19. Atualize seu arquivo de modificação para apontar para o certificado e a chave privada. Para o hostAliases, use o nome do DNS que você criou anteriormente.

    Exemplo:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
      sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
      sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
      replicaCountMin: 1
      replicaCountMax: 1

    Ou se estiver usando o secrets do Kubernetes:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        tlsMode: SIMPLE  # Note: SIMPLE is the default, MUTUAL is also an available value.
        sslSecret: myorg-test-policy-secret"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
        sslSecret: myorg-test-policy-secret"
      replicaCountMin: 1
      replicaCountMax: 1
    
    ...  
  20. Aplique as alterações:

    Se você alterou a configuração mart, aplique as alterações:

    apigeectl apply -f your_overrides_file --all-envs

    Se você alterou a configuração envs, aplique as alterações:

    apigeectl apply -f your_overrides_file --all-envs
  21. Testar a configuração

    Implante e teste um proxy, conforme explicado em Criar e implantar um novo proxy de API.