Diagnosticar problemas con las protecciones

Descripción general de las barreras de protección

Apigee Hybrid Guardrails es un mecanismo que avisa a los clientes de un posible problema antes de que pueda afectar a una instancia de Hybrid. Es decir, Hybrid Guardrails detendrá un comando si pone en riesgo la estabilidad de una instancia híbrida. Tanto si se trata de una configuración incorrecta como de un recurso insuficiente, Hybrid Guardrails evitará que se hagan modificaciones en una instancia híbrida hasta que se elimine el riesgo del problema. De esta forma, el cliente no tiene que dedicar tiempo a problemas que normalmente tardarían horas o días en resolverse.

Usar las protecciones con Apigee hybrid

Para usar Hybrid Guardrails, ejecuta los mismos comandos de instalación o actualización de Hybrid Helm que se describen en las instrucciones de instalación de Hybrid. No se necesitan comandos adicionales para ejecutar las protecciones.

Cuando ejecutas un comando de Helm para Apigee hybrid, ocurren dos cosas antes de que el comando de Helm aplique la configuración a tu instancia híbrida:

  • Helm crea un pod de Guardrails temporal con la configuración que hayas aplicado. Si el pod de medidas de protección se activa y funciona correctamente, probará tu instancia híbrida con la configuración que hayas aplicado. Si las pruebas se superan, el pod de Guardrails se termina y la configuración se aplica a tu instancia de Apigee hybrid.
  • Si falla la prueba, el pod de Guardrails se quedará en un estado incorrecto para permitir el diagnóstico del pod. El comando helm mostrará un mensaje de error que indica que el pod de Guardrails ha fallado.

En el siguiente ejemplo se muestra cómo usar Guardrails para probar la conectividad de red de una instancia híbrida al plano de control de Apigee como parte de la instalación del componente apigee-datastore. Puedes usar la misma secuencia para todos los componentes híbridos de Apigee:

Instala el componente apigee-datastore con el siguiente comando:

helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  --atomic \
  -f overrides.yaml

Si se produce un error inmediato, el comando de Helm también mostrará un mensaje de error que indica que las comprobaciones de Guardrails han fallado, como en el siguiente ejemplo:

 helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  -f my-overrides.yaml

  . . .
    Error: UPGRADE FAILED: pre-upgrade hooks failed: 1 error occurred:
      * pod apigee-hybrid-helm-guardrail-datastore failed

Para ver qué comprobación ha fallado y por qué, consulta los registros del pod de medidas de protección, como en el siguiente ejemplo:

kubectl logs -n apigee apigee-hybrid-helm-guardrail-datastore
{"level":"INFO","timestamp":"2024-02-01T20:28:55.934Z","msg":"logging enabled","log-level":"INFO"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"","checkpoint":"upgrade","component":"apigee-datastore"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"initiating pre-install checks"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"check validation starting...","check":"controlplane_connectivity"}
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}

En este ejemplo, el mensaje de error de la prueba es esta parte:

{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}

El pod Guardrails se aprovisiona automáticamente cuando ejecutas el comando Helm. Si la prueba de conectividad del plano de control de Apigee se supera, el pod de Guardrails se termina al final de la ejecución.

Comprueba el estado de los pods rápidamente después de ejecutar el comando helm install. En el siguiente ejemplo de salida se muestran los pods de Guardrail en buen estado, lo que significa que la prueba de conectividad del plano de control se ha superado:

kubectl get pods -n apigee -w
NAME                                      READY    STATUS             RESTARTS    AGE
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           1s
apigee-hybrid-helm-guardrail-datastore    0/1      ContainerCreating  0           1s
apigee-hybrid-helm-guardrail-datastore    0/1      Completed          0           2s
apigee-hybrid-helm-guardrail-datastore    0/1      Completed          0           3s
apigee-hybrid-helm-guardrail-datastore    0/1      Terminating        0           3s
apigee-hybrid-helm-guardrail-datastore    0/1      Terminating        0           3s

Si la prueba de conectividad del plano de control de Apigee falla, el pod de Guardrails permanecerá en estado de error, como en el siguiente ejemplo:

kubectl get pods -n apigee -w
NAME                                      READY    STATUS             RESTARTS    AGE
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      ContainerCreating  0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           4s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           5s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           6s

Inhabilitar temporalmente las protecciones

Si necesitas inhabilitar las comprobaciones de las medidas de protección, añade la marca --no-hooks al comando de Helm. En el siguiente ejemplo se muestra la marca --no-hooks en un comando de Helm:

helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  -f overrides.yaml \
  --no-hooks

Comprobaciones de las barreras de protección

En la siguiente tabla se detallan algunas de las comprobaciones de las medidas de protección que se incluyen en la versión 1.14 de Apigee Hybrid.
Nombre Check Point Descripción
cassandra_backup_enabled upgrade Introducido en la versión: 1.14.0

Gravedad: error

Una comprobación que requiere que se habilite la copia de seguridad antes de la actualización. Es necesario crear copias de seguridad antes de actualizar para poder restaurar la versión anterior, si es necesario. Consulta Copia de seguridad y recuperación de Cassandra para obtener información detallada sobre las opciones de copia de seguridad disponibles.

cassandra_recent_backup_csi upgrade Introducido en la versión: 1.14.0

Gravedad: error

Comprobación que requiere que la copia de seguridad de las últimas 24 horas esté presente antes de actualizar si la copia de seguridad de CSI está habilitada. De esta forma, se minimizará la posible pérdida de datos si es necesario restaurar la versión anterior. Consulta Copia de seguridad de CSI para obtener información sobre la copia de seguridad y la restauración de CSI.

Configurar las restricciones en el archivo de anulaciones

A partir de la versión 1.12 de Apigee hybrid, las protecciones se configuran de forma predeterminada en cada gráfico. Puede anular la URL de la imagen, la etiqueta y la política de extracción de imágenes en el archivo overrides.

Por ejemplo, la URL de la imagen, la etiqueta y la política de extracción de Guardrails que se muestran a continuación se añadirían a tu archivo de anulaciones:

# Apigee Ingressgateway
ingressGateway:
  image:
    pullPolicy: Always

## NOTE: The Guardrails config is below. The ingressgateway config above is for position reference only and is NOT required for Guardrails config.

# Apigee Guardrails
guardrails:
  image:
    url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
    tag: "1.14.2"
    pullPolicy: Always

Usar tolerancias de Kubernetes con Guardrails

También puedes añadir tolerancias a las protecciones en tu archivo overrides. Si no se definen tolerancias en la configuración de las protecciones overrides, estas usarán las tolerancias definidas de forma global.

Por ejemplo, para incluir tolerancias específicamente en la sección Guardrails de tu archivo overrides, añadirías algo similar a la siguiente estrofa:

  # Apigee Guardrails
  guardrails:
    image:
      url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
      tag: "1.14.2"
      pullPolicy: Always
    tolerations:
    - key: "say"
      operator: "Equal"
      value: "taunt"
      effect: "NoSchedule"