Como configurar o Cloud Run para Anthos no Google Cloud

Neste guia, mostramos como configurar um novo cluster do Google Kubernetes Engine com o Cloud Run para Anthos no Google Cloud ativado. Como é possível usar o Console do Cloud ou a linha de comando gcloud, as instruções abrangem ambos. Se você estiver ativando o Cloud Run em um cluster já existente, consulte Como ativar o Cloud Run para Anthos no Google Cloud em clusters atuais.

A ativação do Cloud Run para Anthos no Google Cloud instala o Istio e o Knative Serving no cluster para conectar e gerenciar suas cargas de trabalho sem estado. Para mais informações, consulte Visão geral da arquitetura do Cloud Run para Anthos no Google Cloud.

Pré-requisitos

  1. Você precisa ter uma assinatura do Anthos. Para novos clientes, um teste gratuito está disponível até 15 de outubro de 2020.
  2. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  3. No Console do Cloud, na página do seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

  4. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como confirmar se a cobrança está ativada para o seu projeto.

Como configurar o gcloud

É possível usar o Console do Cloud ou a linha de comando gcloud para usar o Cloud Run para Anthos no Google Cloud, mas talvez seja necessário usar a linha de comando gcloud para algumas tarefas.

Para configurar a linha de comando gcloud do Cloud Run para Anthos no Google Cloud:

  1. Instale e inicie o SDK do Cloud.

  2. Defina a configuração padrão do projeto para gcloud como a que você acabou de criar:

    gcloud config set project PROJECT-ID

    Substitua PROJECT-ID pelo ID do projeto que você criou.

  3. Defina zone como a zona de sua escolha para o novo cluster. É possível usar qualquer zona compatível com o GKE, por exemplo:

    gcloud config set compute/zone ZONE

    Substitua ZONE pela sua zona.

  4. Ative as APIs do projeto a seguir, necessárias para criar um cluster, compilar e publicar um contêiner no Google Container Registry:

    gcloud services enable container.googleapis.com containerregistry.googleapis.com cloudbuild.googleapis.com
  5. Atualize os componentes da gcloud instalados:

    gcloud components update
  6. Instale a ferramenta de linha de comando kubectl:

    gcloud components install kubectl

Como criar um cluster com o Cloud Run ativado

Nestas instruções, criaremos um cluster com esta configuração:

Estas são as configurações recomendadas para um novo cluster.

É possível usar a linha de comando gcloud ou o Console para criar um cluster. Clique na guia apropriada para ver instruções.

Console

Para criar um cluster e ativá-lo no Cloud Run para Anthos no Google Cloud:

  1. Acesse a página do Google Kubernetes Engine no Console do Cloud:

    Acessar o Google Kubernetes Engine

  2. Clique em Criar cluster para abrir a página Criar um cluster do Kubernetes.

  3. Na seção Princípios básicos do cluster, conclua o seguinte:

    • Insira o Nome do cluster.
    • Escolha Zonal ou regional para o tipo de local: ambos funcionarão com o Cloud Run para Anthos no Google Cloud. Os clusters zonais são mais baratos, mas geram inatividade durante os upgrades do mestre.
    • Selecione uma zona ou região para o cluster dependendo de sua escolha na etapa anterior. Escolha uma zona ou região próxima a você, por exemplo, us-central1-a.
    • Na lista suspensa, selecione uma das versões disponíveis como a versão do cluster mestre.
  4. Na seção Recursos, marque a caixa de seleção Ativar Cloud Run para Anthos.

  5. Clique em Criar para criar e provisionar o cluster com a configuração que você acabou de concluir. Pode levar alguns instantes para que esse processo seja concluído.

Linha de comando

