Trabalhando com mapeamentos de domínios customizados

Os mapeamentos de domínio fornecem a rota URL para seu aplicativo ou função Code Engine em um projeto. Com o site Code Engine, esses mapeamentos são criados automaticamente, por padrão, sempre que você implanta um aplicativo ou cria uma função. No entanto, você pode mapear seu próprio domínio personalizado para um aplicativo ou função Code Engine. Essa opção encaminha solicitações do site URL personalizado para o aplicativo ou função. Você pode usar o console Code Engine ou a CLI.

Se você desejar destinar seu aplicativo ou função Code Engine com um domínio que você possui, será possível usar um mapeamento de domínio customizado. Ao definir um mapeamento de domínio personalizado em Code Engine, você define um mapeamento de um para um entre o seu nome de domínio totalmente qualificado (FQDN) e um aplicativo ou função Code Engine no seu projeto.

Um mapeamento de domínio customizado deve apontar para apenas um aplicativo ou função Code Engine. No entanto, é possível configurar vários mapeamentos de domínios para um único aplicativo ou função.

Para trabalhar com mapeamentos de domínio customizados no Code Engine, conclua as etapas a seguir. Observe que algumas etapas são concluídas fora do Code Engine..

  1. Revise as Considerações antes de usar mapeamentos de domínio customizados no Code Engine.
  2. Obtenha seu domínio customizado por meio de um registrador de domínio (fora do Code Engine.
  3. Configure um mapeamento de domínio personalizado em Code Engine para o seu aplicativo ou função(no console Code Engine ou na CLI ).
  4. Conclua a configuração do domínio personalizado com o seu registrador de domínios (fora do site Code Engine ).

Depois de concluir a configuração do domínio personalizado com o registrador de domínios e configurar um mapeamento de domínios para o seu aplicativo ou função em Code Engine, teste o mapeamento de domínios.

No Code Engine, é possível visualizar, atualizar ou excluir mapeamentos de domínio para seus aplicativos ou funções.

Considerações antes de usar mapeamentos de domínio customizados no Code Engine

Antes de implementar mapeamentos de domínio customizado no Code Engine, esteja ciente das considerações a seguir:

  • Use somente mapeamentos de domínios personalizados para domínios protegidos com um certificado SSL/TLS, assinado por uma autoridade certificadora (CA) pública e confiável.
  • É possível definir mapeamentos de domínio customizado que apontem para nomes de domínio público
  • Se o seu nome de domínio puder ser resolvido somente por um sistema de nomes de domínio (DNS) não público, forneça um certificado que liste o nome de domínio e seja assinado por uma CA pública e confiável.
  • Forneça toda a cadeia de certificados, começando com o certificado que corresponde ao domínio personalizado, seguido de todos os certificados intermediários até o certificado raiz.
  • Não é possível usar certificados autoassinados..
  • Não é possível usar certificados que são assinados por uma CA corporativa não confiável ou não pública.
  • Seu certificado deve ter uma data de validade configurada.

Obtendo um domínio customizado e seu certificado TLS e chave privada

Antes de configurar mapeamentos de domínio customizado em Code Engine, deve-se primeiro obter seu domínio customizado de um registrador de domínio (fora do Code Engine).

  1. Em um registro de domínio, obtenha seu domínio customizado; por exemplo, www.example.com.
  2. Obtenha seu certificado SSL/TLS para seu domínio personalizado:
    • Você pode criar um certificado que não seja autocertificado, usando o serviço Let's Encrypt e o Certbot. Se o domínio personalizado estiver sob seu controle e você quiser criar rapidamente um certificado, poderá usar o Certbot e os serviços Let's Encrypt para obter um certificado.

    • Você pode obter um certificado assinado de uma autoridade confiável. Esse tipo de certificado digital é usado para estabelecer a privacidade da comunicação entre um servidor e um cliente. Esses certificados contêm informações que são usadas para criar conexões confiáveis e seguras entre os endpoints. Você também deve obter uma chave privada correspondente para o certificado TLS.

      Você pode obter o certificado e a chave com sua CA. Obtenha um certificado SSL/TLS assinado para seu domínio personalizado. Por motivos de segurança, o site Code Engine é compatível apenas com mapeamentos de domínios personalizados configurados com um certificado TLS/SSL assinado por uma CA pública e confiável.

      Você também pode obter seu certificado e chave em Cloud Internet Services (CIS) solicitando um certificado de origem se o gerenciamento do seu domínio personalizado tiver sido delegado a CIS. Seguindo essa abordagem, você aplica o modo TLS flexível de ponta a ponta.

Como posso usar o Certbot e o serviço Let's Encrypt para meu domínio personalizado?

Em um ambiente corporativo, trabalhe com seu administrador de domínio corporativo para obter os certificados necessários.. No entanto, se o domínio personalizado estiver sob seu controle e você quiser um certificado rápido, poderá usar o Certbot e o serviço Let's Encrypt para obter um certificado:

  1. Instale o Certbot Certbot é um cliente para o protocolo Automatic Certificate Management Environment(ACME) para automatizar interações entre uma CA e um servidor. O serviço Let' s Encrypt usa esse cliente para verificar a propriedade do domínio e emitir certificados. Na documentação do Certbot, selecione Other como o software e selecione o sistema operacional da sua estação de trabalho para obter as informações aplicáveis à instalação da linha de comando do Certbot.

  2. Execute o seguinte comando para criar seu certificado. Este comando de exemplo cria um certificado para os domínios customizados example.com e www.example.com Assegure-se de atualizar o comando para seu próprio domínio customizado.

    certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
    
  3. Para verificar se você possui o domínio, configure um registro TXT com seu registro de domínio para os domínios que você solicitou na etapa anterior com valores que foram fornecidos com a saída da ferramenta Certbot; por exemplo, _acme_challenge.example.com e _acme_challenge.ww.example.com. Após configurar o registro TXT, continue com o comando Certbot.

  4. O Certbot recupera o certificado assinado por Let' s Encrypt. O local onde o certificado é armazenado é fornecido pela saída Certbot. Localize os arquivos fullchain.pem e privkey.pem..

Comando de exemplo para executar Certbot em um sistema Ubuntu

sudo certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com

Saída de exemplo para a solicitação de certificado para example.com e www.example.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.example.com.
with the following value:
<MASKED>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.www.example.com
with the following value:
<MASKED>
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)
Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.www.example.com.
Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
value(s) you've just added.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2023-02-01.
These files will be updated when the certificate renews.
NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
 * Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

