GCP API Gateway es un producto de Google Cloud que ofrece un servicio de gateway que podemos utilizar como punto de entrada único a todas las APIs de nuestros microservicios desplegados en GCP.
Una vez creado y configurado, GCP API Gateway se hace disponible a través de una
URL generada automáticamente por Google, como por ejemplo
https://megacorp-api-gateway-ayxsu52z.ew.gateway.dev. Esto puede no ser muy
conveniente si queremos ofrecer nuestra Gateway al público, probablemente bajo
un dominio de nuestra propiedad como podría ser simplemente
https://api.megacorp.com.
Esta referencia indica cómo podemos hacer ésto a través de la herramienta de
consola de GCP gcloud.
1. Generar el certificado SSL para para nuestro dominio
gcloud compute ssl-certificates create <NOMBRE_CERTIFICADO> \
--description="Megacorp API Gateway SSL certificate" \
--domains="gateway.megacorp.com" \
--global
Donde NOMBRE_CERTIFICADO es cualquier nombre que queramos, por ejemplo
megacorp-gateway-ssl-certificate.
Podemos comprobar que el certificado ha sido creado con el siguiente comando:
gcloud compute ssl-certificates list --global
Nótese que en principio el certificado aparecerá con la marca PROVISIONING.
Ésto indica que GCP está aprovisionando el certificado y todavía no está
disponible. Téngase ésto en cuenta en caso de terminar el tutorial y recibir
errores del tipo
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
en las primeras pruebas. En ese caso, habrá que esperar un tiempo (normalmente
unos minutos, pero puede ser desde media hora a varias horas) a que se
sincronice.
2. Crear el NEG para el API Gateway
El NEG (Network Endpoint Group / grupo de extremos de red) es un objeto interno de configuración de Google Cloud que especifica un grupo de servicios de Backend. Necesitamos crear uno para nuestra API Gateway:
gcloud beta compute network-endpoint-groups create <NOMBRE_NEG> \
--region=europe-west1 \
--network-endpoint-type=serverless \
--serverless-deployment-platform=apigateway.googleapis.com \
--serverless-deployment-resource=<ID_API_GATEWAY>
Donde:
NOMBRE_NEGes cualquier nombre que queramos, por ejemplomegacorp-api-gateway-neg.ID_API_GATEWAYes el ID del Gateway que hayamos asignado en GCP y que podemos encontrar en el GCP Dashboard de API Gateway, seleccionando la API que queremos y luego la pestaña “GATEWAYS” y viendo los detalles del Gateway si es necesario. Por ejemplo ésto podría sermegacorp-api-gateway.
3. Crear el Servicio de Backend
Un Backend Service o servicio de backend es otro objeto de configuración de GCP que define la distribución de tráfico de red para Cloud Load Balancing.
Primero debemos crear un Backend Service, y luego agregarle un Backend.
Crear Backend Service
gcloud compute backend-services create <NOMBRE_BACKEND_SERVICE> --global
Donde de nuevo NOMBRE_BACKEND_SERVICE puede ser lo que nosotros queramos. Por
ejemplo megacorp-api-gateway-backend-service.
Agregar nuevo Backend
gcloud compute backend-services add-backend <NOMBRE_BACKEND_SERVICE> \
--global \
--network-endpoint-group=<NOMBRE_NEG> \
--network-endpoint-group-region=europe-west1
Donde:
NOMBRE_BACKEND_SERVICEes el nombre que le hayamos dado antes al Backend Service, en nuestro caso el ejemplo eramegacorp-api-gateway-backend-service.NOMBRE_NEGes el nombre que le habíamos asignado antes al NEG, en nuestro caso el ejemplo eramegacorp-api-gateway-neg.
4. Crear las URL Maps
URL Maps es de nuevo un objeto de configuración interno de GCP que enruta las peticiones enrtrantes hacia los correspondientes servicios de Backend.
gcloud compute url-maps create <NOMBRE_URL_MAP> \
--default-service=<NOMBRE_BACKEND_SERVICE>
Donde:
NOMBRE_URL_MAPpuede ser el nombre que queramos, por ejemplomegacorp-api-gateway-url-map.NOMBRE_BACKEND_SERVICEes el nombre que le hayamos dado antes al Backend Service, en nuestro caso el ejemplo eramegacorp-api-gateway-backend-service.
5. Crear el proxy HTTPS
Puesto que vamos a utilizar HTTPS con certificados (punto 1 de esta guía), hay que crear el Proxy HTTPS necesario.
gcloud compute target-https-proxies create <NOMBRE_PROXY> \
--ssl-certificates=<NOMBRE_CERTIFICADO> \
--url-map=<NOMBRE_URL_MAP>
Donde:
<NOMBRE_PROXY>puede ser el nombre que queramos, por ejemplomegacorp-api-gateway-https-proxy.NOMBRE_CERTIFICADOes el nombre que le hayamos dado al certificado SSL. En nuestro ejemplo eramegacorp-gateway-ssl-certificate.<NOMBRE_URL_MAP>es el nombre que le hayamos dado al URL Map. En nuestro ejemplo eramegacorp-api-gateway-url-map.
6. Crear reglas de reenvío/filtrado
Al Proxy HTTPS hay que asignarle reglas paras que entienda qué debe hacer con el tráfico entrante. En nuestro caso para API Gateway, inicialmente, sólo se necesita una:
gcloud compute forwarding-rules create <NOMBRE_REGLA> \
--target-https-proxy=<NOMBRE_PROXY> \
--global \
--ports=443
Donde:
<NOMBRE_REGLA>puede ser el nombre que queramos, por ejemplomegacorp-api-gateway-forwarding-rule.<NOMBRE_PROXY>es el nombre que le hayamos dado al Proxy HTTPS. En nuestro ejemplo eramegacorp-api-gateway-https-proxy.
Comprobar la creación de la regla
Comprobamos que la regla se ha creado correctamente con el siguiente comand:
gcloud compute forwarding-rules list
Esto nos debería dar una salida que para nuestro ejemplo en esta guía debería ser así:
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET
megacorp-api-gateway-forwarding-rule 34.123.123.123 TCP megacorp-api-gateway-https-proxy
Es importante anotar la dirección IP, 34.123.123.123, porque se necesita para
el paso final.
7. Configurar GCP DNS Records
Éste último paso debemos hacerlo en GCP Dashboard. Se trata de ir a “Network Services”, “Cloud DNS”, seleccionar la zona donde se encuentra alojado el dominio que queremos usar para GCP API Gateway y configurar dicho dominio añadiendo la IP señalada.
Una vez finalizado este proceso, se debería poder acceder a nuestra API Gateway
sin problemas a través de https://gateway.megacorp.com.