Este tutorial destina-se a arquitetos da nuvem e administradores de operações interessados em implementar uma aplicação Web num cluster do Google Kubernetes Engine (GKE) e expô-la com um equilibrador de carga HTTPS.
Objetivos
Neste tutorial, vai aprender a:
- Crie um cluster do GKE.
- Crie um endereço IP global e uma zona do Cloud DNS com o Terraform.
- Configure o balanceamento de carga HTTPS.
- Implemente uma app Web de exemplo.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização prevista,
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
Configure o seu projeto
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
Roles required to create a project
To create a project, you need the Project Creator role (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
-
Enable the Google Kubernetes Engine, Cloud DNS APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
Roles required to create a project
To create a project, you need the Project Creator role (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
-
Enable the Google Kubernetes Engine, Cloud DNS APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Tem de ser proprietário de um nome de domínio. O nome do domínio não pode ter mais de 63 carateres. Pode usar o Google Domains ou outra entidade de registo.
Defina variáveis de ambiente:
PROJECT_ID=$(gcloud config get-value project) gcloud config set project $PROJECT_ID gcloud config set compute/region us-central1Clone o repositório de código:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.gitAltere para o diretório de trabalho:
cd kubernetes-engine-samples/autopilot/networking-tutorialInicialize o Terraform:
terraform initVeja as alterações de infraestrutura:
terraform planQuando lhe for pedido, introduza o seu domínio, como
my-domain.net.Aplique a configuração do Terraform:
terraform apply --auto-approveQuando lhe for pedido, introduza o seu domínio, como
my-domain.net.O resultado é semelhante ao seguinte:
Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: cluster_name = "networking-cluster" region = "us-central1"O manifesto seguinte descreve um ManagedCertificate, um FrontendConfig, um Deployment, um Service e um Ingress:
Substitua
DOMAIN_NAMEpelo nome do seu domínio, comomy-domain.net.Este manifesto tem as seguintes propriedades:
networking.gke.io/managed-certificates: o nome do ManagedCertificate. Este recurso aprovisiona um certificado SSL gerido pela Google (clássico).networking.gke.io/v1beta1.FrontendConfig: o nome do recurso FrontendConfig.kubernetes.io/ingress.global-static-ip-name: o nome do endereço IP.kubernetes.io/ingress.class: indica ao controlador do GKE Ingress que crie um balanceador de carga de aplicações externo.
Aplique o manifesto ao cluster:
kubectl apply -f kubernetes-manifests.yamlValide se o Ingress foi criado:
kubectl describe ingress frontendO resultado é semelhante ao seguinte:
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 2m loadbalancer-controller default/frontend Normal CREATE 1m loadbalancer-controller ip: 203.0.113.2 ...O aprovisionamento do Ingress pode demorar vários minutos.
Verifique o estado do certificado SSL:
kubectl get managedcertificates.networking.gke.io networking-managed-certO certificado SSL pode demorar até 30 minutos a ser aprovisionado. O resultado seguinte indica que o certificado SSL está pronto:
NAME AGE STATUS networking-managed-cert 28m ActiveExecutar um comando
curl:curl -Lv https://DOMAIN_NAMEO resultado é semelhante ao seguinte:
* Trying 34.160.115.33:443... * Connected to DOMAIN_NAME (34.160.115.33) port 443 (#0) ... * TLSv1.3 (IN), TLS handshake, Certificate (11): ... * Server certificate: * subject: CN=DOMAIN_NAME ... > Host: DOMAIN_NAME- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimine os recursos do Kubernetes:
kubectl delete -f kubernetes-manifests.yamlElimine os recursos do Terraform:
terraform destroy --auto-approveQuando lhe for pedido, introduza o seu domínio, como
my-domain.net.- Saiba mais sobre a rede do GKE.
Configure o seu ambiente
Neste tutorial, vai usar o Cloud Shell para gerir recursos alojados no
Google Cloud. O Cloud Shell está pré-instalado com o software necessário para este tutorial, incluindo o Terraform, o kubectl e a CLI gcloud.
Crie um cluster do GKE
O seguinte ficheiro Terraform cria um cluster do GKE:
O seguinte ficheiro Terraform cria um endereço IP global e uma zona do Cloud DNS:
Crie um balanceador de carga de aplicações externo
Aplicação de teste
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.