O seu certificado está pronto.

Como posso usar um certificado de origem obtido em meu site CIS para meu domínio personalizado?

Se você obtiver o certificado e a chave de sua CA pública e confiável, eles estarão assinados e seguros. Você trabalha com sua CA para obter o certificado SSL/TLS assinado para seu domínio personalizado.

Você também pode usar o site Cloud Internet Services (CIS) para solicitar um certificado de origem e, em seguida, configurar o site CIS para encaminhar os endereços IP dos usuários para o seu aplicativo ou função de acordo com esse fluxo:

  1. Solicite seu certificado de origem:

    1. No console IBM Cloud, vá para a lista de recursos e filtre a instância Internet Services. Nos resultados da pesquisa, clique no nome da instância de destino para ver sua página de detalhes.
    2. Na página de detalhes da instância CIS, vá para a página Origin (Security>Origin ) e clique em Order.
    3. No painel "Order origin certificate" (Solicitar certificado de origem), mantenha todos os padrões e insira o nome de domínio com o qual você deseja trabalhar. Por exemplo, myapp.example.com. Clique em Order para confirmar.
    4. Copie os valores do certificado de origem e da chave privada. Essas informações são necessárias quando você mapeia seu domínio.
  2. Configure e aplique o modo TLS flexível de ponta a ponta.

    O certificado de borda é fornecido por CIS. O certificado de origem é usado para criptografar apenas o tráfego entre CIS e o aplicativo ou função Code Engine.

