Este tutorial te guiará a través de la instalación de Kong, un API Gateway, en Kubernetes, utilizando una base de datos PostgreSQL alojada en Cloud SQL. Se utilizará el esquema kong
en la base de datos creada previamente.
Antes de instalar Kong, es necesario crear el esquema kong
y un usuario en la base de datos PostgreSQL en Cloud SQL. Ejecuta el siguiente comando para conectarte a tu base de datos PostgreSQL:
gcloud sql connect [INSTANCE_NAME] --user=postgres
Una vez conectado, crea el esquema y el usuario para Kong:
CREATE SCHEMA kong;
CREATE USER kong WITH PASSWORD '[KONG_DB_PASSWORD]';
GRANT ALL PRIVILEGES ON SCHEMA kong TO kong;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA kong TO kong;
ALTER USER kong WITH SUPERUSER;
Reemplaza [KONG_DB_PASSWORD]
con una contraseña segura para el usuario de la base de datos de Kong.
Para que Kong se conecte a la base de datos de PostgreSQL en Cloud SQL, necesitamos configurar un **Cloud SQL Proxy**. Esto permite que los servicios en Kubernetes se conecten de manera segura a la base de datos.
Primero, crea una cuenta de servicio que tenga acceso a Cloud SQL y genera una clave JSON:
gcloud iam service-accounts create cloud-sql-kong --display-name="Kong Cloud SQL Service Account"
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member="serviceAccount:cloud-sql-kong@[PROJECT_ID].iam.gserviceaccount.com" \
--role="roles/cloudsql.client"
Genera una clave JSON para esta cuenta de servicio:
gcloud iam service-accounts keys create ~/cloudsql-key.json \
--iam-account=cloud-sql-kong@[PROJECT_ID].iam.gserviceaccount.com
Almacena la clave JSON como un secreto en Kubernetes para que pueda ser utilizada por el Cloud SQL Proxy:
kubectl create secret generic cloudsql-instance-credentials \
--from-file=credentials.json=~/cloudsql-key.json
En el despliegue de Kong, se agregará un sidecar para el proxy de Cloud SQL. El siguiente es un ejemplo de cómo se configuraría en el archivo de despliegue de Kong:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kong
namespace: kong
spec:
replicas: 1
selector:
matchLabels:
app: kong
template:
metadata:
labels:
app: kong
spec:
containers:
- name: kong
image: kong/kong-gateway:2.6
env:
- name: KONG_DATABASE
value: "postgres"
- name: KONG_PG_HOST
value: "127.0.0.1"
- name: KONG_PG_USER
value: "kong"
- name: KONG_PG_PASSWORD
valueFrom:
secretKeyRef:
name: kong-postgres-secret
key: password
- name: KONG_PG_DATABASE
value: "kong"
- name: KONG_PG_PORT
value: "5432"
- name: KONG_PROXY_ACCESS_LOG
value: "/dev/stdout"
- name: KONG_ADMIN_ACCESS_LOG
value: "/dev/stdout"
- name: KONG_PROXY_ERROR_LOG
value: "/dev/stderr"
- name: KONG_ADMIN_ERROR_LOG
value: "/dev/stderr"
- name: KONG_ADMIN_LISTEN
value: "0.0.0.0:8001, 0.0.0.0:8444 ssl"
- name: cloud-sql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.17
command:
- "/cloud_sql_proxy"
- "--dir=/cloudsql"
- "--instances=[PROJECT_ID]:[REGION]:[INSTANCE_NAME]=tcp:5432"
- "--credential_file=/secrets/credentials.json"
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets
readOnly: true
volumes:
- name: cloudsql-instance-credentials
secret:
secretName: cloudsql-instance-credentials
Reemplaza los valores de [PROJECT_ID]
, [REGION]
y [INSTANCE_NAME]
con la información de tu proyecto y base de datos de Cloud SQL.
Crea un secreto que almacene la contraseña de la base de datos PostgreSQL que Kong usará para conectarse:
kubectl create secret generic kong-postgres-secret \
--from-literal=password='[KONG_DB_PASSWORD]'
Reemplaza [KONG_DB_PASSWORD]
con la contraseña que configuraste anteriormente para el usuario de la base de datos.
Aplica el archivo de despliegue de Kong con el siguiente comando:
kubectl apply -f kong-deployment.yaml
Para hacer que Kong sea accesible externamente, puedes exponerlo a través de un servicio tipo LoadBalancer:
kubectl expose deployment kong --type=LoadBalancer --name=kong-proxy --port 80 --target-port 8000
Esto creará un servicio que asignará una IP pública para acceder a Kong.
Para verificar que Kong esté desplegado y en ejecución, ejecuta el siguiente comando:
kubectl get services -n kong
Deberías ver una dirección IP externa bajo la columna EXTERNAL-IP
para el servicio kong-proxy
. Utiliza esta IP para acceder a Kong desde un navegador o cliente HTTP.