Este tutorial demonstra como usar o Google Kubernetes Engine (GKE) para expor a sua aplicação Web à Internet num endereço IP externo estático e configurar um nome de domínio para apontar para a sua aplicação.
Este tutorial pressupõe que tem um nome de domínio registado, como example.com
.
Objetivos
Este tutorial demonstra os seguintes passos:
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
Siga os passos abaixo para ativar a API Kubernetes Engine:- Visite a página do Kubernetes Engine na Google Cloud consola.
- Crie ou selecione um projeto.
- Aguarde até que a API e os serviços relacionados sejam ativados. Esta ação pode demorar vários minutos.
-
Verify that billing is enabled for your Google Cloud project.
Instale as seguintes ferramentas de linha de comandos usadas neste tutorial:
-
gcloud
é usado para criar e eliminar clusters do Kubernetes Engine.gcloud
está incluído na CLIgcloud
. -
O
kubectl
é usado para gerir o Kubernetes, o sistema de orquestração de clusters usado pelo Kubernetes Engine. Pode instalar okubectl
através dogcloud
:gcloud components install kubectl
Clone o exemplo de código do GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernetes-engine-samples/quickstarts/hello-app/manifests
Defina predefinições para a ferramenta de linha de comandos gcloud
Para poupar tempo a escrever o ID do projeto
e as opções da zona do Compute Engine na gcloud
ferramenta de linha de comandos, pode definir as predefinições:
gcloud config set project project-id gcloud config set compute/zone compute-zone
Crie um cluster
Crie um cluster:
gcloud container clusters create-auto domain-test
Implemente a sua aplicação Web
O manifesto seguinte descreve uma implementação que executa uma imagem de contentor de aplicação Web de exemplo:
Crie a implementação:
kubectl apply -f helloweb-deployment.yaml
Exponha a sua aplicação
Pode expor a sua aplicação no GKE através de qualquer um dos seguintes métodos:
Use um serviço, que cria um balanceador de carga de rede de encaminhamento externo que funciona com endereços IP regionais.
Use um Ingress, que cria um balanceador de carga de aplicações e suporta endereços IP globais.
Para saber mais acerca das vantagens e desvantagens de cada método, consulte Configurar um Application Load Balancer externo com o Ingress.
Utilize um serviço
Para garantir que a sua aplicação tem um endereço IP externo estático, tem de reservar um endereço IP estático.
Se optar por expor a sua aplicação através de um serviço, tem de criar um endereço IP regional. Os endereços IP globais só funcionam com o tipo de recurso de entrada, conforme explicado na secção seguinte.
Para usar um serviço, crie um endereço IP estático denominado helloweb-ip
na região us-central1
:
gcloud
gcloud compute addresses create helloweb-ip --region us-central1
Encontre o endereço IP estático que criou:
gcloud compute addresses describe helloweb-ip --region us-central1
O resultado é semelhante ao seguinte:
...
address: 203.0.113.32
...
Config Connector
Nota: este passo requer o Config Connector. Siga as instruções de instalação para instalar o Config Connector no seu cluster.
Guarde o manifesto como compute-address-regional.yaml
.
Aplique o manifesto ao cluster:
kubectl apply -f compute-address-regional.yaml
Encontre o endereço IP estático que criou:
kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'
O manifesto seguinte descreve um serviço do tipo LoadBalancer, que cria um Network Load Balancer de encaminhamento externo para expor pods com um endereço IP externo.
Substitua YOUR.IP.ADDRESS.HERE
pelo endereço IP estático:
Crie o serviço:
kubectl apply -f helloweb-service-static-ip.yaml
Veja o endereço IP reservado associado ao equilibrador de carga:
kubectl get service
O resultado é semelhante ao seguinte:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s
Use uma entrada
Se optar por expor a sua aplicação através de um
Ingress,
tem de
reservar um endereço IP estático global.
Use a anotação kubernetes.io/ingress.global-static-ip-name
para especificar um endereço IP global.
Para expor a sua aplicação a clientes e serviços numa região, use um endereço IP interno estático regional ao implementar um recurso de entrada interno para o GKE, juntamente com as anotações necessárias.
Para saber como usar o Ingress para expor as suas aplicações à Internet, consulte o artigo Configurar um equilibrador de carga de aplicações externo com o Ingress.
Para criar um endereço IP estático global com o nome helloweb-ip
:
gcloud
gcloud compute addresses create helloweb-ip --global
Encontre o endereço IP estático que criou:
gcloud compute addresses describe helloweb-ip --global
O resultado é semelhante ao seguinte:
...
address: 203.0.113.32
...
Config Connector
Nota: este passo requer o Config Connector. Siga as instruções de instalação para instalar o Config Connector no seu cluster.
Guarde o manifesto como compute-address-global.yaml
.
Aplique o manifesto ao cluster:
kubectl apply -f compute-address-global.yaml
O manifesto seguinte descreve um Ingress que expõe uma aplicação Web num IP estático com dois recursos:
Service
comtype:NodePort
- Um
Ingress
configurado com o nome do serviço e a anotação de IP estático
A anotação kubernetes.io/ingress.global-static-ip-name
especifica o nome do recurso de endereço IP global a associar ao balanceador de carga.
Aplique o manifesto ao cluster:
kubectl apply -f helloweb-ingress-static-ip.yaml
Veja o endereço IP associado ao equilibrador de carga:
kubectl get ingress
O resultado é semelhante ao seguinte
NAME HOSTS ADDRESS PORTS AGE
helloweb * 203.0.113.32 80 4m
Veja o seu endereço IP estático reservado
Para verificar se o balanceador de carga está configurado corretamente, pode usar um navegador de Internet para visitar o endereço IP ou usar curl
:
curl http://203.0.113.32/
O resultado é semelhante ao seguinte:
Hello, world!
Hostname: helloweb-3766687455-8lvqv
Configure os registos do nome de domínio
Para que os navegadores que consultam o seu nome de domínio, como example.com
, ou o nome do subdomínio, como blog.example.com
, apontem para o endereço IP estático que reservou, tem de atualizar os registos DNS (servidor de nomes de domínio) do seu nome de domínio.
Tem de criar um registo DNS do tipo A (Endereço) para o nome do seu domínio ou subdomínio e ter o respetivo valor configurado com o endereço IP reservado
Os registos DNS do seu domínio são geridos pelo seu servidor de nomes. O seu servidor de nomes pode ser a "entidade de registo" onde registou o seu domínio, um serviço DNS, como o Cloud DNS, ou outro fornecedor de terceiros.
Se o seu servidor de nomes for o Cloud DNS: siga o guia de início rápido do Cloud DNS para configurar o registo A de DNS para o seu nome de domínio com o endereço IP reservado da sua aplicação.
Se o seu servidor de nomes for outro fornecedor: consulte a documentação do seu fornecedor de DNS sobre a definição de registos A de DNS para configurar o seu nome de domínio. Se optar por usar o Cloud DNS, consulte o artigo Migrar para o Cloud DNS.
Visite o nome do seu domínio
Para verificar se os registos A de DNS do nome do seu domínio são resolvidos para o endereço IP que reservou, visite o nome do seu domínio.
Para fazer uma consulta de DNS para o registo A do nome do domínio, execute o comando host
:
host example.com
O resultado é semelhante ao seguinte:
example.com has address 203.0.113.32
Agora, pode direcionar o navegador de Internet para o nome do domínio e visitar o seu Website.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Elimine o serviço e o Ingress:
kubectl delete ingress,service -l app=hello
Liberte o IP estático reservado. Após a eliminação do equilibrador de carga, o endereço IP não usado, mas reservado, é faturado de acordo com os preços de IP não usado.
Se usou um Serviço:
gcloud compute addresses delete helloweb-ip --region us-central1
Se usou um Ingress:
gcloud compute addresses delete helloweb-ip --global
Elimine a aplicação de exemplo:
kubectl delete -f helloweb-deployment.yaml
Elimine o cluster:
gcloud container clusters delete domain-test
O que se segue?
- Explore outros tutoriais do Kubernetes Engine.
- Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Consulte o nosso Centro de arquitetura na nuvem.