Depois que o registro DNS foi criado com sucesso em CIS, você configurou CIS para encaminhar os endereços IP dos usuários para o seu aplicativo ou função.

Configurando mapeamentos de domínio customizado no Code Engine

Agora você está familiarizado com os conceitos de trabalho com mapeamentos de domínios personalizados e obteve seu domínio personalizado de um registrador de domínios. Você está pronto para configurar seus aplicativos ou funções do Code Engine para usar mapeamentos de domínio personalizados. Consulte:

Visualizando mapeamentos de domínio

Visualizando mapeamentos de domínio a partir do console

É possível visualizar uma lista de todos os mapeamentos de domínio gerados automaticamente e customizados para seu aplicativo ou função a partir do console. Por padrão, o conteúdo da tabela tem o escopo definido para mapeamentos de domínio customizados Use o filtro de Tipo para modificar a visualização.

Esta visualização exibe informações sobre a expiração do certificado associado ao seu mapeamento. Quando o certificado expira, o aplicativo ou a função não é mais acessível com o mapeamento de domínio e essa condição produz um erro SSL. Se você tiver um certificado prestes a expirar, atualize o mapeamento de domínio customizado para usar um certificado atualizado.

Essa visualização também exibe informações sobre o aplicativo ou função específica associada ao mapeamento de domínio e o tipo do mapeamento de domínio. Para mapeamentos gerados pelo site Code Engine, o tipo pode ser System-public, System-private, ou System-internal. Para mapeamentos de domínio customizados criados, o tipo é Custom.

  1. Depois que o projeto estiver no status Ativo, clique no nome do projeto na página Code Engine Projects.
  2. Na página de visão geral, clique em Domain mappings (Mapeamentos de domínio ).
  3. Na página de mapeamentos de domínio, visualize uma lista dos mapeamentos de domínio definidos para seus aplicativos ou funções existentes. Type indica se o mapeamento é gerado automaticamente ou se é um mapeamento de domínio customizado.

Visualizando Mapeamentos de Domínio com a CLI

Para visualizar uma listagem de todos os mapeamentos de domínio customizados para seus aplicativos ou funções com a CLI, use o comando ibmcloud ce domainmapping list. Por exemplo,

ibmcloud ce domainmapping list

Saída de exemplo

Listing domain mappings...
OK

Name              CNAME                                                        Target  Target-Type  Status  Secret Name  Age
www.example.com   custom.abcdabcdabc.us-south.codeengine.appdomain.cloud       myapp   app          ready   mytlssecret  36m

Para visualizar uma lista de todos os mapeamentos de domínio para seus aplicativos ou funções, incluindo os mapeamentos de domínio customizados que você cria e os mapeamentos de domínio gerados automaticamente que o Code Engine cria, especifique a opção --all com o comando ibmcloud ce domainmapping list. Mapeamentos de domínio customizados exibem um valor para CNAME.

Atualizando mapeamentos de domínio

Quando você cria um mapeamento de domínio customizado, o segredo do TLS é válido até que o certificado expire Na página de mapeamento de domínio, é possível visualizar informações sobre os dias restantes até que o certificado expire.

É importante saber se o certificado usado com seu domínio customizado lista vários nomes de domínio ou se ele usa um certificado curinga. Quando seu certificado estiver perto de expirar (ou já tiver expirado), edite o segredo TLS existente para o mapeamento de domínio com credenciais atualizadas. Não crie um segredo TLS diferente com credenciais atualizadas para seu mapeamento de domínio.

Atualizando um mapeamento de domínio a partir do console

