Como implantar serviços internos usando o Cloud Run para Anthos no Google Cloud

Neste tutorial, demonstramos como expor serviços implantados no Cloud Run para Anthos no Google Cloud na sua rede interna. Esse tipo de configuração permite que outros recursos na sua rede se comuniquem com o serviço usando um endereço IP particular (RFC 1918). A exposição de serviços em uma rede interna é útil para empresas que fornecem aplicativos internos à equipe e para serviços usados por clientes executados fora do Cloud Run para Anthos no cluster do Google Cloud.

O Cloud Run para Anthos oferece uma experiência focada no desenvolvedor para implantar e disponibilizar aplicativos e funções em execução no GKE. Por padrão, o Cloud Run para Anthos no Google Cloud expõe serviços fora do cluster usando o gateway de entrada do Istio. Esse gateway é um serviço do Kubernetes do tipo LoadBalancer, o que significa, por padrão, que ele é exposto em um endereço IP público usando o balanceamento de carga de rede.

Neste tutorial, mostramos como expor os serviços do Cloud Run para Anthos no Google Cloud em um endereço IP interno na rede VPC alterando o gateway de entrada do Istio para usar o balanceamento de carga TCP/UDP interno em vez do balanceamento de carga de rede.

Objetivos

  • Criar um cluster do GKE com o Cloud Run ativado.
  • Atualizar o gateway de entrada do Istio para usar o balanceamento de carga TCP/UDP interno.
  • Testar o aplicativo implantando um serviço de amostra no Cloud Run para Anthos no Google Cloud.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.

Antes de começar

  1. Faça login na sua conta do Google.

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

  2. 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

  3. 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.

  4. No Console do Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente com o SDK do Cloud pré-instalado com a ferramenta de linha de comando gcloud e os valores já definidos para seu projeto atual. A inicialização da sessão pode levar alguns segundos.

  5. Você executa todos os comandos deste tutorial no Cloud Shell.
  6. No Cloud Shell, ative a API Cloud Run, a API GKE e as APIs do Cloud:
    gcloud services enable \
        cloudapis.googleapis.com \
        container.googleapis.com \
        run.googleapis.com

Como configurar o ambiente

  • No Cloud Shell, defina variáveis de ambiente e os padrões da ferramenta gcloud para a zona do Compute Engine e o nome do cluster do GKE que você quer usar neste tutorial:

    ZONE=us-central1-f
    CLUSTER=cloudrun-gke-ilb-tutorial
    
    gcloud config set compute/zone $ZONE
    gcloud config set run/cluster $CLUSTER
    gcloud config set run/cluster_location $ZONE
    

    Os exemplos neste tutorial usam us-central1-f como a zona e cloudrun-gke-ilb-tutorial como o nome do cluster. É possível usar valores diferentes. Para mais informações, consulte Geografia e regiões.

Como criar um cluster do GKE com o Cloud Run ativado

  1. No Cloud Shell, crie um cluster do GKE com o complemento do Cloud Run:

    gcloud beta container clusters create $CLUSTER \
        --addons HorizontalPodAutoscaling,HttpLoadBalancing,CloudRun \
        --enable-ip-alias \
        --enable-stackdriver-kubernetes \
        --machine-type n1-standard-2
    

Como configurar o balanceamento de carga TCP/UDP interno

  1. No Cloud Shell, corrija 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. Execute o comando a seguir para pesquisar o cluster do GKE em busca de alterações. Procure o valor de EXTERNAL-IP para alterar para um endereço IP privado:

    kubectl -n gke-system get svc istio-ingress --watch
    

    Pressione Ctrl+C para interromper a pesquisa quando você vir um endereço IP privado no campo EXTERNAL-IP.

Implantar um serviço de amostra

  • No Cloud Shell, 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
    

Verificar a conectividade interna

  1. No Cloud Shell, crie uma máquina virtual (VM) do Compute Engine na mesma zona do cluster do GKE:

    VM=cloudrun-gke-ilb-tutorial-vm
    
    gcloud compute instances create $VM
    
  2. Armazene o endereço IP particular do gateway de entrada do Istio em uma variável de ambiente chamada EXTERNAL_IP e em 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)
    
  3. Copie o arquivo que contém o endereço IP para a VM:

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

    gcloud compute ssh $VM
    
  5. 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
    
  6. Saia da sessão SSH:

    exit
    

Solução de problemas

Se você tiver problemas com este tutorial, analise os seguintes documentos:

Como fazer a limpeza

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform, faça o seguinte:

Excluir o projeto

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar a página "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Excluir recursos individuais

Se você quiser manter o projeto do Google Cloud usado neste tutorial, exclua os recursos individuais:

  1. Exclua o cluster do GKE:

    gcloud container clusters delete $CLUSTER --quiet --async
    
  2. Exclua a instância do Compute Engine:

    gcloud compute instances delete $VM --quiet
    

A seguir