Implementación de Data API Builder en Azure Kubernetes Service

Azure Kubernetes Service (AKS) le permite ejecutar data API Builder en un clúster de Kubernetes administrado junto con otras cargas de trabajo. En esta guía se explica cómo crear una imagen de contenedor personalizada que incluya el archivo de configuración, insertarla en Azure Container Registry (ACR) e implementarla en AKS con un manifiesto de Kubernetes.

Prerrequisitos

Compilación del archivo de configuración

  1. Cree un directorio local para los archivos de configuración.

  2. Inicialice un archivo de configuración base mediante dab init. Utiliza la función @env() para la cadena de conexión, de modo que el secreto se inserte en tiempo de ejecución y no esté incrustado en la imagen.

    dab init \
      --database-type mssql \
      --connection-string "@env('DATABASE_CONNECTION_STRING')"
    
  3. Agregue al menos una entidad mediante dab add. Repita para cada tabla o vista que quiera exponer.

    dab add Books \
      --source dbo.Books \
      --permissions "anonymous:read"
    
  4. Revise dab-config.json antes de continuar.

Compilación e inserción de una imagen de contenedor personalizada

Cree una imagen que incluya dab-config.json en /App/dab-config.json.

  1. Cree una instancia de Azure Container Registry si aún no tiene una.

    az acr create \
      --resource-group <resource-group> \
      --name <registry-name> \
      --sku Basic \
      --admin-enabled true
    
  2. Cree un Dockerfile en el mismo directorio que dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  3. Compile e inserte la imagen mediante ACR Tasks.

    az acr build \
      --registry <registry-name> \
      --image dab:latest \
      .
    
  4. Anote la referencia de imagen completa: <registry-name>.azurecr.io/dab:latest.

Conexión de AKS a ACR

Otorgue al clúster AKS acceso de extracción al registro.

az aks update \
  --name <cluster-name> \
  --resource-group <resource-group> \
  --attach-acr <registry-name>

Almacenamiento de la cadena de conexión como un secreto de Kubernetes

Almacene la cadena de conexión de la base de datos como un secreto de Kubernetes para que nunca esté en el archivo de manifiesto.

kubectl create secret generic dab-secrets \
  --from-literal=DATABASE_CONNECTION_STRING="<your-connection-string>"

Advertencia

Nunca coloque cadenas de conexión directamente en archivos de manifiesto de Kubernetes o imágenes de contenedor. Utilice secretos o Azure Key Vault.

Creación del manifiesto de Kubernetes

Cree un archivo denominado dab-deployment.yaml con el siguiente contenido. Reemplace <registry-name> con el nombre de su ACR.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dab
  labels:
    app: dab
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dab
  template:
    metadata:
      labels:
        app: dab
    spec:
      containers:
        - name: dab
          image: <registry-name>.azurecr.io/dab:latest
          ports:
            - containerPort: 5000
          env:
            - name: DATABASE_CONNECTION_STRING
              valueFrom:
                secretKeyRef:
                  name: dab-secrets
                  key: DATABASE_CONNECTION_STRING
          readinessProbe:
            httpGet:
              path: /health
              port: 5000
            initialDelaySeconds: 5
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /health
              port: 5000
            initialDelaySeconds: 15
            periodSeconds: 20
---
apiVersion: v1
kind: Service
metadata:
  name: dab-service
spec:
  selector:
    app: dab
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000
  type: LoadBalancer

Nota:

readinessProbe y livenessProbe usan el punto de conexión DAB/health. Para obtener más información, consulte Comprobaciones de estado.

Implementación en AKS

  1. Obtenga las credenciales del clúster.

    az aks get-credentials \
      --resource-group <resource-group> \
      --name <cluster-name>
    
  2. Aplique el manifiesto.

    kubectl apply -f dab-deployment.yaml
    
  3. Observe el lanzamiento hasta que los pods estén listos.

    kubectl rollout status deployment/dab
    
  4. Obtenga la dirección IP externa asignada al servicio.

    kubectl get service dab-service
    

    La EXTERNAL-IP columna muestra la dirección IP pública. Permita un minuto para que el equilibrador de carga se aprovisione.

Comprobación de la implementación

  1. Vaya a http://<external-ip>/health. Una respuesta correcta tiene el siguiente aspecto:

    {
      "status": "healthy",
      "version": "2.0.0",
      "app-name": "dab_oss_2.0.0"
    }
    
  2. Probar un endpoint de entidad.

    curl http://<external-ip>/api/Books
    

Escalado de la implementación

Cambie el recuento de réplicas para escalar horizontalmente.

kubectl scale deployment/dab --replicas=4

O actualice spec.replicas en dab-deployment.yaml y vuelva a aplicarlo.

Limpieza de recursos

Retire la implementación y el servicio cuando ya no sean necesarios.

kubectl delete -f dab-deployment.yaml
kubectl delete secret dab-secrets

Para eliminar el clúster y el registro de AKS, elimine el grupo de recursos.

az group delete \
  --name <resource-group> \
  --yes --no-wait