Para criar um novo cluster que ativa o Cloud Run para Anthos no Google Cloud:

  1. Crie um novo cluster:

    gcloud container clusters create CLUSTER-NAME \
    --zone=ZONE \
    --addons=HttpLoadBalancing,CloudRun \
    --machine-type=n1-standard-2 \
    --num-nodes=3 \
    --cluster-version=GKE-VERSION \
    --enable-stackdriver-kubernetes

    Essas instruções não permitirão o escalonamento automático de cluster para redimensionar clusters para demanda. O Cloud Run para Anthos no Google Cloud escalará automaticamente as instâncias no cluster.

  2. Aguarde a conclusão da criação do cluster.

Como criar um cluster particular com o Cloud Run ativado

Por padrão, o cluster criado acima pode configurar o acesso com base em redes públicas. Se você quiser criar um cluster particular habilitado para o Cloud Run, que isole pods, nós e cargas de trabalho de conectividade com redes públicas, consulte as instruções a seguir. Caso contrário, pule para a próxima seção.

  1. Crie um cluster particular com pelo menos quatro vCPUs.

    Criar um cluster particular

  2. Será possível pular estas instruções se você estiver usando o Cloud Run for Anthos em um Cluster do GKE com as versões a seguir:
    • 1.16.8-gke.7+
    • 1.15.11-gke.9+
    Para implantar um serviço no Cloud Run for Anthos em um cluster particular do GKE, você precisa permitir conexões TCP de servidores mestre para nós na porta 8443 e especificar manualmente a porta 8443 na lista de conexões TCP permitidas. Para fazer isso, edite as regras de firewall no projeto:
    1. Visualize o bloco CIDR do mestre do cluster e registre o valor no campo masterIpv4CidrBlock:

      gcloud container clusters describe CLUSTER_NAME
    2. Visualize e registre o valor no campo TARGET_TAGS:

      gcloud compute firewall-rules list \
                --filter 'name~^gke-CLUSTER_NAME' \
                 --format 'table(
                         name,
                         network,
                         direction,
                         sourceRanges.list():label=SRC_RANGES,
                         allowed[].map().firewall_rule().list():label=ALLOW,
                         targetTags.list():label=TARGET_TAGS
                 )'
    3. Adicione uma regra de firewall usando os valores registrados acima:

      gcloud compute firewall-rules create FIREWALL_RULE_NAME \
           --action ALLOW \
           --direction INGRESS \
           --source-ranges masterIpv4CidrBlock \
           --rules tcp:8443 \
           --target-tags TARGET_TAGS

      Para mais informações, consulte Como criar regras de firewall.

Como configurar o gcloud para cluster e plataforma

Depois de criar o cluster,

  • Defina sua plataforma padrão como gke.
  • Se quiser, defina padrões para o nome do cluster e o local do cluster para evitar solicitações subsequentes quando você usar a linha de comando.
  • Receba credenciais que permitem que a linha de comando gcloud acesse seu cluster.

Para definir padrões:

  1. Defina a plataforma padrão como gke, defina o cluster padrão e o local do cluster e receba as credenciais da seguinte maneira:

    gcloud config set run/platform gke
    gcloud config set run/cluster CLUSTER
    gcloud config set run/cluster_location ZONE
    gcloud container clusters get-credentials CLUSTER

    Substitua:

    • CLUSTER pelo nome do cluster;
    • ZONE pelo local do cluster.
  2. Os clusters do Kubernetes vêm com um namespace chamado default. Para informações sobre namespaces e por que convém criar e usar um namespace diferente de default, consulte namespace na documentação do Kubernetes. Para criar um novo namespace, execute:

    kubectl create namespace NAMESPACE

    Substitua NAMESPACE pelo namespace que você quer criar.

  3. Se você tiver criado um novo namespace na etapa anterior e quiser usá-lo em vez do namespace default, defina esse novo namespace como o padrão a ser usado quando invocar a linha de comando gcloud:

    gcloud config set run/namespace NAMESPACE

Como ativar métricas em um cluster com a identidade da carga de trabalho

