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 balanceador de carga HTTPS.
Crie um cluster do GKE
O seguinte ficheiro do Terraform cria um cluster do GKE:
O seguinte ficheiro Terraform cria um endereço IP global e uma zona do Cloud DNS:
Inicialize o Terraform:
terraform init
Veja as alterações de infraestrutura:
terraform plan
Quando lhe for pedido, introduza o seu domínio, como
my-domain.net
.Aplique a configuração do Terraform:
terraform apply --auto-approve
Quando 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"
Crie um balanceador de carga de aplicações externo
O manifesto seguinte descreve um ManagedCertificate, um FrontendConfig, um Deployment, um Service e um Ingress:
Substitua
DOMAIN_NAME
pelo nome do seu domínio, comomy-domain.net
.Este manifesto tem as seguintes propriedades:
networking.gke.io/managed-certificates
: o nome do ManagedCertificate.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.yaml
Valide se o Ingress foi criado:
kubectl describe ingress frontend
O 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.
Aplicação de teste
Verifique o estado do certificado SSL:
kubectl get managedcertificates.networking.gke.io networking-managed-cert
O 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 Active
Executar um comando
curl
:curl -Lv https://DOMAIN_NAME
O 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