Suponha que o mapeamento de domínio customizado para www.example.com tenha um certificado que expire em breve. É possível atualizar o mapeamento de domínio do console para usar um certificado atualizado ou até mesmo substituir o segredo do TLS para o mapeamento. Também é possível atualizar seu mapeamento de domínio para apontar para um aplicativo ou função diferente em seu projeto.

  1. Na página Code Engine Projects, acesse seu projeto.
  2. Na página Visão Geral, clique em Mapeamentos de Domínio.
  3. Na página Mapeamentos de domínio, Clique no ícone Ações Ações > Editar para editar o mapeamento.. Ou é possível clicar na linha do domínio customizado definido para atualizar o mapeamento.
  4. No painel "Atualizar um mapeamento de domínio", você pode alterar o aplicativo ou a função que está associada a esse mapeamento de domínio. Como alternativa, você pode substituir ou atualizar o segredo TLS para esse mapeamento.
  5. Clique em Atualizar para salvar suas mudanças.

Depois de atualizar o mapeamento, você pode visualizar a lista de mapeamentos de domínios para as alterações mais recentes.

Atualizando um mapeamento de domínio com a CLI

Para atualizar um mapeamento de domínio customizado, use o comando ibmcloud ce domainmapping update..

Suponha que o mapeamento de domínio customizado para www.example.com tenha um certificado que expire em breve. É possível atualizar o mapeamento de domínio para usar um certificado atualizado ou até mesmo substituir o segredo do TLS para o mapeamento com a opção --tls-secret Você também pode usar a opção --target para atualizar o mapeamento do domínio para apontar para um aplicativo ou função diferente em seu projeto.

O exemplo a seguir atualiza o mapeamento de domínio personalizado www.example.com para usar um segredo TLS atualizado chamado mytlssecret.

  1. Atualize o segredo TLS mytlssecret com as informações atualizadas do certificado e da chave privada, que estão contidas nos arquivos mycertchain2.txt e myprivatekey2 em sua estação de trabalho local.

    ibmcloud ce secret update --name mytlssecret --cert-chain-file  mycertchain2.txt --private-key-file myprivatekey2.txt
    

    Saída de exemplo

    Updating secret mytlssecret..
    OK
    
    
  2. Atualize o mapeamento de domínio para usar o segredo do TLS atualizado

    ibmcloud ce domainmapping update --domain-name www.example.com --tls-secret mytlssecret2
    

    Saída de exemplo

    Getting domain mapping 'www.example.com.org'...
    Updating domain mapping 'www.example.com.org'...
    
    

Excluindo mapeamentos de domínio

Ao excluir um mapeamento de domínio, você está removendo a associação de seu aplicativo ou função Code Engine com seu mapeamento de domínio customizado no Code Engine. Essa ação não exclui o aplicativo, a função ou o segredo do TLS associado..

A exclusão de um aplicativo ou função referenciado em um mapeamento de domínio também exclui qualquer mapeamento de domínio personalizado associado ao aplicativo ou função.

Quando você exclui um mapeamento de domínio personalizado e as configurações de DNS do domínio permanecem, seu tráfego ainda é roteado para o projeto Code Engine. Por exemplo, os pontos CNAME para o projeto Code Engine ainda podem ser definidos. Entretanto, a solicitação é respondida com uma mensagem de erro 404 (não localizada). Assegure-se de que o registro CNAME associado para o nome completo do domínio seja atualizado nas configurações de DNS pelo registro de domínio.

Excluindo mapeamentos de domínio do console

No console, é possível excluir apenas mapeamentos de domínio do tipo Custom. Os mapeamentos de domínio gerados automaticamente pelo site Code Engine não podem ser excluídos.

Para excluir um mapeamento de domínio customizado do console,

  1. Na página Code Engine Projects, acesse seu projeto.
  2. Na página Visão geral, clique em Mapeamentos de domínio para visualizar uma listagem de mapeamentos de domínio definidos
  3. (Opcional) Clique em Tipo para filtrar os mapeamentos de domínio por tipo
  4. Na página Mapeamentos de domínio, exclua o mapeamento de domínio customizado que você deseja remover de seu aplicativo ou função. Click the Ações icon Ações > Excluir to delete the mapping.

Excluindo mapeamentos de domínio com a CLI

Para excluir um mapeamento de domínio customizado com a CLI, use o comando ibmcloud ce domainmapping delete.