Ao ativar a Identidade da carga de trabalho, o Cloud Run para Anthos não informa determinadas métricas, como contagem de solicitações de revisão ou latência de solicitação para o Pacote de operações do Google Cloud, mas continua a gerar relatórios de métricas para CPU e memória.

Se quiser ativar todas as métricas, você precisa definir manualmente as permissões para gravá-las no Cloud Monitoring concedendo o papel Gravador da métrica do Monitoring à Conta de serviço do Google (GSA, na sigla em inglês) associada ao serviço do Cloud Run para Anthos.

Conceda as permissões do papel de gravador de métricas do Monitoring à GSA do serviço:

gcloud projects add-iam-policy-binding PROJECT_ID 
--member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
--role=roles/monitoring.metricWriter

Substitua:

  • PROJECT_ID pelo ID de um projeto de cluster que hospeda sua KSA;
  • GSA_PROJECT pelo ID do projeto de uma GSA que não está no cluster. Use qualquer GSA na sua organização.

Para mais informações, consulte Como conceder, alterar e revogar o acesso aos recursos.

Para configurar os serviços fornecidos pelas APIs do Google Cloud, como as APIs Compute, Storage, Database ou Machine Learning dentro do seu Cluster do GKE, consulte Como usar a Identidade da carga de trabalho.

Como desenvolver uma configuração multilocatária

Em casos de uso multilocatários, você precisará gerenciar e implantar os serviços do Cloud Run para Anthos em um cluster do Google Kubernetes Engine que esteja fora do projeto atual. Nesta seção, ensinamos como desenvolver o Cloud Run para Anthos nos serviços do Google Cloud em uma configuração de cluster com vários locatários.

Para gerenciar e implantar os serviços do Cloud Run para Anthos em um cluster do Google Kubernetes Engine fora do projeto atual:

  1. Verifique se você tem acesso de leitura ao ID do projeto do Google Cloud do cluster em que está implantando.

  2. Atualize seu arquivo kubeconfig local com credenciais para o cluster de destino do GKE:

    gcloud container clusters get-credentials NAME \
    --region=REGION \
    --project=PROJECT-ID
    • REGION é a região do Compute Engine do cluster de destino.
    • PROJECT-ID é o projeto ao qual você tem acesso de leitura.

    Para mais informações, consulte a documentação de referência do comando gcloud container clusters get-credentials.

  3. Use a linha de comando gcloud para se comunicar com o cluster do GKE definindo a plataforma padrão como kubernetes:

    gcloud config set run/platform kubernetes
    

Agora é possível executar comandos no cluster de destino do GKE especificado no arquivo kubeconfig.

Por exemplo, o comando a seguir implantará um serviço do Cloud Run for Anthos usando uma imagem de contêiner especificada no Cluster do GKE com credenciais armazenadas no arquivo kubeconfig:

gcloud run deploy SERVICE-NAME --image IMAGE-NAME

Como configurar uma rede privada e interna

A implantação de serviços em uma rede interna é útil para empresas que fornecem aplicativos internos para a equipe e para serviços usados por clientes executados fora do Cloud Run para Anthos no cluster do Google Cloud. Essa configuração permite que outros recursos na sua rede se comuniquem com o serviço usando um endereço IP particular interno (RFC 1918).

Para implantar o Cloud Run para Anthos nos serviços do Google Cloud em um endereço IP interno na rede VPC, altere o gateway de entrada do Istio para usar o balanceamento de carga TCP/UDP interno em vez do balanceamento de carga de rede. Você precisa ser um administrador no cluster para fazer isso.

Para configurar o gateway de entrada:

  1. Atualize o gateway de entrada do Istio para usar o balanceamento de carga TCP/UDP interno:

    kubectl -n gke-system patch svc istio-ingress -p \
        '{"metadata":{"annotations":{"cloud.google.com/load-balancer-type":"Internal"}}}'
    

    Pode levar alguns minutos para que a alteração entre em vigor.

  2. Execute o seguinte comando para pesquisar alterações no cluster do GKE:

    kubectl -n gke-system get svc istio-ingress --watch
    
    1. Procure o valor de EXTERNAL-IP para alterar para um endereço IP particular.
    2. Pressione Ctrl+C para interromper a pesquisa quando você vir um endereço IP particular no campo EXTERNAL-IP.

