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. |
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.- 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.
- Selecione o projeto criado na Etapa 2: criar um projeto do GCP.
- Se você ainda não tiver feito isso, ative a API Cloud DNS. Consulte Como ativar APIs.
- 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.
- 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:
- Receba o IP externo que você acabou de reservar.
- 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.- Crie uma zona pública gerenciada. Para mais instruções, consulte Criar uma zona pública gerenciada.
- 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
ouexample-endpoint
- Tipo de registro de recurso: A
- TTL e Unidade TTL: aceitar padrões
- IP Addhook: o IP estático que você criou.
- Nome do DNS: o nome das chamadas de API externas do endpoint que se comunicarão, como
- 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:
- Retorne à página do seu domínio no registrador, por exemplo, o Google Domains.
- Selecione seu domínio.
- Selecione DNS.
- Na seção "Servidores de nomes", clique em Editar.
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.
- 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.
- Selecione o projeto criado na Etapa 2: criar um projeto do GCP.
- 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.
- 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.
- 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.
- 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.
- Clique na lista suspensa Selecionar um papel.
- Selecione o papel Proprietário do projeto.
- Clique em Continuar.
- Clique em Concluído.
- No console do GCP, selecione Compute Engine > Instâncias de VM.
- Crie uma instância de VM chamada certmanager.
- Na seção "Disco de inicialização", escolha CentOS7 e 20 GB para a unidade permanente SSD.
- Defina a conta de serviço como a que você criou acima.
- 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
- 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 - Copie os arquivos
fullchain.pem
eprivkey.pem
para sua máquina local. - 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.
- Atualize seu arquivo de modificação para apontar para o certificado e a chave privada.
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 ...
- 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
Testar a configuração
Implante e teste um proxy, conforme explicado em Criar e implantar um novo proxy de API.