Você pode excluir somente os mapeamentos de domínio personalizados; não é possível excluir os mapeamentos de domínio gerados pelo site Code Engine. Execute o comando ibmcloud ce domainmapping list para exibir uma lista de mapeamentos de domínio customizados com a CLI.. Um mapeamento de domínio customizado possui um registro CNAME gerado Na CLI, é possível obter o valor CNAME gerado para um mapeamento de domínio customizado especificado usando o comando ibmcloud ce domainmapping get.

ibmcloud ce domainmapping delete --domain-name www.example.com -f

Saída de exemplo

Deleting domain mapping 'www.example.com'...
OK

Próximas etapas

Obtenção do registro CNAME para um mapeamento de domínio personalizado

Code Engine fornece o destino CNAME para seu mapeamento de domínio customizado definido.

Para obter o registro CNAME do console do Code Engine, abra seu mapeamento de domínio customizado definido e visualize a página Atualizar mapeamento de domínio. Abra a página Atualizar mapeamento de domínio de uma das seguintes maneiras:

  • Na tabela Mapeamentos de domínio, clique na linha de seu domínio customizado definido
  • Clique no ícone Ações Ações > Editar para editar o mapeamento..

Na página Atualizar mapeamentos de domínio, é possível obter o valor CNAME target. Por exemplo, o mapeamento www.example.com tem o valor custom.abcdabcdabc.us-east.codeengine.appdomain.cloud CNAME, em que abcdabcdabc é um identificador exclusivo gerado automaticamente e us-east é a região de seu projeto.

Para obter o registro CNAME com a CLI, use o comando ibmcloud ce domainmapping get.. Por exemplo:

ibmcloud ce domainmapping get --domain-name www.example.com

Saída de exemplo

Getting domain mapping 'www.example.com'...
OK

Domain Name:  www.example.com
CNAME:        custom.abcdabcdabc.us-south.codeengine.appdomain.cloud
Target Name:  myapp
Target Type:  app
TLS Secret:   mytlssecret
Status:       ready

Depois de ter o destino CNAME, você estará pronto para incluir a entrada de registro CNAME nas configurações de DNS de seu domínio customizado Observe que a publicação do registro CNAME com o registrador de domínio pode levar algum tempo para preencher as mudanças de DNS na internet

Adição de um registro DNS em CIS para direcionar o tráfego para seu aplicativo Code Engine

Se você tiver uma instância CIS para gerenciar seu domínio personalizado, atualize os registros DNS para apontar para o seu projeto Code Engine, como segue. Observe que, para registradores de domínios que não sejam CIS, as etapas são diferentes, mas o objetivo é o mesmo: criar um registro DNS do tipo CNAME que aponte para o ponto de extremidade CNAME dos projetos Code Engine:

  1. Na página de detalhes da instância CIS, vá para Confiabilidade>DNS. Role até os registros DNS e clique em Add (Adicionar ).

  2. No painel "Adicionar registro":

    • Selecione CNAME como o tipo.
    • Defina seu subdomínio; por exemplo, myapp.
    • Forneça o valor de destino CNAME que você copiou anteriormente, como o nome de domínio Alias.
    • Verifique se a saída de detalhes do registro DNS indica que o mapeamento do domínio é um alias. Por exemplo, procure uma mensagem semelhante a: myapp.example.com is an alias of custom.<id>.<region>.codeeng.appdomain.cloud. Clique em Add para confirmar a adição do registro DNS.

    Se for necessário registrar vários domínios e subdomínios, como example.com e www.example.com, será necessário repetir as etapas para cada subdomínio. Você pode considerar a criação de um único certificado que abranja mais de um domínio. No entanto, você pode usar esse único certificado apenas uma vez em uma região. Se você planeja usar seus domínios personalizados em mais de um projeto em uma única região, mantenha-os separados.

Agora você está familiarizado com o trabalho com mapeamentos de domínios personalizados e obteve um domínio personalizado com seu certificado TLS e chave privada. Você está pronto para configurar um mapeamento de domínio personalizado em Code Engine para seu aplicativo ou função.