Para verificar a conectividade interna após as alterações:

  1. Implante um serviço chamado sample no Cloud Run para Anthos no Google Cloud no namespace default:

    gcloud run deploy sample \
    --image gcr.io/knative-samples/simple-api \
    --namespace default \
    --platform gke
    
  2. Crie uma máquina virtual (VM) do Compute Engine na mesma zona que o cluster do GKE:

    VM=cloudrun-gke-ilb-tutorial-vm
    
    gcloud compute instances create $VM
    
  3. Armazene o endereço IP particular do gateway de entrada do Istio em uma variável de ambiente chamada EXTERNAL_IP e um arquivo chamado external-ip.txt:

    export EXTERNAL_IP=$(kubectl -n gke-system get svc istio-ingress \
        -o jsonpath='{.status.loadBalancer.ingress[0].ip}' | tee external-ip.txt)
    
  4. Copie o arquivo que contém o endereço IP da VM:

    gcloud compute scp external-ip.txt $VM:~
    
  5. Conecte-se à VM usando SSH:

    gcloud compute ssh $VM
    
  6. Durante a sessão SSH, teste o serviço de amostra:

    curl -s -w'\n' -H Host:sample.default.example.com $(cat external-ip.txt)
    

    A saída é a seguinte:

    OK
    
  7. Saia da sessão SSH:

    exit
    

Como usar uma instalação separada do Istio

Nas instruções a seguir, mostramos como conectar o Anthos Service Mesh, o complemento Istio no GKE, ou uma instalação personalizada do Istio com o Cloud Run para Anthos, além dos componentes do Istio já instalados por padrão no Cloud Run para Anthos no Google Cloud.

No momento, os componentes do Istio, incluídos na instalação padrão do Cloud Run para Anthos no Google Cloud, não são compatíveis com a injeção automática de arquivo secundário. No entanto, é possível usar outra instalação do Istio para ativar a injeção de arquivo secundário do Istio para o namespace do serviço implantado.

Para usar outra instalação do Istio, é necessário verificar se o Gateway de entrada do Istio se chama istio-ingressgateway no namespace istio-system. O Cloud Run para Anthos é compatível e processa o tráfego externo dos gateways de entrada do Istio instalados em:

  • O namespace istio-system, com o domínio local do cluster istio-ingressgateway.istio-system.svc.cluster.local, que é configurado por padrão quando você usa outra instalação do Istio.
  • O namespace gke-system, com o domínio local do cluster istio-ingress.gke-system.svc.cluster.local configurado com a instalação padrão do Cloud Run para Anthos no Google Cloud.

Para verificar o outro gateway de entrada do Istio que o Cloud Run para Anthos usa:

  1. Abra o ConfigMap config-istio:

    kubectl get configmap config-istio --namespace knative-serving -oyaml
    
  2. Verifique se o outro gateway de entrada do Istio se chama istio-ingressgateway e está no namespace istio-system.

Como ativar HTTPS e domínios personalizados

Se você quer usar domínios HTTPS e personalizados que se aplicam ao cluster, consulte Como ativar certificados HTTPS e TLS automático e mapear domínios personalizados.

Como desativar o Cloud Run para Anthos no Google Cloud

Para desativar o Cloud Run para Anthos no Google Cloud no cluster:

  1. Acesse a página do Google Kubernetes Engine no Console do Cloud:

    Acessar o Google Kubernetes Engine

  2. Clique no cluster em que você quer desativar o Cloud Run para Anthos no Google Cloud.

  3. Clique em Editar.

  4. No menu suspenso Cloud Run para Anthos, selecione Desativar.

  5. Clique em Salvar.

A seguir