Este tutorial está dirigido a arquitectos de la nube y administradores de operaciones que quieran desplegar una aplicación web en un clúster de Google Kubernetes Engine (GKE) y exponerla con un balanceador de carga HTTPS.
Objetivos
En este tutorial aprenderás a:
- Crea un clúster de GKE.
- Crea una dirección IP global y una zona de Cloud DNS con Terraform.
- Configura el balanceo de carga HTTPS.
- Despliega una aplicación web de ejemplo.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
Configurar el proyecto
- 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 (
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.enable
permission. 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 (
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.enable
permission. Learn how to grant roles. - Debes tener un nombre de dominio. El nombre de dominio no puede tener más de 63 caracteres. Puedes usar Google Domains u otro registrador.
Define las variables de entorno:
PROJECT_ID=$(gcloud config get-value project) gcloud config set project $PROJECT_ID gcloud config set compute/region us-central1
Clona el repositorio de código:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Cambia al directorio de trabajo:
cd kubernetes-engine-samples/autopilot/networking-tutorial
Inicializa Terraform:
terraform init
Para ver los cambios en la infraestructura, sigue estos pasos:
terraform plan
Cuando se te solicite, introduce tu dominio, como
my-domain.net
.Aplica la configuración de Terraform:
terraform apply --auto-approve
Cuando se te solicite, introduce tu dominio, como
my-domain.net
.El resultado debería ser similar al siguiente:
Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: cluster_name = "networking-cluster" region = "us-central1"
El siguiente manifiesto describe un ManagedCertificate, un FrontendConfig, un Deployment, un Service y un Ingress:
Sustituye
DOMAIN_NAME
por el nombre de tu dominio, comomy-domain.net
.Este manifiesto tiene las siguientes propiedades:
networking.gke.io/managed-certificates
: nombre del ManagedCertificate.networking.gke.io/v1beta1.FrontendConfig
: nombre del recurso FrontendConfig.kubernetes.io/ingress.global-static-ip-name
: el nombre de la dirección IP.kubernetes.io/ingress.class
: indica al controlador de Ingress de GKE que cree un balanceador de carga de aplicaciones externo.
Aplica el manifiesto a tu clúster:
kubectl apply -f kubernetes-manifests.yaml
Verifica que se ha creado el Ingress:
kubectl describe ingress frontend
El resultado debería ser similar al siguiente:
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 2m loadbalancer-controller default/frontend Normal CREATE 1m loadbalancer-controller ip: 203.0.113.2 ...
El aprovisionamiento de Ingress puede tardar varios minutos.
Comprueba el estado del certificado SSL:
kubectl get managedcertificates.networking.gke.io networking-managed-cert
El certificado SSL puede tardar hasta 30 minutos en aprovisionarse. El siguiente resultado indica que el certificado SSL está listo:
NAME AGE STATUS networking-managed-cert 28m Active
Ejecuta un comando
curl
:curl -Lv https://DOMAIN_NAME
El resultado debería ser similar al siguiente:
* 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.
Elimina los recursos de Kubernetes:
kubectl delete -f kubernetes-manifests.yaml
Elimina los recursos de Terraform:
terraform destroy --auto-approve
Cuando se te solicite, introduce tu dominio, como
my-domain.net
.
Configurar un entorno
En este tutorial, usarás Cloud Shell para gestionar los recursos alojados enGoogle Cloud. Cloud Shell tiene preinstalado el software que necesitas para este tutorial, como Terraform, kubectl
y la CLI de gcloud.
Crear un clúster de GKE
El siguiente archivo de Terraform crea un clúster de GKE:
El siguiente archivo de Terraform crea una dirección IP global y una zona de Cloud DNS:
Crear un balanceador de carga de aplicación externo
Aplicación de prueba
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.